text: exports.BattleText = {
  	default: {
  		startBattle: "Battle started between [TRAINER] and [TRAINER]!",
  		winBattle: "**[TRAINER]** won the battle!",
  		tieBattle: "Tie between [TRAINER] and [TRAINER]!",
  
  		pokemon: "[NICKNAME]",
  		opposingPokemon: "the opposing [NICKNAME]",
  		team: "your team",
  		opposingTeam: "the opposing team",
  		party: "your ally Pok\u00E9mon",
  		opposingParty: "the opposing Pok\u00E9mon",
  
  		turn: "== Turn [NUMBER] ==",
  		switchIn: "[TRAINER] sent out [FULLNAME]!",
  		switchInOwn: "Go! [FULLNAME]!",
  		switchOut: "[TRAINER] withdrew [NICKNAME]!",
  		switchOutOwn: "[NICKNAME], come back!",
  		drag: "[FULLNAME] was dragged out!",
  		faint: "[POKEMON] fainted!",
  		swap: "[POKEMON] and [TARGET] switched places!",
  		swapCenter: "[POKEMON] moved to the center!",
  
  		zEffect: "  [POKEMON] unleases its full-force Z-Move!",
  		move: "[POKEMON] used **[MOVE]**!",
  		abilityActivation: "  [[POKEMON]'s [ABILITY]]",
  
  		mega: "  [POKEMON]'s [ITEM] is reacting to the Key Stone!",
  		megaNoItem: "  [POKEMON] is reacting to [TRAINER]'s Key Stone!",
  		megaGen6: "  [POKEMON]'s [ITEM] is reacting to [TRAINER]'s Mega Bracelet!",
  		transformMega: "[POKEMON] has Mega Evolved into Mega [SPECIES]!",
  		primal: "[POKEMON]'s Primal Reversion! It reverted to its primal state!",
  		zPower: "  [POKEMON] surrounded itself with its Z-Power!",
  		zBroken: "  [POKEMON] couldn't fully protect itself and got hurt!",
  
  		// in case the different default messages didn't make it obvious, the difference
  		// is that the `cant` message REPLACES "Pokemon used Move!", while the `fail`
  		// message happens AFTER "Pokemon used Move!"
  		cant: "[POKEMON] can't use [MOVE]!",
  		cantNoMove: "[POKEMON] can't move!",
  		fail: "  But it failed!",
  
  		// n.b. this is the default message for in-battle forme changes
  		// for the move Transform and ability Imposter, see the entry for the move Transform
  		transform: "[POKEMON] transformed!",
  		typeChange: "  [POKEMON]'s type changed to [TYPE]!",
  		typeChangeFromEffect: "  [POKEMON]'s [EFFECT] made it the [TYPE] type!",
  		typeAdd: "  [TYPE] type was added to [POKEMON]!",
  
  		start: "  ([EFFECT] started on [POKEMON]!)",
  		end: "  [POKEMON] was freed from [EFFECT]!",
  		activate: "  ([EFFECT] activated!)",
  		startTeamEffect: "  ([EFFECT] started on [TEAM]!)",
  		endTeamEffect: "  ([EFFECT] ended on [TEAM]!)",
  		startFieldEffect: "  ([EFFECT] started!)",
  		endFieldEffect: "  ([EFFECT] ended!)",
  
  		changeAbility: "  [POKEMON] acquired [ABILITY]!",
  		addItem: "  [POKEMON] obtained one [ITEM].", // Trick, Switcheroo
  		takeItem: "  [POKEMON] stole [SOURCE]'s [ITEM]!", // Thief, Covet, Magician, Pickpocket
  		eatItem: "  [POKEMON] ate its [ITEM]!",
  		useGem: "  The [ITEM] strengthened [POKEMON]'s power!",
  		eatItemWeaken: "  The [ITEM] weakened damage to [POKEMON]!",
  		removeItem: "  [POKEMON] lost its [ITEM]!",
  		activateItem: "  ([POKEMON] used its [ITEM]!)",
  		activateWeaken: "  The [ITEM] weakened the damage to [POKEMON]!",
  
  		damage: "  ([POKEMON] was hurt!)",
  		damagePercentage: "  ([POKEMON] lost [PERCENTAGE] of its health!)",
  		damageFromPokemon: "  [POKEMON] was hurt by [SOURCE]'s [ITEM]!", // Jaboca/Rowap Berry
  		damageFromItem: "  [POKEMON] was hurt by its [ITEM]!", // Sticky Barb
  		damageFromPartialTrapping: "  [POKEMON] is hurt by [MOVE]!",
  		heal: "  [POKEMON] had its HP restored.",
  		healFromZEffect: "  [POKEMON] restored its HP using its Z-Power!",
  		healFromEffect: "  [POKEMON] restored HP using its [EFFECT]!",
  
  		boost: "  [POKEMON]'s [STAT] rose!",
  		boost2: "  [POKEMON]'s [STAT] rose sharply!",
  		boost3: "  [POKEMON]'s [STAT] rose drastically!",
  		boost0: "  [POKEMON]'s [STAT] won't go any higher!",
  		boostFromItem: "  The [ITEM] raised [POKEMON]'s [STAT]!",
  		boost2FromItem: "  The [ITEM] sharply raised [POKEMON]'s [STAT]!",
  		boost3FromItem: "  The [ITEM] drastically raised [POKEMON]'s [STAT]!",
  		boostFromZEffect: "  [POKEMON] boosted its [STAT] using its Z-Power!",
  		boost2FromZEffect: "  [POKEMON] boosted its [STAT] sharply using its Z-Power!",
  		boost3FromZEffect: "  [POKEMON] boosted its [STAT] drastically using its Z-Power!",
  		boostMultipleFromZEffect: "  [POKEMON] boosted its stats using its Z-Power!",
  
  		unboost: "  [POKEMON]'s [STAT] fell!",
  		unboost2: "  [POKEMON]'s [STAT] fell harshly!",
  		unboost3: "  [POKEMON]'s [STAT] fell severely!",
  		unboost0: "  [POKEMON]'s [STAT] won't go any lower!",
  		unboostFromItem: "  The [ITEM] lowered [POKEMON]'s [STAT]!",
  		unboost2FromItem: "  The [ITEM] harshly lowered [POKEMON]'s [STAT]!",
  		unboost3FromItem: "  The [ITEM] drastically lowered [POKEMON]'s [STAT]!",
  
  		swapBoost: "  [POKEMON] switched stat changes with its target!",
  		swapOffensiveBoost: "  [POKEMON] switched all changes to its Attack and Sp. Atk with its target!",
  		swapDefensiveBoost: "  [POKEMON] switched all changes to its Defense and Sp. Def with its target!",
  		copyBoost: "  [POKEMON] copied [TARGET]'s stat changes!",
  		clearBoost: "  [POKEMON]'s stat changes were removed!",
  		clearBoostFromZEffect: "  [POKEMON] returned its decreased stats to normal using its Z-Power!",
  		invertBoost: "  [POKEMON]'s stat changes were inverted!",
  		clearAllBoost: "  All stat changes were eliminated!",
  
  		superEffective: "  It's super effective!",
  		superEffectiveSpread: "  It's super effective on [POKEMON]!",
  		resisted: "  It's not very effective...",
  		resistedSpread: "  It's not very effective on [POKEMON].",
  		crit: "  A critical hit!",
  		critSpread: "  A critical hit on [POKEMON]!",
  		immune: "  It doesn't affect [POKEMON]...",
  		immuneNoPokemon: "  It had no effect!", // old gens
  		immuneOHKO: "  [POKEMON] is unaffected!",
  		miss: "  [POKEMON] avoided the attack!",
  		missNoPokemon: "  [SOURCE]'s attack missed!", // old gens
  
  		center: "  Automatic center!",
  		noTarget: "  But there was no target...", // gen 5 and earlier
  		ohko: "  It's a one-hit KO!",
  		combine: "  The two moves have become one! It's a combined move!",
  		hitCount: "  The Pok\u00E9mon was hit [NUMBER] times!",
  		hitCountSingular: "  The Pok\u00E9mon was hit 1 time!",
  	},
  
  	// stats
  	hp: {
  		statName: "HP",
  		statShortName: "HP",
  	},
  	atk: {
  		statName: "Attack",
  		statShortName: "Atk",
  	},
  	def: {
  		statName: "Defense",
  		statShortName: "Def",
  	},
  	spa: {
  		statName: "Sp. Atk",
  		statShortName: "SpA",
  	},
  	spd: {
  		statName: "Sp. Def",
  		statShortName: "SpD",
  	},
  	spe: {
  		statName: "Speed",
  		statShortName: "Spe",
  	},
  	accuracy: {
  		statName: "accuracy",
  	},
  	evasion: {
  		statName: "evasiveness",
  	},
  	spc: {
  		statName: "Special",
  		statShortName: "Spc",
  	},
  	stats: {
  		statName: "stats",
  	},
  
  	// statuses
  	brn: {
  		start: "  [POKEMON] was burned!",
  		startFromItem: "  [POKEMON] was burned by the [ITEM]!",
  		alreadyStarted: "  [POKEMON] is already burned!",
  		end: "  [POKEMON]'s burn was healed!",
  		endFromItem: "  [POKEMON]'s [ITEM] healed its burn!",
  		damage: "  [POKEMON] was hurt by its burn!",
  	},
  	frz: {
  		start: "  [POKEMON] was frozen solid!",
  		alreadyStarted: "  [POKEMON] is already frozen solid!",
  		end: "  [POKEMON] thawed out!",
  		endFromItem: "  [POKEMON]'s [ITEM] defrosted it!",
  		endFromMove: "  [POKEMON]'s [MOVE] melted the ice!",
  		cant: "[POKEMON] is frozen solid!",
  	},
  	par: {
  		start: "  [POKEMON] is paralyzed! It may be unable to move!",
  		alreadyStarted: "  [POKEMON] is already paralyzed!",
  		end: "  [POKEMON] was cured of paralysis!",
  		endFromItem: "  [POKEMON]'s [ITEM] cured its paralysis!",
  		cant: "[POKEMON] is paralyzed! It can't move!",
  	},
  	psn: {
  		start: "  [POKEMON] was poisoned!",
  		alreadyStarted: "  [POKEMON] is already poisoned!",
  		end: "  [POKEMON] was cured of its poisoning!",
  		endFromItem: "  [POKEMON]'s [ITEM] cured its poison!",
  		damage: "  [POKEMON] was hurt by poison!",
  	},
  	tox: {
  		start: "  [POKEMON] was badly poisoned!",
  		startFromItem: "  [POKEMON] was badly poisoned by the [ITEM]!",
  		end: "#psn",
  		endFromItem: "#psn",
  		alreadyStarted: "#psn",
  		damage: "#psn",
  	},
  	slp: {
  		start: "  [POKEMON] fell asleep!",
  		startFromRest: "  [POKEMON] slept and became healthy!",
  		alreadyStarted: "  [POKEMON] is already asleep!",
  		end: "  [POKEMON] woke up!",
  		endFromItem: "  [POKEMON]'s [ITEM] woke it up!",
  		cant: "[POKEMON] is fast asleep.",
  	},
  
  	// misc effects
  	confusion: {
  		start: "  [POKEMON] became confused!",
  		startFromFatigue: "  [POKEMON] became confused due to fatigue!",
  		end: "  [POKEMON] snapped out of its confusion!",
  		endFromItem: "  [POKEMON]'s [ITEM] snapped it out of its confusion!",
  		alreadyStarted: "  [POKEMON] is already confused!",
  		activate: "  [POKEMON] is confused!",
  		damage: "It hurt itself in its confusion!",
  	},
  	drain: {
  		heal: "  [SOURCE] had its energy drained!",
  	},
  	flinch: {
  		cant: "[POKEMON] flinched and couldn't move!",
  	},
  	heal: {
  		fail: "  [POKEMON]'s HP is full!",
  	},
  	healreplacement: {
  		activate: "  [POKEMON] will restore its replacement's HP using its Z-Power!",
  	},
  	nopp: {
  		cant: "[POKEMON] used [MOVE]!\n  But there was no PP left for the move!",
  	},
  	recharge: {
  		cant: "[POKEMON] must recharge!",
  	},
  	recoil: {
  		damage: "  [POKEMON] was damaged by the recoil!",
  	},
  	unboost: {
  		fail: "  [POKEMON]'s stats were not lowered!",
  		failSingular: "  [POKEMON]'s [STAT] was not lowered!",
  	},
  	struggle: {
  		activate: "  [POKEMON] has no moves left!",
  	},
  	trapped: {
  		start: "  [POKEMON] can no longer escape!",
  	},
  	dynamax: {
  		start: "  ([POKEMON]'s Dynamax!)",
  		end: "  ([POKEMON] returned to normal!)",
  		block: "  The move was blocked by the power of Dynamax!",
  		fail: "  [POKEMON] shook its head. It seems like it can't use this move...",
  	},
  
  	// weather
  	sandstorm: {
  		weatherName: "Sandstorm",
  		start: "  A sandstorm kicked up!",
  		end: "  The sandstorm subsided.",
  		upkeep: "  The sandstorm is raging.",
  		damage: "  [POKEMON] is buffeted by the sandstorm!",
  	},
  	sunnyday: {
  		weatherName: "Sun",
  		start: "  The sunlight turned harsh!",
  		end: "  The harsh sunlight faded.",
  		upkeep: "  (The sunlight is strong!)",
  	},
  	raindance: {
  		weatherName: "Rain",
  		start: "  It started to rain!",
  		end: "  The rain stopped.",
  		upkeep: "  (Rain continues to fall!)",
  	},
  	hail: {
  		weatherName: "Hail",
  		start: "  It started to hail!",
  		end: "  The hail stopped.",
  		upkeep: "  The hail is crashing down.",
  		damage: "  [POKEMON] is buffeted by the hail!",
  	},
  	desolateland: {
  		weatherName: "Intense Sun",
  		start: "  The sunlight turned extremely harsh!",
  		end: "  The extremely harsh sunlight faded.",
  		block: "  The extremely harsh sunlight was not lessened at all!",
  		blockMove: "  The Water-type attack evaporated in the harsh sunlight!",
  	},
  	primordialsea: {
  		weatherName: "Heavy Rain",
  		start: "  A heavy rain began to fall!",
  		end: "  The heavy rain has lifted!",
  		block: "  There is no relief from this heavy rain!",
  		blockMove: "  The Fire-type attack fizzled out in the heavy rain!",
  	},
  	deltastream: {
  		weatherName: "Strong Winds",
  		start: "  Mysterious strong winds are protecting Flying-type Pok\u00E9mon!",
  		end: "  The mysterious strong winds have dissipated!",
  		activate: "  The mysterious strong winds weakened the attack!",
  		block: "  The mysterious strong winds blow on regardless!",
  	},
  
  	// terrain
  	electricterrain: {
  		start: "  An electric current ran across the battlefield!",
  		end: "  The electricity disappeared from the battlefield.",
  		block: "  [POKEMON] is protected by the Electric Terrain!",
  	},
  	grassyterrain: {
  		start: "  Grass grew to cover the battlefield!",
  		end: "  The grass disappeared from the battlefield.",
  		heal: "  [POKEMON]'s HP was restored.",
  	},
  	mistyterrain: {
  		start: "  Mist swirled around the battlefield!",
  		end: "  The mist disappeared from the battlefield.",
  		block: "  [POKEMON] surrounds itself with a protective mist!",
  	},
  	psychicterrain: {
  		start: "  The battlefield got weird!",
  		end: "  The weirdness disappeared from the battlefield!",
  		block: "  [POKEMON] is protected by the Psychic Terrain!",
  	},
  
  	// field effects
  	gravity: {
  		start: "  Gravity intensified!",
  		end: "  Gravity returned to normal!",
  		cant: "[POKEMON] can't use [MOVE] because of gravity!",
  		activate: "[POKEMON] fell from the sky due to the gravity!",
  	},
  	magicroom: {
  		start: "  It created a bizarre area in which Pok\u00E9mon's held items lose their effects!",
  		end: "  Magic Room wore off, and held items' effects returned to normal!",
  	},
  	mudsport: {
  		start: "  Electricity's power was weakened!",
  		end: "  The effects of Mud Sport have faded.",
  	},
  	trickroom: {
  		start: "  [POKEMON] twisted the dimensions!",
  		end: "  The twisted dimensions returned to normal!",
  	},
  	watersport: {
  		start: "  Fire's power was weakened!",
  		end: "  The effects of Water Sport have faded.",
  	},
  	wonderroom: {
  		start: "  It created a bizarre area in which Defense and Sp. Def stats are swapped!",
  		end: "  Wonder Room wore off, and Defense and Sp. Def stats returned to normal!",
  	},
  
  	// moves
  	afteryou: {
  		activate: "  [TARGET] took the kind offer!",
  	},
  	aquaring: {
  		start: "  [POKEMON] surrounded itself with a veil of water!",
  		heal: "  A veil of water restored [POKEMON]'s HP!",
  	},
  	aromatherapy: {
  		activate: "  A soothing aroma wafted through the area!",
  	},
  	attract: {
  		start: "  [POKEMON] fell in love!",
  		startFromItem: "  [POKEMON] fell in love because of the [ITEM]!",
  		end: "  [POKEMON] got over its infatuation!",
  		endFromItem: "  [POKEMON] cured its infatuation using its [ITEM]!",
  		activate: "  [POKEMON] is in love with [TARGET]!",
  		cant: "[POKEMON] is immobilized by love!",
  	},
  	auroraveil: {
  		start: "  Aurora Veil made [TEAM] stronger against physical and special moves!",
  		end: "  [TEAM]'s Aurora Veil wore off!",
  	},
  	autotomize: {
  		start: "  [POKEMON] became nimble!",
  	},
  	beakblast: {
  		start: "  [POKEMON] started heating up its beak!",
  	},
  	beatup: {
  		activate: "  [TARGET]'s attack!", // past gen only
  	},
  	bestow: {
  		takeItem: "  [SOURCE] gave [POKEMON] its [ITEM]!",
  	},
  	bide: {
  		start: "  [POKEMON] is storing energy!",
  		end: "  [POKEMON] unleashed its energy!",
  		activate: "  [POKEMON] is storing energy!",
  	},
  	bind: {
  		start: "  [POKEMON] was squeezed by [SOURCE]!",
  		move: "#wrap", // gen 1 only
  	},
  	brickbreak: {
  		activate: "  [POKEMON] shattered [TEAM]'s protections!",
  	},
  	bellydrum: {
  		boost: "  [POKEMON] cut its own HP and maximized its Attack!"
  	},
  	bounce: {
  		prepare: "[POKEMON] sprang up!",
  	},
  	bugbite: {
  		removeItem: "  [SOURCE] stole and ate its target's [ITEM]!",
  	},
  	burnup: {
  		typeChange: "  [POKEMON] burned itself out!",
  	},
  	celebrate: {
  		activate: "  Congratulations, [TRAINER]!",
  	},
  	charge: {
  		start: "  [POKEMON] began charging power!",
  	},
  	clamp: {
  		start: "  [SOURCE] clamped down on [POKEMON]!",
  		move: "#wrap", // gen 1 only
  	},
  	courtchange: {
  		activate: "  [POKEMON] swapped the battle effects affecting each side of the field!",
  	},
  	craftyshield: {
  		start: "  Crafty Shield protected [TEAM]!",
  		block: "  Crafty Shield protected [POKEMON]!",
  	},
  	crash: {
  		damage: "  [POKEMON] kept going and crashed!",
  	},
  	curse: {
  		start: "  [SOURCE] cut its own HP and put a curse on [POKEMON]!",
  		damage: "  [POKEMON] is afflicted by the curse!",
  	},
  	darkvoid: {
  		fail: "But [POKEMON] can't use the move!",
  		failWrongForme: "But [POKEMON] can't use it the way it is now!",
  	},
  	destinybond: {
  		start: "[POKEMON] is hoping to take its attacker down with it!",
  		activate: "  [POKEMON] took its attacker down with it!",
  	},
  	dig: {
  		prepare: "[POKEMON] burrowed its way under the ground!",
  	},
  	disable: {
  		start: "  [POKEMON]'s [MOVE] was disabled!",
  		end: "  [POKEMON]'s move is no longer disabled!",
  	},
  	dive: {
  		prepare: "[POKEMON] hid underwater!",
  	},
  	doomdesire: {
  		start: "  [POKEMON] chose Doom Desire as its destiny!",
  		activate: "  [TARGET] took the Doom Desire attack!",
  	},
  	dragonascent: {
  		megaNoItem: "  [TRAINER]'s fervent wish has reached [POKEMON]!",
  	},
  	electrify: {
  		start: "  [POKEMON]'s moves have been electrified!",
  	},
  	embargo: {
  		start: "  [POKEMON] can't use items anymore!",
  		end: "  [POKEMON] can use items again!",
  	},
  	encore: {
  		start: "  [POKEMON] must do an encore!",
  		end: "  [POKEMON]'s encore ended!",
  	},
  	endure: {
  		start: "  [POKEMON] braced itself!",
  		activate: "  [POKEMON] endured the hit!",
  	},
  	fairylock: {
  		activate: "  No one will be able to run away during the next turn!",
  	},
  	feint: {
  		activate: "  [TARGET] fell for the feint!",
  	},
  	firepledge: {
  		activate: "#waterpledge",
  		start: "  A sea of fire enveloped [TEAM]!",
  		end: "  The sea of fire around [TEAM] disappeared!",
  		damage: "  [POKEMON] was hurt by the sea of fire!",
  	},
  	firespin: {
  		start: "  [POKEMON] became trapped in the fiery vortex!",
  		move: "#wrap", // gen 1 only
  	},
  	flameburst: {
  		damage: "  The bursting flame hit [POKEMON]!",
  	},
  	fling: {
  		removeItem: "  [POKEMON] flung its [ITEM]!",
  	},
  	fly: {
  		prepare: "[POKEMON] flew up high!",
  	},
  	focusenergy: {
  		start: "  [POKEMON] is getting pumped!",
  		startFromItem: "  [POKEMON] used the [ITEM] to get pumped!",
  		startFromZEffect: "  [POKEMON] boosted its critical-hit ratio using its Z-Power!",
  	},
  	focuspunch: {
  		start: "  [POKEMON] is tightening its focus!",
  		cant: "[POKEMON] lost its focus and couldn't move!",
  	},
  	followme: {
  		start: "  [POKEMON] became the center of attention!",
  		startFromZEffect: "  [POKEMON] became the center of attention!",
  	},
  	foresight: {
  		start: "  [POKEMON] was identified!",
  	},
  	freezeshock: {
  		prepare: "  [POKEMON] became cloaked in a freezing light!",
  	},
  	futuresight: {
  		start: "  [POKEMON] foresaw an attack!",
  		activate: "  [TARGET] took the Future Sight attack!",
  	},
  	gastroacid: {
  		start: "  [POKEMON]'s Ability was suppressed!",
  	},
  	geomancy: {
  		prepare: "[POKEMON] is absorbing power!",
  	},
  	gmaxsteelsurge: {
  		start: "  Sharp-pointed pieces of steel started floating around [PARTY]!",
  		end: "  The pieces of steel surrounding [PARTY] disappeared!",
  		damage: "  The sharp steel bit into [POKEMON]!",
  	},
  	gmaxwildfire: {
  		start: "  [PARTY] were surrounded by fire!",
  		damage: "  [POKEMON] is burning up within G-Max Wildfire’s flames!",
  	},
  	grasspledge: {
  		activate: "#waterpledge",
  		start: "  A swamp enveloped [TEAM]!",
  		end: "  The swamp around [TEAM] disappeared!",
  	},
  	grudge: {
  		activate: "  [POKEMON]'s [MOVE] lost all of its PP due to the grudge!",
  		start: "[POKEMON] wants its target to bear a grudge!",
  	},
  	guardsplit: {
  		activate: "  [POKEMON] shared its guard with the target!",
  	},
  	happyhour: {
  		activate: "  Everyone is caught up in the happy atmosphere!",
  	},
  	healbell: {
  		activate: "  A bell chimed!",
  	},
  	healblock: {
  		start: "  [POKEMON] was prevented from healing!",
  		end: "  [POKEMON]'s Heal Block wore off!",
  		cant: "[POKEMON] can't use [MOVE] because of Heal Block!",
  	},
  	healingwish: {
  		heal: "  The healing wish came true for [POKEMON]!",
  	},
  	helpinghand: {
  		start: "  [SOURCE] is ready to help [POKEMON]!",
  	},
  	highjumpkick: {
  		damage: "#crash",
  	},
  	hyperspacefury: {
  		activate: "#shadowforce",
  		fail: "#darkvoid",
  	},
  	hyperspacehole: {
  		activate: "#shadowforce",
  	},
  	iceburn: {
  		prepare: "  [POKEMON] became cloaked in freezing air!",
  	},
  	imprison: {
  		start: "  [POKEMON] sealed any moves its target shares with it!",
  		cant: "[POKEMON] can't use its sealed [MOVE]!",
  	},
  	incinerate: {
  		removeItem: "  [POKEMON]'s [ITEM] was burned up!",
  	},
  	infestation: {
  		start: "  [POKEMON] has been afflicted with an infestation by [SOURCE]!",
  	},
  	ingrain: {
  		start: "  [POKEMON] planted its roots!",
  		block: "  [POKEMON] is anchored in place with its roots!",
  		heal: "  [POKEMON] absorbed nutrients with its roots!",
  	},
  	instruct: {
  		activate: "  [TARGET] followed [POKEMON]'s instructions!",
  	},
  	iondeluge: {
  		activate: "  A deluge of ions showers the battlefield!",
  	},
  	jumpkick: {
  		damage: "#crash",
  	},
  	knockoff: {
  		removeItem: "  [SOURCE] knocked off [POKEMON]'s [ITEM]!",
  	},
  	laserfocus: {
  		start: "  [POKEMON] concentrated intensely!",
  	},
  	leechseed: {
  		start: "  [POKEMON] was seeded!",
  		end: "  [POKEMON] was freed from Leech Seed!",
  		damage: "  [POKEMON]'s health is sapped by Leech Seed!",
  	},
  	lightscreen: {
  		start: "  Light Screen made [TEAM] stronger against special moves!",
  		end: "  [TEAM]'s Light Screen wore off!",
  		// gen 1
  		startGen1: "  [POKEMON]'s protected against special attacks!",
  	},
  	lockon: {
  		start: "  [SOURCE] took aim at [POKEMON]!",
  	},
  	luckychant: {
  		start: "  Lucky Chant shielded [TEAM] from critical hits!",
  		end: "  [TEAM]'s Lucky Chant wore off!",
  	},
  	lunardance: {
  		heal: "  [POKEMON] became cloaked in mystical moonlight!",
  	},
  	magiccoat: {
  		start: "  [POKEMON] shrouded itself with Magic Coat!",
  		move: "[POKEMON] bounced the [MOVE] back!",
  	},
  	magikarpsrevenge: {
  		fail: "#darkvoid",
  	},
  	magmastorm: {
  		start: "  [POKEMON] became trapped by swirling magma!",
  	},
  	magnetrise: {
  		start: "  [POKEMON] levitated with electromagnetism!",
  		end: "  [POKEMON]'s electromagnetism wore off!",
  		// "The electromagnetism of [POKEMON] wore off!" // PO artifact?
  	},
  	magnitude: {
  		activate: "  Magnitude [NUMBER]!",
  	},
  	matblock: {
  		start: "  [POKEMON] intends to flip up a mat and block incoming attacks!",
  		block: "  [MOVE] was blocked by the kicked-up mat!",
  	},
  	maxguard: {
  		block: "#protect",
  	},
  	memento: {
  		heal: "  [POKEMON]'s HP was restored by the Z-Power!",
  	},
  	metronome: {
  		move: "Waggling a finger let it use [MOVE]!",
  	},
  	mimic: {
  		start: "  [POKEMON] learned [MOVE]!",
  	},
  	mindreader: {
  		start: "#lockon",
  	},
  	miracleeye: {
  		start: "#foresight",
  	},
  	mist: {
  		start: "  [TEAM] became shrouded in mist!",
  		end: "  [TEAM] is no longer protected by mist!",
  		block: "  [POKEMON] is protected by the mist!",
  	},
  	naturepower: {
  		move: "Nature Power turned into [MOVE]!",
  	},
  	nightmare: {
  		start: "  [POKEMON] began having a nightmare!",
  		damage: "  [POKEMON] is locked in a nightmare!",
  	},
  	painsplit: {
  		activate: "  The battlers shared their pain!",
  	},
  	partingshot: {
  		heal: "#memento",
  	},
  	payday: {
  		activate: "  Coins were scattered everywhere!",
  	},
  	perishsong: {
  		start: "  All Pok\u00E9mon that heard the song will faint in three turns!",
  		activate: "  [POKEMON]'s perish count fell to [NUMBER].",
  	},
  	phantomforce: {
  		prepare: "#shadowforce",
  		activate: "#shadowforce",
  	},
  	pluck: {
  		removeItem: '#bugbite',
  	},
  	powder: {
  		start: "  [POKEMON] is covered in powder!",
  		activate: "  When the flame touched the powder on the Pok\u00E9mon, it exploded!",
  	},
  	powersplit: {
  		activate: "  [POKEMON] shared its power with the target!",
  	},
  	powertrick: {
  		start: "  [POKEMON] switched its Attack and Defense!",
  		end: '#.start',
  	},
  	protect: {
  		start: "  [POKEMON] protected itself!",
  		block: "  [POKEMON] protected itself!",
  	},
  	pursuit: {
  		activate: "  ([TARGET] is being withdrawn...)",
  	},
  	quash: {
  		activate: "  [TARGET]'s move was postponed!",
  	},
  	quickguard: {
  		start: "  Quick Guard protected [TEAM]!",
  		block: "  Quick Guard protected [POKEMON]!",
  	},
  	ragepowder: {
  		start: '#followme',
  		startFromZEffect: '#followme',
  	},
  	razorwind: {
  		prepare: "  [POKEMON] whipped up a whirlwind!",
  	},
  	recycle: {
  		addItem: "  [POKEMON] found one [ITEM]!",
  	},
  	reflect: {
  		start: "  Reflect made [TEAM] stronger against physical moves!",
  		end: "  [TEAM]'s Reflect wore off!",
  		// gen 1
  		startGen1: "  [POKEMON] gained armor!",
  	},
  	reflecttype: {
  		typeChange: "  [POKEMON]'s type became the same as [SOURCE]'s type!",
  	},
  	roleplay: {
  		changeAbility: "  [POKEMON] copied [SOURCE]'s [ABILITY] Ability!",
  	},
  	roost: {
  		start: "  ([POKEMON] loses Flying type this turn.)",
  	},
  	safeguard: {
  		start: "  [TEAM] cloaked itself in a mystical veil!",
  		end: "  [TEAM] is no longer protected by Safeguard!",
  		block: "  [POKEMON] is protected by Safeguard!",
  	},
  	sandtomb: {
  		start: "  [POKEMON] became trapped by the quicksand!",
  	},
  	shadowforce: {
  		activate: "  It broke through [TARGET]'s protection!",
  		prepare: "[POKEMON] vanished instantly!",
  	},
  	shelltrap: {
  		start: "  [POKEMON] set a shell trap!",
  		prepare: "  [POKEMON] set a shell trap!",
  		cant: "[POKEMON]'s shell trap didn't work!",
  	},
  	sketch: {
  		activate: "  [POKEMON] sketched [MOVE]!",
  	},
  	skillswap: {
  		activate: "  [POKEMON] swapped Abilities with its target!",
  	},
  	skullbash: {
  		prepare: "[POKEMON] tucked in its head!",
  	},
  	skyattack: {
  		prepare: "[POKEMON] became cloaked in a harsh light!",
  	},
  	skydrop: {
  		prepare: "[POKEMON] took [TARGET] into the sky!",
  		end: "  [POKEMON] was freed from the Sky Drop!",
  		failSelect: "Sky Drop won't let [POKEMON] go!",
  		failTooHeavy: "  [POKEMON] is too heavy to be lifted!",
  	},
  	smackdown: {
  		start: "  [POKEMON] fell straight down!",
  	},
  	snatch: {
  		start: "  [POKEMON] is waiting for a target to make a move!",
  		activate: "  [POKEMON] snatched [TARGET]'s move!",
  	},
  	solarbeam: {
  		prepare: "  [POKEMON] absorbed light!",
  	},
  	solarblade: {
  		prepare: "#solarbeam",
  	},
  	spectralthief: {
  		clearBoost: "  [SOURCE] stole the target's boosted stats!",
  	},
  	speedswap: {
  		activate: "  [POKEMON] switched Speed with its target!",
  	},
  	spikes: {
  		start: "  Spikes were scattered on the ground all around [TEAM]!",
  		end: "  The spikes disappeared from the ground around [TEAM]!",
  		damage: "  [POKEMON] was hurt by the spikes!",
  	},
  	spikyshield: {
  		damage: "#roughskin",
  	},
  	spite: {
  		activate: "  It reduced the PP of [TARGET]'s [MOVE] by [NUMBER]!",
  	},
  	splash: {
  		activate: "  But nothing happened!",
  	},
  	spotlight: {
  		start: "#followme",
  		startFromZEffect: "#followme",
  	},
  	stealthrock: {
  		start: "  Pointed stones float in the air around [TEAM]!",
  		end: "  The pointed stones disappeared from around [TEAM]!",
  		damage: "  Pointed stones dug into [POKEMON]!",
  	},
  	stickyweb: {
  		start: "  A sticky web has been laid out on the ground around [TEAM]!",
  		end: "  The sticky web has disappeared from the ground around [TEAM]!",
  		activate: "  [POKEMON] was caught in a sticky web!",
  	},
  	stockpile: {
  		start: "  [POKEMON] stockpiled [NUMBER]!",
  		end: "  [POKEMON]'s stockpiled effect wore off!",
  	},
  	substitute: {
  		start: "  [POKEMON] put in a substitute!",
  		alreadyStarted: "  [POKEMON] already has a substitute!",
  		end: "  [POKEMON]'s substitute faded!",
  		fail: "  But it does not have enough HP left to make a substitute!",
  		activate: "  The substitute took damage for [POKEMON]!",
  	},
  	switcheroo: {
  		activate: "#trick",
  	},
  	tailwind: {
  		start: "  The Tailwind blew from behind [TEAM]!",
  		end: "  [TEAM]'s Tailwind petered out!",
  	},
  	taunt: {
  		start: "  [POKEMON] fell for the taunt!",
  		end: "  [POKEMON] shook off the taunt!",
  		cant: "[POKEMON] can't use [MOVE] after the taunt!",
  	},
  	telekinesis: {
  		start: "  [POKEMON] was hurled into the air!",
  		end: "  [POKEMON] was freed from the telekinesis!",
  	},
  	throatchop: {
  		cant: "The effects of Throat Chop prevent [POKEMON] from using certain moves!",
  	},
  	torment: {
  		start: "  [POKEMON] was subjected to torment!",
  		end: "  [POKEMON] is no longer tormented!",
  	},
  	toxicspikes: {
  		start: "  Poison spikes were scattered on the ground all around [TEAM]!",
  		end: "  The poison spikes disappeared from the ground around [TEAM]!",
  	},
  	transform: {
  		transform: "[POKEMON] transformed into [SPECIES]!",
  	},
  	trick: {
  		activate: "  [POKEMON] switched items with its target!",
  	},
  	uproar: {
  		start: "  [POKEMON] caused an uproar!",
  		end: "  [POKEMON] calmed down.",
  		upkeep: "  [POKEMON] is making an uproar!",
  		block: "  But the uproar kept [POKEMON] awake!",
  		blockSelf: "  [POKEMON] can't sleep in an uproar!",
  	},
  	uturn: {
  		switchOut: "[POKEMON] went back to [TRAINER]!",
  	},
  	voltswitch: {
  		switchOut: '#uturn',
  	},
  	waterpledge: {
  		activate: "  [POKEMON] is waiting for [TARGET]'s move...",
  		start: "  A rainbow appeared in the sky on [TEAM]'s side!",
  		end: "  The rainbow on [TEAM]'s side disappeared!",
  	},
  	weatherball: {
  		move: "Breakneck Blitz turned into [MOVE] due to the weather!",
  	},
  	whirlpool: {
  		start: "  [POKEMON] became trapped in the vortex!",
  	},
  	wideguard: {
  		start: "  Wide Guard protected [TEAM]!",
  		block: "  Wide Guard protected [POKEMON]!",
  	},
  	wish: {
  		heal: "  [NICKNAME]'s wish came true!",
  	},
  	wrap: {
  		start: "  [POKEMON] was wrapped by [SOURCE]!",
  		move: "[POKEMON]'s attack continues!", // gen 1 only
  	},
  	yawn: {
  		start: "  [POKEMON] grew drowsy!",
  	},
  
  	// abilities
  	aftermath: {
  		damage: "  [POKEMON] was hurt!",
  	},
  	airlock: {
  		start: "  The effects of the weather disappeared.",
  	},
  	angerpoint: {
  		boost: "  [POKEMON] maxed its Attack!",
  	},
  	anticipation: {
  		activate: "  [POKEMON] shuddered!",
  	},
  	aromaveil: {
  		block: "  [POKEMON] is protected by an aromatic veil!",
  	},
  	aurabreak: {
  		start: "  [POKEMON] reversed all other Pok\u00E9mon's auras!",
  	},
  	baddreams: {
  		damage: "  [POKEMON] is tormented!",
  	},
  	battlebond: {
  		activate: "  [POKEMON] became fully charged due to its bond with its Trainer!",
  		transform: "[POKEMON] became Ash-Greninja!",
  	},
  	blacksludge: {
  		heal: "  [POKEMON] restored a little HP using its Black Sludge!",
  	},
  	cloudnine: {
  		start: "#airlock",
  	},
  	comatose: {
  		start: "  [POKEMON] is drowsing!",
  	},
  	damp: {
  		block: "  [SOURCE] cannot use [MOVE]!",
  	},
  	darkaura: {
  		start: "  [POKEMON] is radiating a dark aura!",
  	},
  	dazzling: {
  		block: "#damp",
  	},
  	disguise: {
  		block: "  Its disguise served it as a decoy!",
  		transform: "[POKEMON]'s disguise was busted!",
  	},
  	dryskin: {
  		damage: "  ([POKEMON] was hurt by its Dry Skin.)",
  	},
  	fairyaura: {
  		start: "  [POKEMON] is radiating a fairy aura!",
  	},
  	flashfire: {
  		start: "  The power of [POKEMON]'s Fire-type moves rose!",
  	},
  	flowerveil: {
  		block: "  [POKEMON] surrounded itself with a veil of petals!",
  	},
  	forewarn: {
  		activate: "  [TARGET]'s [MOVE] was revealed!",
  		activateNoTarget: "  [POKEMON]'s Forewarn alerted it to [MOVE]!",
  	},
  	frisk: {
  		activate: "  [POKEMON] frisked [TARGET] and found its [ITEM]!",
  		activateNoTarget: "  [POKEMON] frisked its target and found one [ITEM]!",
  	},
  	harvest: {
  		addItem: "  [POKEMON] harvested one [ITEM]!",
  	},
  	illusion: {
  		end: "  [POKEMON]'s illusion wore off!",
  	},
  	innardsout: {
  		damage: "#aftermath",
  	},
  	ironbarbs: {
  		damage: "#roughskin",
  	},
  	leftovers: {
  		heal: "  [POKEMON] restored a little HP using its Leftovers!",
  	},
  	lightningrod: {
  		activate: "  [POKEMON] took the attack!",
  	},
  	liquidooze: {
  		damage: "  [POKEMON] sucked up the liquid ooze!",
  	},
  	magicbounce: {
  		move: '#magiccoat',
  	},
  	mindblown: {
  		damage: "  ([POKEMON] cut its own HP to power up its move!)",
  	},
  	moldbreaker: {
  		start: "  [POKEMON] breaks the mold!",
  	},
  	mummy: {
  		changeAbility: "  [TARGET]'s Ability became Mummy!",
  	},
  	naturalcure: {
  		activate: "  ([POKEMON] is cured by its Natural Cure!)",
  	},
  	neutralizinggas: {
  		start: "  Neutralizing gas filled the area!",
  		end: "  The effects of the neutralizing gas wore off!",
  	},
  	owntempo: {
  		block: "  [POKEMON] cannot be confused!",
  	},
  	persistent: {
  		activate: "  [POKEMON] extends [MOVE] by 2 turns!",
  	},
  	pickup: {
  		addItem: '#recycle',
  	},
  	powerconstruct: {
  		activate: "  You sense the presence of many!",
  		transform: "[POKEMON] transformed into its Complete Forme!",
  	},
  	powerofalchemy: {
  		changeAbility: "#receiver",
  	},
  	pressure: {
  		start: "  [POKEMON] is exerting its pressure!",
  	},
  	queenlymajesty: {
  		block: "#damp",
  	},
  	rebound: {
  		move: '#magiccoat',
  	},
  	receiver: {
  		changeAbility: "  [SOURCE]'s [ABILITY] was taken over!",
  	},
  	rockyhelmet: {
  		damage: "  [POKEMON] was hurt by the Rocky Helmet!",
  	},
  	roughskin: {
  		damage: "  [POKEMON] was hurt!",
  	},
  	schooling: {
  		transform: "[POKEMON] formed a school!",
  		transformEnd: "[POKEMON] stopped schooling!",
  	},
  	shellbell: {
  		heal: "  [POKEMON] restored a little HP using its Shell Bell!",
  	},
  	shieldsdown: {
  		// n.b. this isn't a bug, the game actually says "Shields Down deactivated" on first transformation
  		// https://www.youtube.com/watch?v=SThjYBz4SEA
  		transform: "Shields Down deactivated!\n([POKEMON] shielded itself.)",
  		transformEnd: "Shields Down activated!\n([POKEMON] stopped shielding itself.)",
  	},
  	slowstart: {
  		start: "  [POKEMON] can't get it going!",
  		end: "  [POKEMON] finally got its act together!",
  	},
  	solarpower: {
  		damage: "  ([POKEMON] was hurt by its Solar Power.)",
  	},
  	stancechange: {
  		transform: "Changed to Blade Forme!",
  		transformEnd: "Changed to Shield Forme!",
  	},
  	stickyhold: {
  		block: "  [POKEMON]'s item cannot be removed!",
  	},
  	stormdrain: {
  		activate: "#lightningrod",
  	},
  	sturdy: {
  		activate: "  [POKEMON] endured the hit!",
  	},
  	suctioncups: {
  		block: "  [POKEMON] is anchored in place with its suction cups!",
  	},
  	sweetveil: {
  		block: "  [POKEMON] can't fall asleep due to a veil of sweetness!",
  	},
  	symbiosis: {
  		activate: "  [POKEMON] shared its [ITEM] with [TARGET]!",
  	},
  	telepathy: {
  		block: "  [POKEMON] can't be hit by attacks from its ally Pok\u00E9mon!",
  	},
  	teravolt: {
  		start: "  [POKEMON] is radiating a bursting aura!",
  	},
  	trace: {
  		changeAbility: "  [POKEMON] traced [SOURCE]'s [ABILITY]!",
  	},
  	truant: {
  		cant: "[POKEMON] is loafing around!",
  	},
  	turboblaze: {
  		start: "  [POKEMON] is radiating a blazing aura!",
  	},
  	unnerve: {
  		start: "  [TEAM] is too nervous to eat Berries!",
  	},
  	wanderingspirit: {
  		activate: "#skillswap",
  	},
  	zenmode: {
  		transform: 'Zen Mode triggered!',
  		transformEnd: 'Zen Mode ended!',
  	},
  
  	// items
  	airballoon: {
  		start: "  [POKEMON] floats in the air with its Air Balloon!",
  		end: "  [POKEMON]'s Air Balloon popped!",
  	},
  	custapberry: {
  		activate: "  [POKEMON] can act faster than normal, thanks to its Custap Berry!",
  	},
  	ejectbutton: {
  		end: "  [POKEMON] is switched out with the Eject Button!",
  	},
  	focusband: {
  		activate: "  [POKEMON] hung on using its Focus Band!",
  	},
  	focussash: {
  		end: "  [POKEMON] hung on using its Focus Sash!",
  	},
  	leppaberry: {
  		activate: "  [POKEMON] restored PP to its move [MOVE] using its Leppa Berry!",
  	},
  	lifeorb: {
  		damage: "  [POKEMON] lost some of its HP!",
  	},
  	mysteryberry: {
  		activate: "  [POKEMON] restored PP to its [MOVE] move using Mystery Berry!",
  	},
  	powerherb: {
  		end: "  [POKEMON] became fully charged due to its Power Herb!",
  	},
  	protectivepads: {
  		block: "  [POKEMON] protected itself with its Protective Pads!",
  	},
  	quickclaw: {
  		activate: "  [POKEMON] can act faster than normal, thanks to its Quick Claw!",
  	},
  	redcard: {
  		end: "  [POKEMON] held up its Red Card against [TARGET]!",
  	},
  	safetygoggles: {
  		block: "  [POKEMON] is not affected by [MOVE] thanks to its Safety Goggles!",
  	},
  	ultranecroziumz: {
  		transform: "  Bright light is about to burst out of [POKEMON]!",
  		activate: "[POKEMON] regained its true power through Ultra Burst!",
  	},
  	whiteherb: {
  		end: "  [POKEMON] returned its stats to normal using its White Herb!",
  	},
  };
  