<commit_before>'use strict';

/**@type {{[k: string]: ModdedPureEffectData}} */
let BattleStatuses = {
	/*
	// Example:
	userid: {
		noCopy: true,
		onStart() {
			this.add(`c|+Username|Switch In Message`);
		},
		onSwitchOut() {
			this.add(`c|+Username|Switch Out Message`);
		},
		onFaint() {
			this.add(`c|+Username|Faint Message`);
		},
		// Innate effects go here
	},
	*/
	// Please keep statuses organized alphabetically based on staff member name!
	'2xthetap': { // No single quotes causes issues
		noCopy: true,
		onStart() {
			this.add(`c|+2xTheTap|Time for a heckin' battle.`);
		},
		onSwitchOut() {
			this.add(`c|+2xTheTap|Doin' me a heckin' concern.`);
		},
		onFaint() {
			this.add(`c|+2xTheTap|Doin' me the final bamboozle.`);
		},
	},
	'5gen': {
		noCopy: true,
		onStart(source) {
			this.add(`c|+5gen|Someone asked for extra sauce?`);
			if (source.illusion) return;
			this.field.setWeather('sunnyday', source);
		},
		onSwitchOut() {
			this.add(`c|+5gen|Need to get some from the back.`);
		},
		onFaint() {
			this.add(`c|+5gen|I'm not dead yet, just changing formes.`);
		},
	},
	aelita: {
		noCopy: true,
		onStart() {
			this.add(`c|@Aelita|Transfer, Aelita! Scanner, Aelita! Virtualization!`);
		},
		onSwitchOut() {
			this.add(`c|@Aelita|I have a tower to deactivate. See ya!`);
		},
		onFaint() {
			this.add(`c|@Aelita|CODE: LYOKO . Tower deactivated... Return to the past, now!`);
		},
	},
	aeonic: {
		noCopy: true,
		onStart() {
			this.add(`c|@Aeonic|Guys the emoji movie wasn't __that__ bad`);
		},
		onSwitchOut() {
			this.add(`c|@Aeonic|Still better than kie btw`);
		},
		onFaint() {
			this.add(`c|@Aeonic|Don't forget me`);
		},
	},
	aethernum: {
		noCopy: true,
		onStart() {
			this.add(`c|@Aethernum|I am __Eterno__, fear me! ...or not...but you should! ...or not...`);
		},
		onSwitchOut() {
			this.add(`c|@Aethernum|I'm not defeated, i'm just afk :^)`);
		},
		onFaint() {
			this.add(`c|@Aethernum| Has been fun! But i'm too lazy to keep fighting ^_^'`);
		},
	},
	akiamara: {
		noCopy: true,
		onStart() {
			this.add(`c|+Akiamara|alguem br?`);
		},
		onSwitchOut() {
			this.add(`c|+Akiamara|Pode me multar que já volto`);
		},
		onFaint() {
			this.add(`c|+Akiamara|I'm going to report you to my big fren Mitsuki`);
		},
	},
	akir: {
		noCopy: true,
		onStart() {
			this.add(`c|%Akir|hey whats up`);
		},
		onSwitchOut(pokemon) {
			this.add(`c|%Akir|sorry need to build more`);
			if (pokemon.illusion) return;
			pokemon.heal(pokemon.baseMaxhp / 3);
		},
		onFaint() {
			this.add(`c|%Akir|too sleepy, c ya`);
		},
		onSourceModifyDamage(damage, source, target, move) {
			if (target.getMoveHitData(move) && !target.illusion) {
				this.debug('Mushroom Guard halves damage.');
				return this.chainModify(0.5);
			}
		},
	},
	alpha: {
		noCopy: true,
		onStart() {
			this.add(`c|@Alpha|MAMMA MIA! It's me, ALPHA!`);
		},
		onSwitchOut() {
			this.add(`c|@Alpha|brb gonna eat some pizza`);
		},
		onFaint() {
			this.add(`c|@Alpha|PER LA PATRIA!`);
		},
	},
	andrew: {
		noCopy: true,
		onStart() {
			this.add(`c|%Andrew|Hah! You better have BURN HEAL!`);
		},
		onSwitchOut() {
			this.add(`c|%Andrew|brb kuncing`);
		},
		onFaint() {
			this.add(`c|%Andrew|<_<`);
		},
	},
	anubis: {
		noCopy: true,
		onStart() {
			this.add(`c|&Anubis|hi ur qt`);
			// In loving memory of the SSB programming team's sanity.
			if (this.random(300) === 272) this.add(`c|~HoeenHero|Anubis's set is OP against programmer sanity.`);
		},
		onSwitchOut() {
			this.add(`c|&Anubis|brb making coffee`);
		},
		onFaint() {
			this.add(`c|&Anubis|worthless evildoer :(`);
		},
	},
	aquagtothepast: {
		noCopy: true,
		onStart() {
			this.add(`c|+A Quag to The Past|The Goons are all here`);
		},
		onSwitchOut() {
			this.add(`c|+A Quag to The Past|um no`);
		},
		onFaint() {
			this.add(`c|+A Quag to The Past|Wait, this isn't the groupchat...`);
		},
	},
	arandomduck: {
		noCopy: true,
		onStart() {
			this.add(`c|+a random duck|SWANNA LOSE???`);
		},
		onSwitchOut() {
			this.add(`c|+a random duck|YEET`);
		},
		onFaint() {
			this.add(`c|+a random duck|I guess that was my swan song`);
		},
	},
	arcticblast: {
		noCopy: true,
		onStart() {
			this.add(`c|%Arcticblast|My trash friend can do no wrong`);
		},
		onModifyMove(move) {
			if (move.id === 'knockoff') {
				move.onAfterHit = function (target, source) {
					if (source.hp) {
						let item = target.takeItem();
						if (item) {
							this.add('-enditem', target, item.name, '[from] move: Knock Off', '[of] ' + source);
							this.add(`c|%Arcticblast|+20 ;)`);
						}
					}
				};
			}
		},
		onFaint(pokemon) {
			let activeMon = pokemon.side.foe.active[0].template.speciesid;
			if (activeMon === 'greninja') {
				this.add(`c|%Arcticblast|FRIENDS DON’T LET FRIENDS PLAY FROGS`);
			} else if (activeMon === 'pumpkaboosuper') {
				this.add(`c|%Arcticblast|WHY IS MY KAREN PRIZED`);
			} else {
				this.add(`c|%Arcticblast|FREE SKYMIN`);
			}
		},
		onSourceFaint(target) {
			if (target.template.speciesid === 'greninja') {
				this.add(`c|%Arcticblast|FRIENDS DON’T LET FRIENDS PLAY FROGS`);
			}
		},
	},
	arsenal: {
		noCopy: true,
		onStart() {
			this.add(`c|%Arsenal|Wenger In`);
		},
		onSwitchOut() {
			this.add(`c|%Arsenal|Time to watch anime`);
		},
		onFaint() {
			this.add(`c|%Arsenal|Wenger Out`);
		},
	},
	asheviere: {
		noCopy: true,
		onStart() {
			this.add(`c|~Asheviere|The Light shall bring victory!`);
		},
		onSwitchOut() {
			this.add(`c|~Asheviere|Regenerator is very fair and balanced`);
		},
		onFaint() {
			this.add(`c|~Asheviere|Who will lead my kingdom now?`);
		},
	},
	averardo: {
		noCopy: true,
		onStart() {
			this.add(`c|+Averardo|ECCOMI`);
		},
		onSwitchOut() {
			this.add(`c|+Averardo|Scillato (PA)`);
		},
		onFaint() {
			this.add(`c|+Averardo|Non mi sporcare più i MP`);
		},
	},
	beowulf: {
		noCopy: true,
		onStart() {
			this.add(`c|@Beowulf|/me BUZZES LOUDLY`);
		},
		onSwitchOut() {
			this.add(`c|@Beowulf|/me BUZZES LOUDLY`);
		},
		onFaint() {
			this.add(`c|@Beowulf|BUZZ BUZZ BUZZ BUZZ`);
		},
	},
	biggie: {
		noCopy: true,
		onStart() {
			this.add(`c|@biggie|Gamin' on ya`);
		},
		onSwitchOut() {
			this.add(`c|@biggie|Mission complete!`);
		},
		onFaint() {
			this.add(`c|@biggie|It was all a dream`);
		},
	},
	birdy: {
		noCopy: true,
		onStart() {
			this.add(`c|+Birdy~!|And I oop- uh, I mean, hi!`);
		},
		onSwitchOut() {
			this.add(`c|+Birdy~!|Be like that, then. Don't blame ME if you lose.`);
		},
		onFaint() {
			this.add(`c|+Birdy~!|My last words will always be that I don't spam.`);
		},
		// Feather Tuft Innate
		onModifyDefPriority: 6,
		onModifyDef(def, pokemon) {
			if (!pokemon.transformed && !pokemon.illusion) {
				return this.chainModify(1.5);
			}
		},
		onModifySpDPriority: 6,
		onModifySpD(spd, pokemon) {
			if (!pokemon.transformed && !pokemon.illusion) {
				return this.chainModify(1.5);
			}
		},
	},
	bobochan: {
		noCopy: true,
		onStart() {
			this.add(`c|@bobochan|Pika Pika! Just kidding, it's just a knock off clone.`);
		},
		onSwitchOut() {
			this.add(`c|@bobochan|Time to skedaddle!`);
		},
		onFaint() {
			this.add(`c|@bobochan|You cruel trainer for killing an innocent pokemon!`);
		},
	},
	brandon: {
		noCopy: true,
		onStart() {
			this.add(`c|%Brandon|Let's put the petal to the medal!`);
		},
		onSwitchOut() {
			this.add(`c|%Brandon|I gotta charge my phone brb`);
		},
		onFaint() {
			this.add(`c|%Brandon|I need a nap`);
		},
	},
	cake: {
		noCopy: true,
		onStart(source) {
			this.add(`c|+Cake|h`);
			if (source.illusion) return;
			this.add('-start', source, 'typeadd', 'Ghost');
		},
		onSwitchOut(source) {
			this.add(`c|+Cake|${source.side.name} is a nerd`);
		},
		onFaint() {
			this.add(`c|+Cake|According to all known laws of aviation, there is no way that Dunsparce should be able to fly. Its wings are too small to get its fat little body off the ground. Dunsparce, of course, does not learn Fly for this reason. It does learn Roost, though. Cute li'l winged snake thing.`);
		},
		// Fat Snake Innate
		onModifyDefPriority: 6,
		onModifyDef(def, pokemon) {
			if (!pokemon.transformed && !pokemon.illusion) {
				return this.chainModify(1.5);
			}
		},
		onModifySpDPriority: 6,
		onModifySpD(spd, pokemon) {
			if (!pokemon.transformed && !pokemon.illusion) {
				return this.chainModify(1.5);
			}
		},
	},
	ckilgannon: {
		noCopy: true,
		onStart() {
			this.add(`c|+c.kilgannon|Hope you're not afraid of the dark!`);
		},
		onSwitchOut() {
			this.add(`c|+c.kilgannon|/me growls`);
		},
		onFaint() {
			this.add(`c|+c.kilgannon|Your time will come.`);
		},
	},
	cantsay: {
		noCopy: true,
		onStart() {
			this.add(`c|@cant say|(´・ω・\`)`);
		},
		onSwitchOut() {
			this.add(`c|@cant say|wow CTed lol`);
		},
		onFaint() {
			this.add(`c|@cant say|bg haxor :(`);
		},
	},
	catalystic: {
		noCopy: true,
		onStart() {
			this.add(`c|+Catalystic|The Birb is here!`);
		},
		onSwitchOut() {
			this.add(`c|+Catalystic|The Birb will be back!`);
		},
		onFaint() {
			this.add(`c|+Catalystic|The Birb is never lucky.`);
		},
	},
	ceteris: {
		noCopy: true,
		onStart() {
			this.add(`c|@Ceteris|Your loss is inevitable, you best forfeit the battle if you know what's good for you. ╰(⇀︿⇀)つ-]═───`);
		},
		onSwitchOut(source) {
			this.add(`c|@Ceteris|Saving the best for last, ${source.side.name}, a wise choice my friend.`);
		},
		onFaint() {
			this.add(`c|@Ceteris|IMPOSSIBLE!! THIS IS AN OUTRAGE!! I WILL EXACT MY REVENGE ON YOU ONE DAY (◣_◢)`);
		},
	},
	chaos: {
		noCopy: true,
		// No phrases provided
	},
	chloe: {
		noCopy: true,
		onStart() {
			this.add(`c|@Chloe|hlelo`);
		},
		onSwitchOut() {
			this.add(`c|@Chloe|bubye`);
		},
		onFaint() {
			this.add(`c|@Chloe|aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`);
		},
	},
	darth: {
		noCopy: true,
		onStart() {
			this.add(`c|+Darth|The angel of stall descends upon the battlefield.`);
		},
		onSwitchOut() {
			this.add(`c|+Darth|The angel of stall has decided upon a tactical retreat.`);
		},
		onFaint() {
			this.add(`c|+Darth|Regenerator is a perfectly balanced ability.`);
		},
	},
	dawoblefet: {
		noCopy: true,
		onStart() {
			this.add(`c|@DaWoblefet|What's going on guys? This is DaWoblefet, and welcome to Mechanics Monday.`);
		},
		onSwitchOut() {
			this.add(`c|@DaWoblefet|Until next time, have a good one.`);
		},
		onFaint() {
			this.add(`c|@DaWoblefet|mished`);
		},
	},
	decem: {
		noCopy: true,
		onStart() {
			this.add(`c|+Decem|:D`);
		},
		onSwitchOut() {
			this.add(`c|+Decem|bye`);
		},
		onFaint() {
			this.add(`c|+Decem|>:(`);
		},
	},
	deetah: {
		noCopy: true,
		onStart() {
			this.add(`c|+deetah|I can see right through you.`);
		},
		onSwitchOut() {
			this.add(`c|+deetah|Meow :3`);
		},
		onFaint() {
			this.add(`c|+deetah|I have 8 lives left, you can't get rid of me that easily.`);
		},
	},
	dragontite: {
		noCopy: true,
		onStart() {
			this.add(`c|+Dragontite|**Time to electrify you**`);
		},
		onSwitchOut() {
			this.add(`c|+Dragontite|__I'll be coming back for you!__`);
		},
		onFaint() {
			this.add(`c|+Dragontite|I'm shocked that you mere mortal actually defeated __me__`);
		},
	},
	dragonwhale: {
		noCopy: true,
		onStart() {
			this.add(`c|@DragonWhale|i would switch to chomper here`);
		},
	},
	e4flint: {
		// Fire type when mega evolving implemented in scripts.js
		noCopy: true,
		onStart(target, source) {
			this.add(`c|@E4 Flint|How many Fire-Types do I have now`);
			if (source.template.speciesid !== 'steelixmega' || source.illusion) return;
			this.add('-start', source, 'typeadd', 'Fire');
		},
		onFaint() {
			this.add(`c|@E4 Flint|lul ok`);
		},
	},
	eien: {
		noCopy: true,
		onStart() {
			this.add(`c|&Eien|umu!`);
		},
		onFaint() {
			this.add(`c|&Eien|This game is Bad Civilization...`);
		},
	},
	elgino: {
		noCopy: true,
		onStart() {
			this.add(`c|+Elgino|I'm about to solve this puzzle.`);
		},
		onSwitchOut() {
			this.add(`c|+Elgino|uh I need some hints for this one, I'll try again later`);
		},
		onFaint() {
			this.add(`c|+Elgino|Frankly, I'm... ashamed.`);
		},
		onDamagePriority: 1,
		onDamage(damage, target, source, effect) {
			if (effect && effect.effectType === 'Move' && ['mimikyu', 'mimikyutotem'].includes(target.template.speciesid) && !target.transformed) {
				this.add('-activate', target, 'ability: Disguise');
				this.effectData.busted = true;
				return 0;
			}
		},
		onEffectiveness(typeMod, target, type, move) {
			if (!target) return;
			if (!['mimikyu', 'mimikyutotem'].includes(target.template.speciesid) || target.transformed || (target.volatiles['substitute'] && !(move.flags['authentic'] || move.infiltrates))) return;
			if (!target.runImmunity(move.type)) return;
			return 0;
		},
		onUpdate(pokemon) {
			if (['mimikyu', 'mimikyutotem'].includes(pokemon.template.speciesid) && this.effectData.busted) {
				let templateid = pokemon.template.speciesid === 'mimikyutotem' ? 'Mimikyu-Busted-Totem' : 'Mimikyu-Busted';
				pokemon.formeChange(templateid, this.effect, true);
			}
		},
	},
	eternally: {
		noCopy: true,
		onStart() {
			this.add(`c|@eternally|quack`);
		},
		onFaint() {
			this.add(`c|@eternally|quack`);
		},
		onTryHit(target, source, move) {
			if (target.illusion) return;
			if (target !== source && move.type === 'Water') {
				if (!this.heal(target.baseMaxhp / 4)) {
					this.add('-immune', target, '[from] ability: Water Absorb');
				}
				return null;
			}
		},
	},
	explodingdaisies: {
		noCopy: true,
		onStart() {
			this.add(`c|%explodingdaisies|For today's weather: DOOOOOM!`);
		},
		onSwitchOut() {
			this.add(`c|%explodingdaisies|I WILL DESTROY YOU.......BUT LATER!`);
		},
		onFaint() {
			this.add(`c|%explodingdaisies|MY PEOPLE NEED ME!`);
		},
	},
	'false': {
		noCopy: true,
		onStart() {
			this.add(`c|&false|٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ`);
		},
		onSwitchOut() {
			this.add(`c|&false|٩(๑•◡-๑)۶ⒽⓤⒼ❤`);
		},
		onFaint() {
			this.add(`c|&false|ɢ∞פ⋆ᖙᵒᵝ ٩꒰”̮*ू꒱`);
		},
	},
	fart: {
		noCopy: true,
		onStart(target, source) {
			this.add('-start', source, 'typechange', `Fairy/Steel`);
			let activeMon = toID(source.side.foe.active[0].illusion ? source.side.foe.active[0].illusion.name : source.side.foe.active[0].name);
			let family = ['aethernum', 'ceteris', 'flare', 'ransei', 'trickster', 'gimm1ck', 'zalm', 'aelita', 'biggie', 'deetah', 'birdy', 'sundar', 'dragontite'];
			if (activeMon === 'hoeenhero' || activeMon === 'salamander') {
				 this.add(`c|%fart|what song should I sing?`);
			} else if (activeMon === 'lifeisdank' || activeMon === 'nui' || activeMon === 'grimauxiliatrix') {
				this.add(`c|%fart|the gang's all here!`);
			} else if (family.includes(activeMon)) {
				this.add(`c|%fart|what's cookin', good lookin'?`);
			} else {
				this.add(`c|%fart|it's fukken raw`);
			}
		},
		onSwitchOut() {
			this.add(`c|%fart|this boy is not correct. he is **flawed.**`);
		},
		onFaint(pokemon) {
			let activeMon = toID(pokemon.side.foe.active[0].illusion ? pokemon.side.foe.active[0].illusion.name : pokemon.side.foe.active[0].name);
			if (activeMon === 'felucia') {
				this.add(`c|%fart|Felucia I'm deleting your mon`);
			} else {
				this.add(`c|%fart|the things I do for love...`);
			}
		},
	},
	felucia: {
		noCopy: true,
		onStart() {
			this.add(`c|%Felucia|Hi I'm here to participate in a totally serious conversation`);
		},
		onSwitchOut() {
			this.add(`c|%Felucia|Okay that's enough shitposting for now`);
		},
		onFaint() {
			this.add(`c|%Felucia|Fine I'll go back to work...`);
		},
	},
	flare: {
		noCopy: true,
		onStart() {
			this.add('c|@Flare|(9°^°)9');
		},
		onSwitchIn() {
			this.add('c|@Flare|ᕕ( ᐛ )ᕗ');
		},
		onFaint() {
			this.add('c|@Flare|X_X');
		},
	},
	fomg: {
		noCopy: true,
		onStart() {
			this.add(`c|@FOMG|You got this, my friend!`);
		},
		onSwitchOut() {
			this.add(`c|@FOMG|/me rolls out`);
		},
		onFaint() {
			this.add(`c|@FOMG|Rock in peace...`);
		},
	},
	gallantspear: {
		noCopy: true,
		onStart() {
			this.add(`c|+Gallant Spear|*Trombe! override intensifies*`);
		},
		onSwitchOut() {
			this.add(`c|+Gallant Spear|*neigh* *snort*`);
		},
		onFaint() {
			this.add(`c|+Gallant Spear|UNIVAAAAAAAAAAAAAAASE!!`);
		},
	},
	gimm1ck: {
		noCopy: true,
		onStart() {
			this.add(`c|+Gimm1ck|Давай!`);
		},
		onSwitchOut() {
			this.add(`c|+Gimm1ck|Must get more semechki`);
		},
		onFaint() {
			this.add(`c|+Gimm1ck|Ran out of vodka`);
		},
	},
	gmars: {
		noCopy: true,
		onStart(target) {
			this.add(`c|%GMars|It's ya boy GEEEEEEEEMARS`);
			if (target.illusion || !target.m.miniorColor) return;
			this.add('-formechange', target, `Minior${target.m.miniorColor}`);
		},
		onSwitchOut() {
			this.add(`c|%GMars|I like 'em crisp`);
		},
		onFaint() {
			this.add(`c|%GMars|Don't forget to check out my bandcamp`);
		},
	},
	grimauxiliatrix: {
		noCopy: true,
		onStart() {
			this.add(`c|@grimAuxiliatrix|${['A BRAWL IS SURELY BREWING!', 'GOOD DAY FOR A SWELL BATTLE!', 'THIS MATCH WILL GET RED HOT!'][this.random(3)]}`);
		},
		onFaint() {
			this.add(`c|@grimAuxiliatrix|**KNOCKOUT!**`);
		},
	},
	guishark: {
		noCopy: true,
		onStart() {
			this.add(`c|+guishark|Let's go hunt doodoodoodoodoodoo!`);
		},
		onSwitchOut() {
			this.add(`c|+guishark|Run away doodoodoodoodoodoo!`);
		},
		onFaint() {
			this.add(`c|+guishark|It's the end doodoodoodoodoodoo!`);
		},
	},
	// Cant use the exact name because its a pokemon's name
	hippopotasuser: {
		noCopy: true,
		onStart() {
			this.add(`c|@Hippopotas|Something broke. If you're seeing this message, please PM a staff member about it.`);
			this.add(`c|~HoeenHero|No, its not a bug Hippopotas, stop telling people to PM staff, its annoying.`);
		},
		onSwitchOut() {
			this.add(`c|@Hippopotas|Something broke. If you're seeing this message, please PM a staff member about it.`);
			this.add(`c|~HoeenHero|There's still no bug!`);
		},
		onFaint() {
			this.add(`c|@Hippopotas|Something broke. If you're seeing this message, please PM a staff member about it.`);
			this.add(`c|~HoeenHero|My PMs are flooded with bug reports :(`);
		},
	},
	hoeenhero: {
		noCopy: true,
		onStart() {
			this.add(`c|~HoeenHero|My scripts will lead me to victory!`);
		},
		onSwitchOut() {
			this.add(`c|~HoeenHero|I need to look something up, hold on...`);
		},
		onFaint() {
			this.add(`c|~HoeenHero|There must have been a bug in my script ;-;`);
		},
	},
	hubriz: {
		noCopy: true,
		onStart() {
			this.add(`c|%Hubriz|Just a harmless flower...`);
		},
		onSwitchOut() {
			this.add(`c|%Hubriz|I'll bloom once more soon enough!`);
		},
		onFaint() {
			this.add(`c|%Hubriz|I burn, I pine, I perish.`);
		},
	},
	inactive: {
		noCopy: true,
		onStart() {
			this.add(`c|+inactive|I just can't wait to face you.`);
		},
		onSwitchOut() {
			this.add(`c|+inactive|I'll keep an eye out for you next time...`);
		},
		onFaint() {
			this.add(`c|+inactive|/me turns to stone and crumbles`);
		},
	},
	irritated: {
		noCopy: true,
		onStart() {
			this.add(`c|+irritated|Glhf`);
		},
		onFaint() {
			this.add(`c|+irritated|wtf hax`);
		},
	},
	iyarito: {
		noCopy: true,
		onStart() {
			this.add(`c|&Iyarito|Iyarito is always right`);
		},
		onSwitchOut() {
			this.add(`c|&Iyarito|It's all Iyarito's fault`);
		},
		onFaint() {
			this.add(`c|&Iyarito|RIP Patrona`);
		},
	},
	kaijubunny: {
		noCopy: true,
		onStart() {
			this.add(`c|@<NAME>|￣( ÒㅅÓ)￣ Thump Thump Motherfucker`);
		},
		onSwitchOut() {
			this.add(`c|@Kaiju Bunny|￣( >ㅅ>)￣ Holding me back, I see how it is`);
		},
		onFaint() {
			this.add(`c|@Kaiju Bunny|￣( ‘xㅅx)￣Time to take a 10 hour power nap`);
		},
		// Kaiju Rage Innate
		// onUpdate so toxic orb can activate after. Code mainly copied from Power Construct.
		onUpdate(pokemon) {
			if (pokemon.template.speciesid !== 'gligar' || pokemon.transformed || pokemon.illusion || !pokemon.hp) return;
			if (pokemon.hp > pokemon.maxhp / 2) return;
			this.add('-activate', pokemon, 'ability: Kaiju Rage');
			pokemon.formeChange('Gliscor', this.effect, true);
			let newHP = Math.floor(Math.floor(2 * pokemon.template.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100) * pokemon.level / 100 + 10);
			pokemon.hp = newHP - (pokemon.maxhp - pokemon.hp);
			pokemon.maxhp = newHP;
			pokemon.heal(pokemon.baseMaxhp / 4);
			this.add('-heal', pokemon, pokemon.getHealth);
			pokemon.takeItem();
			pokemon.setItem('toxicorb');
			this.add('-message', pokemon.name + '\'s item is now a Toxic Orb!');
			this.add('-message', pokemon.name + '\'s ability is now Poison Heal!');
			this.boost({atk: 2, spe: 1}, pokemon);
		},
	},
	kalalokki: {
		noCopy: true,
		onStart(target) {
			this.add(`c|@Kalalokki|(•_•)`);
			this.add(`c|@Kalalokki|( •_•)>⌐■-■`);
			this.add(`c|@Kalalokki|(⌐■_■)`);
			if (target.illusion) return;
			this.field.setWeather('raindance');
		},
		onFaint() {
			this.add(`c|@Kalalokki|(⌐■_■)`);
			this.add(`c|@Kalalokki|( •_•)>⌐■-■`);
			this.add(`c|@Kalalokki|(x_x)`);
		},
	},
	kaori: {
		noCopy: true,
		onStart(pokemon) {
			this.add(`c|+kaori|(~￣³￣)~`);
			if (pokemon.illusion) return;
			this.boost({spd: 2}, pokemon);
		},
		onSwitchOut() {
			this.add(`c|+kaori|ಠ_ಠ`);
		},
		onFaint() {
			this.add(`c|+kaori|(◕ ᥥ ◕✿)`);
		},
	},
	kay: {
		noCopy: true,
		onStart() {
			this.add(`c|+kay|Every kiss begins with Kay`);
		},
		onSwitchOut() {
			this.add(`c|+kay|くコ:彡`);
		},
		onFaint() {
			this.add(`c|+kay|'kay bye!くコ:彡`);
		},
		// Simple Innate
		onBoost(boost, target, source, effect) {
			if (target && target.illusion) return;
			if (effect && effect.id === 'zpower') return;
			for (let i in boost) {
				// @ts-ignore
				boost[i] *= 2;
			}
		},
	},
	kie: {
		noCopy: true,
		onStart() {
			this.add(`c|%Kie|Wherever there is hope, there is most definitely despair.`);
		},
		onSwitchOut() {
			this.add(`c|%Kie|Still better than Aeonic, btw.`);
		},
		onFaint() {
			this.add(`c|%Kie|https://www.youtube.com/watch?v=Hyw6kKMjp5A`);
		},
	},
	kingswordyt: {
		noCopy: true,
		onStart() {
			this.add(`c|@KingSwordYT|You're the master of your destiny, take destiny by the horns and have fun!`);
		},
		onSwitchOut() {
			this.add(`c|@KingSwordYT|I eat when im upset, and i gotta eat`);
		},
		onFaint() {
			this.add(`c|@KingSwordYT|BUAAAAAA IYA AYÚDAME :(`);
		},
	},
	kipkluif: {
		noCopy: true,
		onStart() {
			this.add(`c|+Kipkluif|I like bacon.`);
		},
		onSwitchOut() {
			this.add(`c|+Kipkluif|Run away da, run run away da`);
		},
		onFaint() {
			this.add(`c|+Kipkluif|Aah! Well, at least I have chicken.`);
		},
		// Footballer innate
		onBasePowerPriority: 8,
		onBasePower(basePower, pokemon, target, move) {
			if (move.name.includes('Kick') && !pokemon.transformed && !pokemon.illusion) {
				this.chainModify(1.75);
			}
		},
	},
	kris: {
		noCopy: true,
		onStart(pokemon) {
			this.add(`c|+Kris|wjat poppin ;)))))`);
			if (pokemon.illusion) return;
			for (const target of pokemon.side.foe.active) {
				if (!target || target.fainted) continue;
				for (const moveSlot of target.moveSlots) {
					const move = this.dex.getMove(moveSlot.move);
					const moveType = move.id === 'hiddenpower' ? target.hpType : move.type;
					if (move.category !== 'Status' && (this.dex.getImmunity(moveType, pokemon) && this.dex.getEffectiveness(moveType, pokemon) > 0 || move.ohko)) {
						this.add('-ability', pokemon, 'Anticipation');
						return;
					}
				}
			}
		},
		onSwitchOut() {
			this.add(`c|+Kris|vbye`);
		},
		onFaint() {
			this.add(`c|+Kris|thats weird but ok`);
		},
	},
	level51: {
		noCopy: true,
		onStart() {
			this.add(`c|+Level 51|Calculating chance of victory!`);
		},
		onSwitchOut() {
			this.add(`c|+Level 51|chance_victory < 1. Recalibrating...`);
		},
		onFaint() {
			this.add(`c|+Level 51|**IndexError**: list index out of range`);
		},
	},
	lifeisdank: {
		noCopy: true,
		onStart(target) {
			this.add(`c|+LifeisDANK|!!!ლ(⁰⊖⁰ლ) Peent Peent.`);
			if (target.illusion) return;
			this.boost({spe: 2}, target);
		},
		onSwitchOut() {
			this.add(`c|+LifeisDANK|!(•⌔• ) Peent Peent.`);
		},
		onFaint() {
			this.add(`c|+LifeisDANK|(•⌔•. ) Peent.`);
		},
		// Mountaineer innate
		onDamage(damage, target, source, effect) {
			if (effect && effect.id === 'stealthrock') {
				return false;
			}
		},
		onTryHit(target, source, move) {
			if (move.type === 'Rock' && !target.activeTurns) {
				this.add('-immune', target, '[from] ability: Mountaineer');
				return null;
			}
		},
	},
	lostseso: {
		noCopy: true,
		onStart(pokemon) {
			this.add(`c|+Lost Seso|<3 ( ͡° ͜ʖ ͡°) DANCE WITH ME ( ͡° ͜ʖ ͡°) <3`);
			if (pokemon.illusion) return;
			this.effectData.danceMultiplier = 0;
		},
		onAfterMove(pokemon, target, move) {
			if (pokemon.illusion) return;
			if (move.flags.dance) this.effectData.danceMultiplier++;
		},
		onSwitchOut() {
			this.add(`c|+Lost Seso|Ran out of ramen, brb`);
		},
		onFaint() {
			this.add(`c|+Lost Seso|└[ ─ ಎ ─ ]┘ 0% Battery, feed me ramen please`);
		},
	},
	macchaeger: {
		noCopy: true,
		onStart() {
			this.add(`c|+MacChaeger|What are you gonna do with that big bat? Gonna hit me? Better make it count. Better make it hurt. Better kill me in one shot.`);
		},
		onFaint() {
			this.add(`c|+MacChaeger|im gonna pyuk`);
		},
	},
	madmonty: {
		noCopy: true,
		onStart(pokemon) {
			this.add(`c|+Mad Monty ¾°|/me puts on a coat, to protect himself from the cold.`);
			this.add(`c|+Mad Monty ¾°|Don't get eaten by llamas!`);
		},
		onSwitchOut() {
			this.add(`c|+Mad Monty ¾°|Oh, I see how it is. Ok, fine. Be that way. I'll just be over here, then.`);
		},
		onFaint() {
			this.add(`c|+Mad Monty ¾°|I take it back- I hope you DO get eaten by llamas. Toodles!`);
		},
	},
	majorbowman: {
		noCopy: true,
		onStart() {
			this.add(`c|@MajorBowman|I'm MajorBowman and I'm here to make it clear.`);
		},
		onSwitchOut() {
			this.add(`c|@MajorBowman|Witty catch phrase, you know what I mean?`);
		},
		onFaint() {
			this.add(`c|@MajorBowman|THEY GOT ME, GAL`);
		},
	},
	marshmallon: {
		noCopy: true,
		onStart() {
			this.add(`c|@Marshmallon|What a wonderful day at the beach!`);
		},
		onSwitchOut() {
			this.add(`c|@Marshmallon|__C..c...cooold >w<__`);
		},
		onFaint() {
			this.add(`c|@Marshmallon|I got hit by a thunderbolt!`);
		},
	},
	martha: {
		noCopy: true,
		onStart() {
			this.add(`c|@martha|in to lose r1`);
		},
		onSwitchOut() {
			this.add(`c|@martha|bad`);
		},
	},
	marty: {
		noCopy: true,
		// No phrases provided
	},<commit_msg>SSB: Update martha's rank (#6447)<commit_after>'use strict';

/**@type {{[k: string]: ModdedPureEffectData}} */
let BattleStatuses = {
	/*
	// Example:
	userid: {
		noCopy: true,
		onStart() {
			this.add(`c|+Username|Switch In Message`);
		},
		onSwitchOut() {
			this.add(`c|+Username|Switch Out Message`);
		},
		onFaint() {
			this.add(`c|+Username|Faint Message`);
		},
		// Innate effects go here
	},
	*/
	// Please keep statuses organized alphabetically based on staff member name!
	'2xthetap': { // No single quotes causes issues
		noCopy: true,
		onStart() {
			this.add(`c|+2xTheTap|Time for a heckin' battle.`);
		},
		onSwitchOut() {
			this.add(`c|+2xTheTap|Doin' me a heckin' concern.`);
		},
		onFaint() {
			this.add(`c|+2xTheTap|Doin' me the final bamboozle.`);
		},
	},
	'5gen': {
		noCopy: true,
		onStart(source) {
			this.add(`c|+5gen|Someone asked for extra sauce?`);
			if (source.illusion) return;
			this.field.setWeather('sunnyday', source);
		},
		onSwitchOut() {
			this.add(`c|+5gen|Need to get some from the back.`);
		},
		onFaint() {
			this.add(`c|+5gen|I'm not dead yet, just changing formes.`);
		},
	},
	aelita: {
		noCopy: true,
		onStart() {
			this.add(`c|@Aelita|Transfer, Aelita! Scanner, Aelita! Virtualization!`);
		},
		onSwitchOut() {
			this.add(`c|@Aelita|I have a tower to deactivate. See ya!`);
		},
		onFaint() {
			this.add(`c|@Aelita|CODE: LYOKO . Tower deactivated... Return to the past, now!`);
		},
	},
	aeonic: {
		noCopy: true,
		onStart() {
			this.add(`c|@Aeonic|Guys the emoji movie wasn't __that__ bad`);
		},
		onSwitchOut() {
			this.add(`c|@Aeonic|Still better than kie btw`);
		},
		onFaint() {
			this.add(`c|@Aeonic|Don't forget me`);
		},
	},
	aethernum: {
		noCopy: true,
		onStart() {
			this.add(`c|@Aethernum|I am __Eterno__, fear me! ...or not...but you should! ...or not...`);
		},
		onSwitchOut() {
			this.add(`c|@Aethernum|I'm not defeated, i'm just afk :^)`);
		},
		onFaint() {
			this.add(`c|@Aethernum| Has been fun! But i'm too lazy to keep fighting ^_^'`);
		},
	},
	akiamara: {
		noCopy: true,
		onStart() {
			this.add(`c|+Akiamara|alguem br?`);
		},
		onSwitchOut() {
			this.add(`c|+Akiamara|Pode me multar que já volto`);
		},
		onFaint() {
			this.add(`c|+Akiamara|I'm going to report you to my big fren Mitsuki`);
		},
	},
	akir: {
		noCopy: true,
		onStart() {
			this.add(`c|%Akir|hey whats up`);
		},
		onSwitchOut(pokemon) {
			this.add(`c|%Akir|sorry need to build more`);
			if (pokemon.illusion) return;
			pokemon.heal(pokemon.baseMaxhp / 3);
		},
		onFaint() {
			this.add(`c|%Akir|too sleepy, c ya`);
		},
		onSourceModifyDamage(damage, source, target, move) {
			if (target.getMoveHitData(move) && !target.illusion) {
				this.debug('Mushroom Guard halves damage.');
				return this.chainModify(0.5);
			}
		},
	},
	alpha: {
		noCopy: true,
		onStart() {
			this.add(`c|@Alpha|MAMMA MIA! It's me, ALPHA!`);
		},
		onSwitchOut() {
			this.add(`c|@Alpha|brb gonna eat some pizza`);
		},
		onFaint() {
			this.add(`c|@Alpha|PER LA PATRIA!`);
		},
	},
	andrew: {
		noCopy: true,
		onStart() {
			this.add(`c|%Andrew|Hah! You better have BURN HEAL!`);
		},
		onSwitchOut() {
			this.add(`c|%Andrew|brb kuncing`);
		},
		onFaint() {
			this.add(`c|%Andrew|<_<`);
		},
	},
	anubis: {
		noCopy: true,
		onStart() {
			this.add(`c|&Anubis|hi ur qt`);
			// In loving memory of the SSB programming team's sanity.
			if (this.random(300) === 272) this.add(`c|~HoeenHero|Anubis's set is OP against programmer sanity.`);
		},
		onSwitchOut() {
			this.add(`c|&Anubis|brb making coffee`);
		},
		onFaint() {
			this.add(`c|&Anubis|worthless evildoer :(`);
		},
	},
	aquagtothepast: {
		noCopy: true,
		onStart() {
			this.add(`c|+A Quag to The Past|The Goons are all here`);
		},
		onSwitchOut() {
			this.add(`c|+A Quag to The Past|um no`);
		},
		onFaint() {
			this.add(`c|+A Quag to The Past|Wait, this isn't the groupchat...`);
		},
	},
	arandomduck: {
		noCopy: true,
		onStart() {
			this.add(`c|+a random duck|SWANNA LOSE???`);
		},
		onSwitchOut() {
			this.add(`c|+a random duck|YEET`);
		},
		onFaint() {
			this.add(`c|+a random duck|I guess that was my swan song`);
		},
	},
	arcticblast: {
		noCopy: true,
		onStart() {
			this.add(`c|%Arcticblast|My trash friend can do no wrong`);
		},
		onModifyMove(move) {
			if (move.id === 'knockoff') {
				move.onAfterHit = function (target, source) {
					if (source.hp) {
						let item = target.takeItem();
						if (item) {
							this.add('-enditem', target, item.name, '[from] move: Knock Off', '[of] ' + source);
							this.add(`c|%Arcticblast|+20 ;)`);
						}
					}
				};
			}
		},
		onFaint(pokemon) {
			let activeMon = pokemon.side.foe.active[0].template.speciesid;
			if (activeMon === 'greninja') {
				this.add(`c|%Arcticblast|FRIENDS DON’T LET FRIENDS PLAY FROGS`);
			} else if (activeMon === 'pumpkaboosuper') {
				this.add(`c|%Arcticblast|WHY IS MY KAREN PRIZED`);
			} else {
				this.add(`c|%Arcticblast|FREE SKYMIN`);
			}
		},
		onSourceFaint(target) {
			if (target.template.speciesid === 'greninja') {
				this.add(`c|%Arcticblast|FRIENDS DON’T LET FRIENDS PLAY FROGS`);
			}
		},
	},
	arsenal: {
		noCopy: true,
		onStart() {
			this.add(`c|%Arsenal|Wenger In`);
		},
		onSwitchOut() {
			this.add(`c|%Arsenal|Time to watch anime`);
		},
		onFaint() {
			this.add(`c|%Arsenal|Wenger Out`);
		},
	},
	asheviere: {
		noCopy: true,
		onStart() {
			this.add(`c|~Asheviere|The Light shall bring victory!`);
		},
		onSwitchOut() {
			this.add(`c|~Asheviere|Regenerator is very fair and balanced`);
		},
		onFaint() {
			this.add(`c|~Asheviere|Who will lead my kingdom now?`);
		},
	},
	averardo: {
		noCopy: true,
		onStart() {
			this.add(`c|+Averardo|ECCOMI`);
		},
		onSwitchOut() {
			this.add(`c|+Averardo|Scillato (PA)`);
		},
		onFaint() {
			this.add(`c|+Averardo|Non mi sporcare più i MP`);
		},
	},
	beowulf: {
		noCopy: true,
		onStart() {
			this.add(`c|@Beowulf|/me BUZZES LOUDLY`);
		},
		onSwitchOut() {
			this.add(`c|@Beowulf|/me BUZZES LOUDLY`);
		},
		onFaint() {
			this.add(`c|@Beowulf|BUZZ BUZZ BUZZ BUZZ`);
		},
	},
	biggie: {
		noCopy: true,
		onStart() {
			this.add(`c|@biggie|Gamin' on ya`);
		},
		onSwitchOut() {
			this.add(`c|@biggie|Mission complete!`);
		},
		onFaint() {
			this.add(`c|@biggie|It was all a dream`);
		},
	},
	birdy: {
		noCopy: true,
		onStart() {
			this.add(`c|+Birdy~!|And I oop- uh, I mean, hi!`);
		},
		onSwitchOut() {
			this.add(`c|+Birdy~!|Be like that, then. Don't blame ME if you lose.`);
		},
		onFaint() {
			this.add(`c|+Birdy~!|My last words will always be that I don't spam.`);
		},
		// Feather Tuft Innate
		onModifyDefPriority: 6,
		onModifyDef(def, pokemon) {
			if (!pokemon.transformed && !pokemon.illusion) {
				return this.chainModify(1.5);
			}
		},
		onModifySpDPriority: 6,
		onModifySpD(spd, pokemon) {
			if (!pokemon.transformed && !pokemon.illusion) {
				return this.chainModify(1.5);
			}
		},
	},
	bobochan: {
		noCopy: true,
		onStart() {
			this.add(`c|@bobochan|Pika Pika! Just kidding, it's just a knock off clone.`);
		},
		onSwitchOut() {
			this.add(`c|@bobochan|Time to skedaddle!`);
		},
		onFaint() {
			this.add(`c|@bobochan|You cruel trainer for killing an innocent pokemon!`);
		},
	},
	brandon: {
		noCopy: true,
		onStart() {
			this.add(`c|%Brandon|Let's put the petal to the medal!`);
		},
		onSwitchOut() {
			this.add(`c|%Brandon|I gotta charge my phone brb`);
		},
		onFaint() {
			this.add(`c|%Brandon|I need a nap`);
		},
	},
	cake: {
		noCopy: true,
		onStart(source) {
			this.add(`c|+Cake|h`);
			if (source.illusion) return;
			this.add('-start', source, 'typeadd', 'Ghost');
		},
		onSwitchOut(source) {
			this.add(`c|+Cake|${source.side.name} is a nerd`);
		},
		onFaint() {
			this.add(`c|+Cake|According to all known laws of aviation, there is no way that Dunsparce should be able to fly. Its wings are too small to get its fat little body off the ground. Dunsparce, of course, does not learn Fly for this reason. It does learn Roost, though. Cute li'l winged snake thing.`);
		},
		// Fat Snake Innate
		onModifyDefPriority: 6,
		onModifyDef(def, pokemon) {
			if (!pokemon.transformed && !pokemon.illusion) {
				return this.chainModify(1.5);
			}
		},
		onModifySpDPriority: 6,
		onModifySpD(spd, pokemon) {
			if (!pokemon.transformed && !pokemon.illusion) {
				return this.chainModify(1.5);
			}
		},
	},
	ckilgannon: {
		noCopy: true,
		onStart() {
			this.add(`c|+c.kilgannon|Hope you're not afraid of the dark!`);
		},
		onSwitchOut() {
			this.add(`c|+c.kilgannon|/me growls`);
		},
		onFaint() {
			this.add(`c|+c.kilgannon|Your time will come.`);
		},
	},
	cantsay: {
		noCopy: true,
		onStart() {
			this.add(`c|@cant say|(´・ω・\`)`);
		},
		onSwitchOut() {
			this.add(`c|@cant say|wow CTed lol`);
		},
		onFaint() {
			this.add(`c|@cant say|bg haxor :(`);
		},
	},
	catalystic: {
		noCopy: true,
		onStart() {
			this.add(`c|+Catalystic|The Birb is here!`);
		},
		onSwitchOut() {
			this.add(`c|+Catalystic|The Birb will be back!`);
		},
		onFaint() {
			this.add(`c|+Catalystic|The Birb is never lucky.`);
		},
	},
	ceteris: {
		noCopy: true,
		onStart() {
			this.add(`c|@Ceteris|Your loss is inevitable, you best forfeit the battle if you know what's good for you. ╰(⇀︿⇀)つ-]═───`);
		},
		onSwitchOut(source) {
			this.add(`c|@Ceteris|Saving the best for last, ${source.side.name}, a wise choice my friend.`);
		},
		onFaint() {
			this.add(`c|@Ceteris|IMPOSSIBLE!! THIS IS AN OUTRAGE!! I WILL EXACT MY REVENGE ON YOU ONE DAY (◣_◢)`);
		},
	},
	chaos: {
		noCopy: true,
		// No phrases provided
	},
	chloe: {
		noCopy: true,
		onStart() {
			this.add(`c|@Chloe|hlelo`);
		},
		onSwitchOut() {
			this.add(`c|@Chloe|bubye`);
		},
		onFaint() {
			this.add(`c|@Chloe|aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`);
		},
	},
	darth: {
		noCopy: true,
		onStart() {
			this.add(`c|+Darth|The angel of stall descends upon the battlefield.`);
		},
		onSwitchOut() {
			this.add(`c|+Darth|The angel of stall has decided upon a tactical retreat.`);
		},
		onFaint() {
			this.add(`c|+Darth|Regenerator is a perfectly balanced ability.`);
		},
	},
	dawoblefet: {
		noCopy: true,
		onStart() {
			this.add(`c|@DaWoblefet|What's going on guys? This is DaWoblefet, and welcome to Mechanics Monday.`);
		},
		onSwitchOut() {
			this.add(`c|@DaWoblefet|Until next time, have a good one.`);
		},
		onFaint() {
			this.add(`c|@DaWoblefet|mished`);
		},
	},
	decem: {
		noCopy: true,
		onStart() {
			this.add(`c|+Decem|:D`);
		},
		onSwitchOut() {
			this.add(`c|+Decem|bye`);
		},
		onFaint() {
			this.add(`c|+Decem|>:(`);
		},
	},
	deetah: {
		noCopy: true,
		onStart() {
			this.add(`c|+deetah|I can see right through you.`);
		},
		onSwitchOut() {
			this.add(`c|+deetah|Meow :3`);
		},
		onFaint() {
			this.add(`c|+deetah|I have 8 lives left, you can't get rid of me that easily.`);
		},
	},
	dragontite: {
		noCopy: true,
		onStart() {
			this.add(`c|+Dragontite|**Time to electrify you**`);
		},
		onSwitchOut() {
			this.add(`c|+Dragontite|__I'll be coming back for you!__`);
		},
		onFaint() {
			this.add(`c|+Dragontite|I'm shocked that you mere mortal actually defeated __me__`);
		},
	},
	dragonwhale: {
		noCopy: true,
		onStart() {
			this.add(`c|@DragonWhale|i would switch to chomper here`);
		},
	},
	e4flint: {
		// Fire type when mega evolving implemented in scripts.js
		noCopy: true,
		onStart(target, source) {
			this.add(`c|@E4 Flint|How many Fire-Types do I have now`);
			if (source.template.speciesid !== 'steelixmega' || source.illusion) return;
			this.add('-start', source, 'typeadd', 'Fire');
		},
		onFaint() {
			this.add(`c|@E4 Flint|lul ok`);
		},
	},
	eien: {
		noCopy: true,
		onStart() {
			this.add(`c|&Eien|umu!`);
		},
		onFaint() {
			this.add(`c|&Eien|This game is Bad Civilization...`);
		},
	},
	elgino: {
		noCopy: true,
		onStart() {
			this.add(`c|+Elgino|I'm about to solve this puzzle.`);
		},
		onSwitchOut() {
			this.add(`c|+Elgino|uh I need some hints for this one, I'll try again later`);
		},
		onFaint() {
			this.add(`c|+Elgino|Frankly, I'm... ashamed.`);
		},
		onDamagePriority: 1,
		onDamage(damage, target, source, effect) {
			if (effect && effect.effectType === 'Move' && ['mimikyu', 'mimikyutotem'].includes(target.template.speciesid) && !target.transformed) {
				this.add('-activate', target, 'ability: Disguise');
				this.effectData.busted = true;
				return 0;
			}
		},
		onEffectiveness(typeMod, target, type, move) {
			if (!target) return;
			if (!['mimikyu', 'mimikyutotem'].includes(target.template.speciesid) || target.transformed || (target.volatiles['substitute'] && !(move.flags['authentic'] || move.infiltrates))) return;
			if (!target.runImmunity(move.type)) return;
			return 0;
		},
		onUpdate(pokemon) {
			if (['mimikyu', 'mimikyutotem'].includes(pokemon.template.speciesid) && this.effectData.busted) {
				let templateid = pokemon.template.speciesid === 'mimikyutotem' ? 'Mimikyu-Busted-Totem' : 'Mimikyu-Busted';
				pokemon.formeChange(templateid, this.effect, true);
			}
		},
	},
	eternally: {
		noCopy: true,
		onStart() {
			this.add(`c|@eternally|quack`);
		},
		onFaint() {
			this.add(`c|@eternally|quack`);
		},
		onTryHit(target, source, move) {
			if (target.illusion) return;
			if (target !== source && move.type === 'Water') {
				if (!this.heal(target.baseMaxhp / 4)) {
					this.add('-immune', target, '[from] ability: Water Absorb');
				}
				return null;
			}
		},
	},
	explodingdaisies: {
		noCopy: true,
		onStart() {
			this.add(`c|%explodingdaisies|For today's weather: DOOOOOM!`);
		},
		onSwitchOut() {
			this.add(`c|%explodingdaisies|I WILL DESTROY YOU.......BUT LATER!`);
		},
		onFaint() {
			this.add(`c|%explodingdaisies|MY PEOPLE NEED ME!`);
		},
	},
	'false': {
		noCopy: true,
		onStart() {
			this.add(`c|&false|٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ`);
		},
		onSwitchOut() {
			this.add(`c|&false|٩(๑•◡-๑)۶ⒽⓤⒼ❤`);
		},
		onFaint() {
			this.add(`c|&false|ɢ∞פ⋆ᖙᵒᵝ ٩꒰”̮*ू꒱`);
		},
	},
	fart: {
		noCopy: true,
		onStart(target, source) {
			this.add('-start', source, 'typechange', `Fairy/Steel`);
			let activeMon = toID(source.side.foe.active[0].illusion ? source.side.foe.active[0].illusion.name : source.side.foe.active[0].name);
			let family = ['aethernum', 'ceteris', 'flare', 'ransei', 'trickster', 'gimm1ck', 'zalm', 'aelita', 'biggie', 'deetah', 'birdy', 'sundar', 'dragontite'];
			if (activeMon === 'hoeenhero' || activeMon === 'salamander') {
				 this.add(`c|%fart|what song should I sing?`);
			} else if (activeMon === 'lifeisdank' || activeMon === 'nui' || activeMon === 'grimauxiliatrix') {
				this.add(`c|%fart|the gang's all here!`);
			} else if (family.includes(activeMon)) {
				this.add(`c|%fart|what's cookin', good lookin'?`);
			} else {
				this.add(`c|%fart|it's fukken raw`);
			}
		},
		onSwitchOut() {
			this.add(`c|%fart|this boy is not correct. he is **flawed.**`);
		},
		onFaint(pokemon) {
			let activeMon = toID(pokemon.side.foe.active[0].illusion ? pokemon.side.foe.active[0].illusion.name : pokemon.side.foe.active[0].name);
			if (activeMon === 'felucia') {
				this.add(`c|%fart|Felucia I'm deleting your mon`);
			} else {
				this.add(`c|%fart|the things I do for love...`);
			}
		},
	},
	felucia: {
		noCopy: true,
		onStart() {
			this.add(`c|%Felucia|Hi I'm here to participate in a totally serious conversation`);
		},
		onSwitchOut() {
			this.add(`c|%Felucia|Okay that's enough shitposting for now`);
		},
		onFaint() {
			this.add(`c|%Felucia|Fine I'll go back to work...`);
		},
	},
	flare: {
		noCopy: true,
		onStart() {
			this.add('c|@Flare|(9°^°)9');
		},
		onSwitchIn() {
			this.add('c|@Flare|ᕕ( ᐛ )ᕗ');
		},
		onFaint() {
			this.add('c|@Flare|X_X');
		},
	},
	fomg: {
		noCopy: true,
		onStart() {
			this.add(`c|@FOMG|You got this, my friend!`);
		},
		onSwitchOut() {
			this.add(`c|@FOMG|/me rolls out`);
		},
		onFaint() {
			this.add(`c|@FOMG|Rock in peace...`);
		},
	},
	gallantspear: {
		noCopy: true,
		onStart() {
			this.add(`c|+Gallant Spear|*Trombe! override intensifies*`);
		},
		onSwitchOut() {
			this.add(`c|+Gallant Spear|*neigh* *snort*`);
		},
		onFaint() {
			this.add(`c|+Gallant Spear|UNIVAAAAAAAAAAAAAAASE!!`);
		},
	},
	gimm1ck: {
		noCopy: true,
		onStart() {
			this.add(`c|+Gimm1ck|Давай!`);
		},
		onSwitchOut() {
			this.add(`c|+Gimm1ck|Must get more semechki`);
		},
		onFaint() {
			this.add(`c|+Gimm1ck|Ran out of vodka`);
		},
	},
	gmars: {
		noCopy: true,
		onStart(target) {
			this.add(`c|%GMars|It's ya boy GEEEEEEEEMARS`);
			if (target.illusion || !target.m.miniorColor) return;
			this.add('-formechange', target, `Minior${target.m.miniorColor}`);
		},
		onSwitchOut() {
			this.add(`c|%GMars|I like 'em crisp`);
		},
		onFaint() {
			this.add(`c|%GMars|Don't forget to check out my bandcamp`);
		},
	},
	grimauxiliatrix: {
		noCopy: true,
		onStart() {
			this.add(`c|@grimAuxiliatrix|${['A BRAWL IS SURELY BREWING!', 'GOOD DAY FOR A SWELL BATTLE!', 'THIS MATCH WILL GET RED HOT!'][this.random(3)]}`);
		},
		onFaint() {
			this.add(`c|@grimAuxiliatrix|**KNOCKOUT!**`);
		},
	},
	guishark: {
		noCopy: true,
		onStart() {
			this.add(`c|+guishark|Let's go hunt doodoodoodoodoodoo!`);
		},
		onSwitchOut() {
			this.add(`c|+guishark|Run away doodoodoodoodoodoo!`);
		},
		onFaint() {
			this.add(`c|+guishark|It's the end doodoodoodoodoodoo!`);
		},
	},
	// Cant use the exact name because its a pokemon's name
	hippopotasuser: {
		noCopy: true,
		onStart() {
			this.add(`c|@Hippopotas|Something broke. If you're seeing this message, please PM a staff member about it.`);
			this.add(`c|~HoeenHero|No, its not a bug Hippopotas, stop telling people to PM staff, its annoying.`);
		},
		onSwitchOut() {
			this.add(`c|@Hippopotas|Something broke. If you're seeing this message, please PM a staff member about it.`);
			this.add(`c|~HoeenHero|There's still no bug!`);
		},
		onFaint() {
			this.add(`c|@Hippopotas|Something broke. If you're seeing this message, please PM a staff member about it.`);
			this.add(`c|~HoeenHero|My PMs are flooded with bug reports :(`);
		},
	},
	hoeenhero: {
		noCopy: true,
		onStart() {
			this.add(`c|~HoeenHero|My scripts will lead me to victory!`);
		},
		onSwitchOut() {
			this.add(`c|~HoeenHero|I need to look something up, hold on...`);
		},
		onFaint() {
			this.add(`c|~HoeenHero|There must have been a bug in my script ;-;`);
		},
	},
	hubriz: {
		noCopy: true,
		onStart() {
			this.add(`c|%Hubriz|Just a harmless flower...`);
		},
		onSwitchOut() {
			this.add(`c|%Hubriz|I'll bloom once more soon enough!`);
		},
		onFaint() {
			this.add(`c|%Hubriz|I burn, I pine, I perish.`);
		},
	},
	inactive: {
		noCopy: true,
		onStart() {
			this.add(`c|+inactive|I just can't wait to face you.`);
		},
		onSwitchOut() {
			this.add(`c|+inactive|I'll keep an eye out for you next time...`);
		},
		onFaint() {
			this.add(`c|+inactive|/me turns to stone and crumbles`);
		},
	},
	irritated: {
		noCopy: true,
		onStart() {
			this.add(`c|+irritated|Glhf`);
		},
		onFaint() {
			this.add(`c|+irritated|wtf hax`);
		},
	},
	iyarito: {
		noCopy: true,
		onStart() {
			this.add(`c|&Iyarito|Iyarito is always right`);
		},
		onSwitchOut() {
			this.add(`c|&Iyarito|It's all Iyarito's fault`);
		},
		onFaint() {
			this.add(`c|&Iyarito|RIP Patrona`);
		},
	},
	kaijubunny: {
		noCopy: true,
		onStart() {
			this.add(`c|@<NAME>|￣( ÒㅅÓ)￣ Thump Thump Motherfucker`);
		},
		onSwitchOut() {
			this.add(`c|@<NAME>|￣( >ㅅ>)￣ Holding me back, I see how it is`);
		},
		onFaint() {
			this.add(`c|@Kaiju Bunny|￣( ‘xㅅx)￣Time to take a 10 hour power nap`);
		},
		// Kaiju Rage Innate
		// onUpdate so toxic orb can activate after. Code mainly copied from Power Construct.
		onUpdate(pokemon) {
			if (pokemon.template.speciesid !== 'gligar' || pokemon.transformed || pokemon.illusion || !pokemon.hp) return;
			if (pokemon.hp > pokemon.maxhp / 2) return;
			this.add('-activate', pokemon, 'ability: Kaiju Rage');
			pokemon.formeChange('Gliscor', this.effect, true);
			let newHP = Math.floor(Math.floor(2 * pokemon.template.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100) * pokemon.level / 100 + 10);
			pokemon.hp = newHP - (pokemon.maxhp - pokemon.hp);
			pokemon.maxhp = newHP;
			pokemon.heal(pokemon.baseMaxhp / 4);
			this.add('-heal', pokemon, pokemon.getHealth);
			pokemon.takeItem();
			pokemon.setItem('toxicorb');
			this.add('-message', pokemon.name + '\'s item is now a Toxic Orb!');
			this.add('-message', pokemon.name + '\'s ability is now Poison Heal!');
			this.boost({atk: 2, spe: 1}, pokemon);
		},
	},
	kalalokki: {
		noCopy: true,
		onStart(target) {
			this.add(`c|@Kalalokki|(•_•)`);
			this.add(`c|@Kalalokki|( •_•)>⌐■-■`);
			this.add(`c|@Kalalokki|(⌐■_■)`);
			if (target.illusion) return;
			this.field.setWeather('raindance');
		},
		onFaint() {
			this.add(`c|@Kalalokki|(⌐■_■)`);
			this.add(`c|@Kalalokki|( •_•)>⌐■-■`);
			this.add(`c|@Kalalokki|(x_x)`);
		},
	},
	kaori: {
		noCopy: true,
		onStart(pokemon) {
			this.add(`c|+kaori|(~￣³￣)~`);
			if (pokemon.illusion) return;
			this.boost({spd: 2}, pokemon);
		},
		onSwitchOut() {
			this.add(`c|+kaori|ಠ_ಠ`);
		},
		onFaint() {
			this.add(`c|+kaori|(◕ ᥥ ◕✿)`);
		},
	},
	kay: {
		noCopy: true,
		onStart() {
			this.add(`c|+kay|Every kiss begins with Kay`);
		},
		onSwitchOut() {
			this.add(`c|+kay|くコ:彡`);
		},
		onFaint() {
			this.add(`c|+kay|'kay bye!くコ:彡`);
		},
		// Simple Innate
		onBoost(boost, target, source, effect) {
			if (target && target.illusion) return;
			if (effect && effect.id === 'zpower') return;
			for (let i in boost) {
				// @ts-ignore
				boost[i] *= 2;
			}
		},
	},
	kie: {
		noCopy: true,
		onStart() {
			this.add(`c|%Kie|Wherever there is hope, there is most definitely despair.`);
		},
		onSwitchOut() {
			this.add(`c|%Kie|Still better than Aeonic, btw.`);
		},
		onFaint() {
			this.add(`c|%Kie|https://www.youtube.com/watch?v=Hyw6kKMjp5A`);
		},
	},
	kingswordyt: {
		noCopy: true,
		onStart() {
			this.add(`c|@KingSwordYT|You're the master of your destiny, take destiny by the horns and have fun!`);
		},
		onSwitchOut() {
			this.add(`c|@KingSwordYT|I eat when im upset, and i gotta eat`);
		},
		onFaint() {
			this.add(`c|@KingSwordYT|BUAAAAAA IYA AYÚDAME :(`);
		},
	},
	kipkluif: {
		noCopy: true,
		onStart() {
			this.add(`c|+Kipkluif|I like bacon.`);
		},
		onSwitchOut() {
			this.add(`c|+Kipkluif|Run away da, run run away da`);
		},
		onFaint() {
			this.add(`c|+Kipkluif|Aah! Well, at least I have chicken.`);
		},
		// Footballer innate
		onBasePowerPriority: 8,
		onBasePower(basePower, pokemon, target, move) {
			if (move.name.includes('Kick') && !pokemon.transformed && !pokemon.illusion) {
				this.chainModify(1.75);
			}
		},
	},
	kris: {
		noCopy: true,
		onStart(pokemon) {
			this.add(`c|+Kris|wjat poppin ;)))))`);
			if (pokemon.illusion) return;
			for (const target of pokemon.side.foe.active) {
				if (!target || target.fainted) continue;
				for (const moveSlot of target.moveSlots) {
					const move = this.dex.getMove(moveSlot.move);
					const moveType = move.id === 'hiddenpower' ? target.hpType : move.type;
					if (move.category !== 'Status' && (this.dex.getImmunity(moveType, pokemon) && this.dex.getEffectiveness(moveType, pokemon) > 0 || move.ohko)) {
						this.add('-ability', pokemon, 'Anticipation');
						return;
					}
				}
			}
		},
		onSwitchOut() {
			this.add(`c|+Kris|vbye`);
		},
		onFaint() {
			this.add(`c|+Kris|thats weird but ok`);
		},
	},
	level51: {
		noCopy: true,
		onStart() {
			this.add(`c|+Level 51|Calculating chance of victory!`);
		},
		onSwitchOut() {
			this.add(`c|+Level 51|chance_victory < 1. Recalibrating...`);
		},
		onFaint() {
			this.add(`c|+Level 51|**IndexError**: list index out of range`);
		},
	},
	lifeisdank: {
		noCopy: true,
		onStart(target) {
			this.add(`c|+LifeisDANK|!!!ლ(⁰⊖⁰ლ) Peent Peent.`);
			if (target.illusion) return;
			this.boost({spe: 2}, target);
		},
		onSwitchOut() {
			this.add(`c|+LifeisDANK|!(•⌔• ) Peent Peent.`);
		},
		onFaint() {
			this.add(`c|+LifeisDANK|(•⌔•. ) Peent.`);
		},
		// Mountaineer innate
		onDamage(damage, target, source, effect) {
			if (effect && effect.id === 'stealthrock') {
				return false;
			}
		},
		onTryHit(target, source, move) {
			if (move.type === 'Rock' && !target.activeTurns) {
				this.add('-immune', target, '[from] ability: Mountaineer');
				return null;
			}
		},
	},
	lostseso: {
		noCopy: true,
		onStart(pokemon) {
			this.add(`c|+Lost Seso|<3 ( ͡° ͜ʖ ͡°) DANCE WITH ME ( ͡° ͜ʖ ͡°) <3`);
			if (pokemon.illusion) return;
			this.effectData.danceMultiplier = 0;
		},
		onAfterMove(pokemon, target, move) {
			if (pokemon.illusion) return;
			if (move.flags.dance) this.effectData.danceMultiplier++;
		},
		onSwitchOut() {
			this.add(`c|+Lost Seso|Ran out of ramen, brb`);
		},
		onFaint() {
			this.add(`c|+Lost Seso|└[ ─ ಎ ─ ]┘ 0% Battery, feed me ramen please`);
		},
	},
	macchaeger: {
		noCopy: true,
		onStart() {
			this.add(`c|+MacChaeger|What are you gonna do with that big bat? Gonna hit me? Better make it count. Better make it hurt. Better kill me in one shot.`);
		},
		onFaint() {
			this.add(`c|+MacChaeger|im gonna pyuk`);
		},
	},
	madmonty: {
		noCopy: true,
		onStart(pokemon) {
			this.add(`c|+Mad Monty ¾°|/me puts on a coat, to protect himself from the cold.`);
			this.add(`c|+Mad Monty ¾°|Don't get eaten by llamas!`);
		},
		onSwitchOut() {
			this.add(`c|+Mad Monty ¾°|Oh, I see how it is. Ok, fine. Be that way. I'll just be over here, then.`);
		},
		onFaint() {
			this.add(`c|+Mad Monty ¾°|I take it back- I hope you DO get eaten by llamas. Toodles!`);
		},
	},
	majorbowman: {
		noCopy: true,
		onStart() {
			this.add(`c|@MajorBowman|I'm MajorBowman and I'm here to make it clear.`);
		},
		onSwitchOut() {
			this.add(`c|@MajorBowman|Witty catch phrase, you know what I mean?`);
		},
		onFaint() {
			this.add(`c|@MajorBowman|THEY GOT ME, GAL`);
		},
	},
	marshmallon: {
		noCopy: true,
		onStart() {
			this.add(`c|@Marshmallon|What a wonderful day at the beach!`);
		},
		onSwitchOut() {
			this.add(`c|@Marshmallon|__C..c...cooold >w<__`);
		},
		onFaint() {
			this.add(`c|@Marshmallon|I got hit by a thunderbolt!`);
		},
	},
	martha: {
		noCopy: true,
		onStart() {
			this.add(`c|+martha|in to lose r1`);
		},
		onSwitchOut() {
			this.add(`c|+martha|bad`);
		},
	},
	marty: {
		noCopy: true,
		// No phrases provided
	},
{'fraction_non_alphanumeric': 0.1981437636139786, 'fraction_numerical': 0.0039397670233923664, 'mean_word_length': 3.474237288135593, 'pattern_counts': {'":': 0, '<': 18, '<?xml version=': 0, '>': 22, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 6, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6580043', 'n_tokens_mistral': 25330, 'n_tokens_neox': 22583, 'n_words': 4373}