diff --git a/examples/Pokemon-Safari/playable-scenario-src/library.js b/examples/Pokemon-Safari/playable-scenario-src/library.js
index 8b13789..89e6212 100644
--- a/examples/Pokemon-Safari/playable-scenario-src/library.js
+++ b/examples/Pokemon-Safari/playable-scenario-src/library.js
@@ -1 +1,6744 @@
+// Your "Library" tab should look like this
+globalThis.text ??= "\n";
+globalThis.stop ??= false;
+const replacements = [
+ [/ho[- ]*oh/gi, "Ho-oh"],
+ [/mime[- ]*jr/gi, "Mime-Jr"],
+ [/porygon[- ]*z/gi, "Porygon-Z"],
+ [/type[- ]*null/gi, "Type-Null"],
+ [/jangmo[- ]*o/gi, "Jangmo-o"],
+ [/hakamo[- ]*o/gi, "Hakamo-o"],
+ [/kommo[- ]*o/gi, "Kommo-o"],
+ [/tapu[- ]*koko/gi, "Tapu-Koko"],
+ [/tapu[- ]*lele/gi, "Tapu-Lele"],
+ [/tapu[- ]*bulu/gi, "Tapu-Bulu"],
+ [/tapu[- ]*fini/gi, "Tapu-Fini"],
+ [/great[- ]*tusk/gi, "Great-Tusk"],
+ [/scream[- ]*tail/gi, "Scream-Tail"],
+ [/brute[- ]*bonnet/gi, "Brute-Bonnet"],
+ [/flutter[- ]*mane/gi, "Flutter-Mane"],
+ [/slither[- ]*wing/gi, "Slither-Wing"],
+ [/sandy[- ]*shocks/gi, "Sandy-Shocks"],
+ [/iron[- ]*treads/gi, "Iron-Treads"],
+ [/iron[- ]*bundle/gi, "Iron-Bundle"],
+ [/iron[- ]*hands/gi, "Iron-Hands"],
+ [/iron[- ]*jugulis/gi, "Iron-Jugulis"],
+ [/iron[- ]*moth/gi, "Iron-Moth"],
+ [/iron[- ]*thorns/gi, "Iron-Thorns"],
+ [/wo[- ]*chien/gi, "Wo-Chien"],
+ [/chien[- ]*pao/gi, "Chien-Pao"],
+ [/ting[- ]*lu/gi, "Ting-Lu"],
+ [/chi[- ]*yu/gi, "Chi-Yu"],
+ [/roaring[- ]*moon/gi, "Roaring-Moon"],
+ [/iron[- ]*valiant/gi, "Iron-Valiant"],
+ [/walking[- ]*wake/gi, "Walking-Wake"],
+ [/iron[- ]*leaves/gi, "Iron-Leaves"],
+ [/gouging[- ]*fire/gi, "Gouging-Fire"],
+ [/raging[- ]*bolt/gi, "Raging-Bolt"],
+ [/iron[- ]*boulder/gi, "Iron-Boulder"],
+ [/iron[- ]*crown/gi, "Iron-Crown"],
+ [/pokemon[- ]*beach/gi, "Pokemon-Beach"],
+ [/pokemon[- ]*garden/gi, "Pokemon-Garden"],
+ [/pokemon[- ]*square/gi, "Pokemon-Square"],
+ [/pokemon[- ]*village/gi, "Pokemon-Village"],
+ [/shiver[- ]*camp/gi, "Shiver-Camp"],
+ [/cabo[- ]*poco/gi, "Cabo-Poco"],
+ [/cinnabar[- ]*island/gi, "Cinnabar-Island"],
+ [/diamond[- ]*settlement/gi, "Diamond-Settlement"],
+ [/ever[- ]*grande/gi, "Ever-Grande"],
+ [/fight[- ]*area/gi, "Fight-Area"],
+ [/five[- ]*island/gi, "Five-Island"],
+ [/four[- ]*island/gi, "Four-Island"],
+ [/frontier[- ]*access/gi, "Frontier-Access"],
+ [/hammerlocke[- ]*hills/gi, "Hammerlocke-Hills"],
+ [/los[- ]*platos/gi, "Los-Platos"],
+ [/new[- ]*bark/gi, "New-Bark"],
+ [/one[- ]*island/gi, "One-Island"],
+ [/pearl[- ]*settlement/gi, "Pearl-Settlement"],
+ [/porto[- ]*marinada/gi, "Porto-Marinada"],
+ [/resort[- ]*area/gi, "Resort-Area"],
+ [/safari[- ]*zone[- ]*gate/gi, "Safari-Zone-Gate"],
+ [/seven[- ]*island/gi, "Seven-Island"],
+ [/six[- ]*island/gi, "Six-Island"],
+ [/stow[- ]*on[- ]*side/gi, "Stow-on-Side"],
+ [/survival[- ]*area/gi, "Survival-Area"],
+ [/three[- ]*island/gi, "Three-Island"],
+ [/two[- ]*island/gi, "Two-Island"],
+ [/white[- ]*forest/gi, "White-Forest"],
+ [/gateon[- ]*port/gi, "Gateon-Port"],
+ [/the[- ]*under/gi, "The-Under"],
+ [/aqua[- ]*resort/gi, "Aqua-Resort"],
+ [/10,000,000[- ]*volt[- ]*thunderbolt/gi, "10,000,000-Volt-Thunderbolt"],
+ [/acid[- ]*armor/gi, "Acid-Armor"],
+ [/acid[- ]*downpour/gi, "Acid-Downpour"],
+ [/acid[- ]*spray/gi, "Acid-Spray"],
+ [/aerial[- ]*ace/gi, "Aerial-Ace"],
+ [/after[- ]*you/gi, "After-You"],
+ [/air[- ]*cutter/gi, "Air-Cutter"],
+ [/air[- ]*slash/gi, "Air-Slash"],
+ [/all[- ]*out[- ]*pummeling/gi, "All-Out-Pummeling"],
+ [/alluring[- ]*voice/gi, "Alluring-Voice"],
+ [/ally[- ]*switch/gi, "Ally-Switch"],
+ [/anchor[- ]*shot/gi, "Anchor-Shot"],
+ [/ancient[- ]*power/gi, "Ancient-Power"],
+ [/apple[- ]*acid/gi, "Apple-Acid"],
+ [/aqua[- ]*cutter/gi, "Aqua-Cutter"],
+ [/aqua[- ]*jet/gi, "Aqua-Jet"],
+ [/aqua[- ]*ring/gi, "Aqua-Ring"],
+ [/aqua[- ]*step/gi, "Aqua-Step"],
+ [/aqua[- ]*tail/gi, "Aqua-Tail"],
+ [/arm[- ]*thrust/gi, "Arm-Thrust"],
+ [/armor[- ]*cannon/gi, "Armor-Cannon"],
+ [/aromatic[- ]*mist/gi, "Aromatic-Mist"],
+ [/astral[- ]*barrage/gi, "Astral-Barrage"],
+ [/attack[- ]*order/gi, "Attack-Order"],
+ [/aura[- ]*sphere/gi, "Aura-Sphere"],
+ [/aura[- ]*wheel/gi, "Aura-Wheel"],
+ [/aurora[- ]*beam/gi, "Aurora-Beam"],
+ [/aurora[- ]*veil/gi, "Aurora-Veil"],
+ [/axe[- ]*kick/gi, "Axe-Kick"],
+ [/baby[- ]*doll[- ]*eyes/gi, "Baby-Doll-Eyes"],
+ [/baddy[- ]*bad/gi, "Baddy-Bad"],
+ [/baneful[- ]*bunker/gi, "Baneful-Bunker"],
+ [/barb[- ]*barrage/gi, "Barb-Barrage"],
+ [/baton[- ]*pass/gi, "Baton-Pass"],
+ [/beak[- ]*blast/gi, "Beak-Blast"],
+ [/beat[- ]*up/gi, "Beat-Up"],
+ [/behemoth[- ]*bash/gi, "Behemoth-Bash"],
+ [/behemoth[- ]*blade/gi, "Behemoth-Blade"],
+ [/belly[- ]*drum/gi, "Belly-Drum"],
+ [/bitter[- ]*blade/gi, "Bitter-Blade"],
+ [/bitter[- ]*malice/gi, "Bitter-Malice"],
+ [/black[- ]*hole[- ]*eclipse/gi, "Black-Hole-Eclipse"],
+ [/blast[- ]*burn/gi, "Blast-Burn"],
+ [/blaze[- ]*kick/gi, "Blaze-Kick"],
+ [/blazing[- ]*torque/gi, "Blazing-Torque"],
+ [/bleakwind[- ]*storm/gi, "Bleakwind-Storm"],
+ [/blood[- ]*moon/gi, "Blood-Moon"],
+ [/bloom[- ]*doom/gi, "Bloom-Doom"],
+ [/blue[- ]*flare/gi, "Blue-Flare"],
+ [/body[- ]*press/gi, "Body-Press"],
+ [/body[- ]*slam/gi, "Body-Slam"],
+ [/bolt[- ]*beak/gi, "Bolt-Beak"],
+ [/bolt[- ]*strike/gi, "Bolt-Strike"],
+ [/bone[- ]*club/gi, "Bone-Club"],
+ [/bone[- ]*rush/gi, "Bone-Rush"],
+ [/bouncy[- ]*bubble/gi, "Bouncy-Bubble"],
+ [/branch[- ]*poke/gi, "Branch-Poke"],
+ [/brave[- ]*bird/gi, "Brave-Bird"],
+ [/breaking[- ]*swipe/gi, "Breaking-Swipe"],
+ [/breakneck[- ]*blitz/gi, "Breakneck-Blitz"],
+ [/brick[- ]*break/gi, "Brick-Break"],
+ [/brutal[- ]*swing/gi, "Brutal-Swing"],
+ [/bubble[- ]*beam/gi, "Bubble-Beam"],
+ [/bug[- ]*bite/gi, "Bug-Bite"],
+ [/bug[- ]*buzz/gi, "Bug-Buzz"],
+ [/bulk[- ]*up/gi, "Bulk-Up"],
+ [/bullet[- ]*punch/gi, "Bullet-Punch"],
+ [/bullet[- ]*seed/gi, "Bullet-Seed"],
+ [/burn[- ]*up/gi, "Burn-Up"],
+ [/burning[- ]*bulwark/gi, "Burning-Bulwark"],
+ [/burning[- ]*jealousy/gi, "Burning-Jealousy"],
+ [/buzzy[- ]*buzz/gi, "Buzzy-Buzz"],
+ [/calm[- ]*mind/gi, "Calm-Mind"],
+ [/ceaseless[- ]*edge/gi, "Ceaseless-Edge"],
+ [/charge[- ]*beam/gi, "Charge-Beam"],
+ [/chilling[- ]*water/gi, "Chilling-Water"],
+ [/chilly[- ]*reception/gi, "Chilly-Reception"],
+ [/chip[- ]*away/gi, "Chip-Away"],
+ [/circle[- ]*throw/gi, "Circle-Throw"],
+ [/clanging[- ]*scales/gi, "Clanging-Scales"],
+ [/clangorous[- ]*soul/gi, "Clangorous-Soul"],
+ [/clangorous[- ]*soulblaze/gi, "Clangorous-Soulblaze"],
+ [/clear[- ]*smog/gi, "Clear-Smog"],
+ [/close[- ]*combat/gi, "Close-Combat"],
+ [/collision[- ]*course/gi, "Collision-Course"],
+ [/combat[- ]*torque/gi, "Combat-Torque"],
+ [/comet[- ]*punch/gi, "Comet-Punch"],
+ [/confuse[- ]*ray/gi, "Confuse-Ray"],
+ [/continental[- ]*crush/gi, "Continental-Crush"],
+ [/conversion[- ]*2/gi, "Conversion-2"],
+ [/core[- ]*enforcer/gi, "Core-Enforcer"],
+ [/corkscrew[- ]*crash/gi, "Corkscrew-Crash"],
+ [/corrosive[- ]*gas/gi, "Corrosive-Gas"],
+ [/cosmic[- ]*power/gi, "Cosmic-Power"],
+ [/cotton[- ]*guard/gi, "Cotton-Guard"],
+ [/cotton[- ]*spore/gi, "Cotton-Spore"],
+ [/court[- ]*change/gi, "Court-Change"],
+ [/crafty[- ]*shield/gi, "Crafty-Shield"],
+ [/cross[- ]*chop/gi, "Cross-Chop"],
+ [/cross[- ]*poison/gi, "Cross-Poison"],
+ [/crush[- ]*claw/gi, "Crush-Claw"],
+ [/crush[- ]*grip/gi, "Crush-Grip"],
+ [/dark[- ]*pulse/gi, "Dark-Pulse"],
+ [/dark[- ]*void/gi, "Dark-Void"],
+ [/darkest[- ]*lariat/gi, "Darkest-Lariat"],
+ [/dazzling[- ]*gleam/gi, "Dazzling-Gleam"],
+ [/defend[- ]*order/gi, "Defend-Order"],
+ [/defense[- ]*curl/gi, "Defense-Curl"],
+ [/destiny[- ]*bond/gi, "Destiny-Bond"],
+ [/devastating[- ]*drake/gi, "Devastating-Drake"],
+ [/diamond[- ]*storm/gi, "Diamond-Storm"],
+ [/dire[- ]*claw/gi, "Dire-Claw"],
+ [/disarming[- ]*voice/gi, "Disarming-Voice"],
+ [/dizzy[- ]*punch/gi, "Dizzy-Punch"],
+ [/doom[- ]*desire/gi, "Doom-Desire"],
+ [/double[- ]*hit/gi, "Double-Hit"],
+ [/double[- ]*iron[- ]*bash/gi, "Double-Iron-Bash"],
+ [/double[- ]*kick/gi, "Double-Kick"],
+ [/double[- ]*shock/gi, "Double-Shock"],
+ [/double[- ]*slap/gi, "Double-Slap"],
+ [/double[- ]*team/gi, "Double-Team"],
+ [/double[- ]*edge/gi, "Double-Edge"],
+ [/draco[- ]*meteor/gi, "Draco-Meteor"],
+ [/dragon[- ]*ascent/gi, "Dragon-Ascent"],
+ [/dragon[- ]*breath/gi, "Dragon-Breath"],
+ [/dragon[- ]*cheer/gi, "Dragon-Cheer"],
+ [/dragon[- ]*claw/gi, "Dragon-Claw"],
+ [/dragon[- ]*dance/gi, "Dragon-Dance"],
+ [/dragon[- ]*darts/gi, "Dragon-Darts"],
+ [/dragon[- ]*energy/gi, "Dragon-Energy"],
+ [/dragon[- ]*hammer/gi, "Dragon-Hammer"],
+ [/dragon[- ]*pulse/gi, "Dragon-Pulse"],
+ [/dragon[- ]*rage/gi, "Dragon-Rage"],
+ [/dragon[- ]*rush/gi, "Dragon-Rush"],
+ [/dragon[- ]*tail/gi, "Dragon-Tail"],
+ [/drain[- ]*punch/gi, "Drain-Punch"],
+ [/draining[- ]*kiss/gi, "Draining-Kiss"],
+ [/dream[- ]*eater/gi, "Dream-Eater"],
+ [/drill[- ]*peck/gi, "Drill-Peck"],
+ [/drill[- ]*run/gi, "Drill-Run"],
+ [/drum[- ]*beating/gi, "Drum-Beating"],
+ [/dual[- ]*chop/gi, "Dual-Chop"],
+ [/dual[- ]*wingbeat/gi, "Dual-Wingbeat"],
+ [/dynamax[- ]*cannon/gi, "Dynamax-Cannon"],
+ [/dynamic[- ]*punch/gi, "Dynamic-Punch"],
+ [/earth[- ]*power/gi, "Earth-Power"],
+ [/echoed[- ]*voice/gi, "Echoed-Voice"],
+ [/eerie[- ]*impulse/gi, "Eerie-Impulse"],
+ [/eerie[- ]*spell/gi, "Eerie-Spell"],
+ [/egg[- ]*bomb/gi, "Egg-Bomb"],
+ [/electric[- ]*terrain/gi, "Electric-Terrain"],
+ [/electro[- ]*ball/gi, "Electro-Ball"],
+ [/electro[- ]*drift/gi, "Electro-Drift"],
+ [/electro[- ]*shot/gi, "Electro-Shot"],
+ [/energy[- ]*ball/gi, "Energy-Ball"],
+ [/esper[- ]*wing/gi, "Esper-Wing"],
+ [/expanding[- ]*force/gi, "Expanding-Force"],
+ [/extreme[- ]*evoboost/gi, "Extreme-Evoboost"],
+ [/extreme[- ]*speed/gi, "Extreme-Speed"],
+ [/fairy[- ]*lock/gi, "Fairy-Lock"],
+ [/fairy[- ]*wind/gi, "Fairy-Wind"],
+ [/fake[- ]*out/gi, "Fake-Out"],
+ [/fake[- ]*tears/gi, "Fake-Tears"],
+ [/false[- ]*surrender/gi, "False-Surrender"],
+ [/false[- ]*swipe/gi, "False-Swipe"],
+ [/feather[- ]*dance/gi, "Feather-Dance"],
+ [/feint[- ]*attack/gi, "Feint-Attack"],
+ [/fell[- ]*stinger/gi, "Fell-Stinger"],
+ [/fickle[- ]*beam/gi, "Fickle-Beam"],
+ [/fiery[- ]*dance/gi, "Fiery-Dance"],
+ [/fiery[- ]*wrath/gi, "Fiery-Wrath"],
+ [/fillet[- ]*away/gi, "Fillet-Away"],
+ [/final[- ]*gambit/gi, "Final-Gambit"],
+ [/fire[- ]*blast/gi, "Fire-Blast"],
+ [/fire[- ]*fang/gi, "Fire-Fang"],
+ [/fire[- ]*lash/gi, "Fire-Lash"],
+ [/fire[- ]*pledge/gi, "Fire-Pledge"],
+ [/fire[- ]*punch/gi, "Fire-Punch"],
+ [/fire[- ]*spin/gi, "Fire-Spin"],
+ [/first[- ]*impression/gi, "First-Impression"],
+ [/fishious[- ]*rend/gi, "Fishious-Rend"],
+ [/flame[- ]*burst/gi, "Flame-Burst"],
+ [/flame[- ]*charge/gi, "Flame-Charge"],
+ [/flame[- ]*wheel/gi, "Flame-Wheel"],
+ [/flare[- ]*blitz/gi, "Flare-Blitz"],
+ [/flash[- ]*cannon/gi, "Flash-Cannon"],
+ [/fleur[- ]*cannon/gi, "Fleur-Cannon"],
+ [/flip[- ]*turn/gi, "Flip-Turn"],
+ [/floaty[- ]*fall/gi, "Floaty-Fall"],
+ [/floral[- ]*healing/gi, "Floral-Healing"],
+ [/flower[- ]*shield/gi, "Flower-Shield"],
+ [/flower[- ]*trick/gi, "Flower-Trick"],
+ [/flying[- ]*press/gi, "Flying-Press"],
+ [/focus[- ]*blast/gi, "Focus-Blast"],
+ [/focus[- ]*energy/gi, "Focus-Energy"],
+ [/focus[- ]*punch/gi, "Focus-Punch"],
+ [/follow[- ]*me/gi, "Follow-Me"],
+ [/force[- ]*palm/gi, "Force-Palm"],
+ [/forest[- ]*curse/gi, "Forest-Curse"],
+ [/foul[- ]*play/gi, "Foul-Play"],
+ [/freeze[- ]*shock/gi, "Freeze-Shock"],
+ [/freeze[- ]*dry/gi, "Freeze-Dry"],
+ [/freezing[- ]*glare/gi, "Freezing-Glare"],
+ [/freezy[- ]*frost/gi, "Freezy-Frost"],
+ [/frenzy[- ]*plant/gi, "Frenzy-Plant"],
+ [/frost[- ]*breath/gi, "Frost-Breath"],
+ [/fury[- ]*attack/gi, "Fury-Attack"],
+ [/fury[- ]*cutter/gi, "Fury-Cutter"],
+ [/fury[- ]*swipes/gi, "Fury-Swipes"],
+ [/fusion[- ]*bolt/gi, "Fusion-Bolt"],
+ [/fusion[- ]*flare/gi, "Fusion-Flare"],
+ [/future[- ]*sight/gi, "Future-Sight"],
+ [/g[- ]*max[- ]*befuddle/gi, "G-Max-Befuddle"],
+ [/g[- ]*max[- ]*cannonade/gi, "G-Max-Cannonade"],
+ [/g[- ]*max[- ]*centiferno/gi, "G-Max-Centiferno"],
+ [/g[- ]*max[- ]*chi[- ]*strike/gi, "G-Max-Chi-Strike"],
+ [/g[- ]*max[- ]*cuddle/gi, "G-Max-Cuddle"],
+ [/g[- ]*max[- ]*depletion/gi, "G-Max-Depletion"],
+ [/g[- ]*max[- ]*drum[- ]*solo/gi, "G-Max-Drum-Solo"],
+ [/g[- ]*max[- ]*finale/gi, "G-Max-Finale"],
+ [/g[- ]*max[- ]*fireball/gi, "G-Max-Fireball"],
+ [/g[- ]*max[- ]*foam[- ]*burst/gi, "G-Max-Foam-Burst"],
+ [/g[- ]*max[- ]*gold[- ]*rush/gi, "G-Max-Gold-Rush"],
+ [/g[- ]*max[- ]*gravitas/gi, "G-Max-Gravitas"],
+ [/g[- ]*max[- ]*hydrosnipe/gi, "G-Max-Hydrosnipe"],
+ [/g[- ]*max[- ]*malodor/gi, "G-Max-Malodor"],
+ [/g[- ]*max[- ]*meltdown/gi, "G-Max-Meltdown"],
+ [/g[- ]*max[- ]*one[- ]*blow/gi, "G-Max-One-Blow"],
+ [/g[- ]*max[- ]*rapid[- ]*flow/gi, "G-Max-Rapid-Flow"],
+ [/g[- ]*max[- ]*replenish/gi, "G-Max-Replenish"],
+ [/g[- ]*max[- ]*resonance/gi, "G-Max-Resonance"],
+ [/g[- ]*max[- ]*sandblast/gi, "G-Max-Sandblast"],
+ [/g[- ]*max[- ]*smite/gi, "G-Max-Smite"],
+ [/g[- ]*max[- ]*snooze/gi, "G-Max-Snooze"],
+ [/g[- ]*max[- ]*steelsurge/gi, "G-Max-Steelsurge"],
+ [/g[- ]*max[- ]*stonesurge/gi, "G-Max-Stonesurge"],
+ [/g[- ]*max[- ]*stun[- ]*shock/gi, "G-Max-Stun-Shock"],
+ [/g[- ]*max[- ]*sweetness/gi, "G-Max-Sweetness"],
+ [/g[- ]*max[- ]*tartness/gi, "G-Max-Tartness"],
+ [/g[- ]*max[- ]*terror/gi, "G-Max-Terror"],
+ [/g[- ]*max[- ]*vine[- ]*lash/gi, "G-Max-Vine-Lash"],
+ [/g[- ]*max[- ]*volcalith/gi, "G-Max-Volcalith"],
+ [/g[- ]*max[- ]*volt[- ]*crash/gi, "G-Max-Volt-Crash"],
+ [/g[- ]*max[- ]*wildfire/gi, "G-Max-Wildfire"],
+ [/g[- ]*max[- ]*wind[- ]*rage/gi, "G-Max-Wind-Rage"],
+ [/gastro[- ]*acid/gi, "Gastro-Acid"],
+ [/gear[- ]*grind/gi, "Gear-Grind"],
+ [/gear[- ]*up/gi, "Gear-Up"],
+ [/genesis[- ]*supernova/gi, "Genesis-Supernova"],
+ [/giga[- ]*drain/gi, "Giga-Drain"],
+ [/giga[- ]*impact/gi, "Giga-Impact"],
+ [/gigaton[- ]*hammer/gi, "Gigaton-Hammer"],
+ [/gigavolt[- ]*havoc/gi, "Gigavolt-Havoc"],
+ [/glacial[- ]*lance/gi, "Glacial-Lance"],
+ [/glaive[- ]*rush/gi, "Glaive-Rush"],
+ [/glitzy[- ]*glow/gi, "Glitzy-Glow"],
+ [/grass[- ]*knot/gi, "Grass-Knot"],
+ [/grass[- ]*pledge/gi, "Grass-Pledge"],
+ [/grass[- ]*whistle/gi, "Grass-Whistle"],
+ [/grassy[- ]*glide/gi, "Grassy-Glide"],
+ [/grassy[- ]*terrain/gi, "Grassy-Terrain"],
+ [/grav[- ]*apple/gi, "Grav-Apple"],
+ [/guard[- ]*split/gi, "Guard-Split"],
+ [/guard[- ]*swap/gi, "Guard-Swap"],
+ [/guardian[- ]*of[- ]*alola/gi, "Guardian-of-Alola"],
+ [/gunk[- ]*shot/gi, "Gunk-Shot"],
+ [/gyro[- ]*ball/gi, "Gyro-Ball"],
+ [/hammer[- ]*arm/gi, "Hammer-Arm"],
+ [/happy[- ]*hour/gi, "Happy-Hour"],
+ [/hard[- ]*press/gi, "Hard-Press"],
+ [/head[- ]*charge/gi, "Head-Charge"],
+ [/head[- ]*smash/gi, "Head-Smash"],
+ [/headlong[- ]*rush/gi, "Headlong-Rush"],
+ [/heal[- ]*bell/gi, "Heal-Bell"],
+ [/heal[- ]*block/gi, "Heal-Block"],
+ [/heal[- ]*order/gi, "Heal-Order"],
+ [/heal[- ]*pulse/gi, "Heal-Pulse"],
+ [/healing[- ]*wish/gi, "Healing-Wish"],
+ [/heart[- ]*stamp/gi, "Heart-Stamp"],
+ [/heart[- ]*swap/gi, "Heart-Swap"],
+ [/heat[- ]*crash/gi, "Heat-Crash"],
+ [/heat[- ]*wave/gi, "Heat-Wave"],
+ [/heavy[- ]*slam/gi, "Heavy-Slam"],
+ [/helping[- ]*hand/gi, "Helping-Hand"],
+ [/hidden[- ]*power/gi, "Hidden-Power"],
+ [/high[- ]*horsepower/gi, "High-Horsepower"],
+ [/high[- ]*jump[- ]*kick/gi, "High-Jump-Kick"],
+ [/hold[- ]*back/gi, "Hold-Back"],
+ [/hold[- ]*hands/gi, "Hold-Hands"],
+ [/hone[- ]*claws/gi, "Hone-Claws"],
+ [/horn[- ]*attack/gi, "Horn-Attack"],
+ [/horn[- ]*drill/gi, "Horn-Drill"],
+ [/horn[- ]*leech/gi, "Horn-Leech"],
+ [/hydro[- ]*cannon/gi, "Hydro-Cannon"],
+ [/hydro[- ]*pump/gi, "Hydro-Pump"],
+ [/hydro[- ]*steam/gi, "Hydro-Steam"],
+ [/hydro[- ]*vortex/gi, "Hydro-Vortex"],
+ [/hyper[- ]*beam/gi, "Hyper-Beam"],
+ [/hyper[- ]*drill/gi, "Hyper-Drill"],
+ [/hyper[- ]*fang/gi, "Hyper-Fang"],
+ [/hyper[- ]*voice/gi, "Hyper-Voice"],
+ [/hyperspace[- ]*fury/gi, "Hyperspace-Fury"],
+ [/hyperspace[- ]*hole/gi, "Hyperspace-Hole"],
+ [/ice[- ]*ball/gi, "Ice-Ball"],
+ [/ice[- ]*beam/gi, "Ice-Beam"],
+ [/ice[- ]*burn/gi, "Ice-Burn"],
+ [/ice[- ]*fang/gi, "Ice-Fang"],
+ [/ice[- ]*hammer/gi, "Ice-Hammer"],
+ [/ice[- ]*punch/gi, "Ice-Punch"],
+ [/ice[- ]*shard/gi, "Ice-Shard"],
+ [/ice[- ]*spinner/gi, "Ice-Spinner"],
+ [/icicle[- ]*crash/gi, "Icicle-Crash"],
+ [/icicle[- ]*spear/gi, "Icicle-Spear"],
+ [/icy[- ]*wind/gi, "Icy-Wind"],
+ [/infernal[- ]*parade/gi, "Infernal-Parade"],
+ [/inferno[- ]*overdrive/gi, "Inferno-Overdrive"],
+ [/ion[- ]*deluge/gi, "Ion-Deluge"],
+ [/iron[- ]*defense/gi, "Iron-Defense"],
+ [/iron[- ]*head/gi, "Iron-Head"],
+ [/iron[- ]*tail/gi, "Iron-Tail"],
+ [/ivy[- ]*cudgel/gi, "Ivy-Cudgel"],
+ [/jaw[- ]*lock/gi, "Jaw-Lock"],
+ [/jet[- ]*punch/gi, "Jet-Punch"],
+ [/jump[- ]*kick/gi, "Jump-Kick"],
+ [/jungle[- ]*healing/gi, "Jungle-Healing"],
+ [/karate[- ]*chop/gi, "Karate-Chop"],
+ [/king[- ]*shield/gi, "King-Shield"],
+ [/knock[- ]*off/gi, "Knock-Off"],
+ [/kowtow[- ]*cleave/gi, "Kowtow-Cleave"],
+ [/land[- ]*wrath/gi, "Land-Wrath"],
+ [/laser[- ]*focus/gi, "Laser-Focus"],
+ [/lash[- ]*out/gi, "Lash-Out"],
+ [/last[- ]*resort/gi, "Last-Resort"],
+ [/last[- ]*respects/gi, "Last-Respects"],
+ [/lava[- ]*plume/gi, "Lava-Plume"],
+ [/leaf[- ]*blade/gi, "Leaf-Blade"],
+ [/leaf[- ]*storm/gi, "Leaf-Storm"],
+ [/leaf[- ]*tornado/gi, "Leaf-Tornado"],
+ [/leech[- ]*life/gi, "Leech-Life"],
+ [/leech[- ]*seed/gi, "Leech-Seed"],
+ [/lets[- ]*snuggle[- ]*forever/gi, "Lets-Snuggle-Forever"],
+ [/life[- ]*dew/gi, "Life-Dew"],
+ [/light[- ]*of[- ]*ruin/gi, "Light-of-Ruin"],
+ [/light[- ]*screen/gi, "Light-Screen"],
+ [/light[- ]*that[- ]*burns[- ]*the[- ]*sky/gi, "Light-That-Burns-the-Sky"],
+ [/lock[- ]*on/gi, "Lock-On"],
+ [/lovely[- ]*kiss/gi, "Lovely-Kiss"],
+ [/low[- ]*kick/gi, "Low-Kick"],
+ [/low[- ]*sweep/gi, "Low-Sweep"],
+ [/lucky[- ]*chant/gi, "Lucky-Chant"],
+ [/lumina[- ]*crash/gi, "Lumina-Crash"],
+ [/lunar[- ]*blessing/gi, "Lunar-Blessing"],
+ [/lunar[- ]*dance/gi, "Lunar-Dance"],
+ [/luster[- ]*purge/gi, "Luster-Purge"],
+ [/mach[- ]*punch/gi, "Mach-Punch"],
+ [/magic[- ]*coat/gi, "Magic-Coat"],
+ [/magic[- ]*powder/gi, "Magic-Powder"],
+ [/magic[- ]*room/gi, "Magic-Room"],
+ [/magical[- ]*leaf/gi, "Magical-Leaf"],
+ [/magical[- ]*torque/gi, "Magical-Torque"],
+ [/magma[- ]*storm/gi, "Magma-Storm"],
+ [/magnet[- ]*bomb/gi, "Magnet-Bomb"],
+ [/magnet[- ]*rise/gi, "Magnet-Rise"],
+ [/magnetic[- ]*flux/gi, "Magnetic-Flux"],
+ [/make[- ]*it[- ]*rain/gi, "Make-It-Rain"],
+ [/malicious[- ]*moonsault/gi, "Malicious-Moonsault"],
+ [/malignant[- ]*chain/gi, "Malignant-Chain"],
+ [/mat[- ]*block/gi, "Mat-Block"],
+ [/matcha[- ]*gotcha/gi, "Matcha-Gotcha"],
+ [/max[- ]*airstream/gi, "Max-Airstream"],
+ [/max[- ]*darkness/gi, "Max-Darkness"],
+ [/max[- ]*flare/gi, "Max-Flare"],
+ [/max[- ]*flutterby/gi, "Max-Flutterby"],
+ [/max[- ]*geyser/gi, "Max-Geyser"],
+ [/max[- ]*guard/gi, "Max-Guard"],
+ [/max[- ]*hailstorm/gi, "Max-Hailstorm"],
+ [/max[- ]*knuckle/gi, "Max-Knuckle"],
+ [/max[- ]*lightning/gi, "Max-Lightning"],
+ [/max[- ]*mindstorm/gi, "Max-Mindstorm"],
+ [/max[- ]*ooze/gi, "Max-Ooze"],
+ [/max[- ]*overgrowth/gi, "Max-Overgrowth"],
+ [/max[- ]*phantasm/gi, "Max-Phantasm"],
+ [/max[- ]*quake/gi, "Max-Quake"],
+ [/max[- ]*rockfall/gi, "Max-Rockfall"],
+ [/max[- ]*starfall/gi, "Max-Starfall"],
+ [/max[- ]*steelspike/gi, "Max-Steelspike"],
+ [/max[- ]*strike/gi, "Max-Strike"],
+ [/max[- ]*wyrmwind/gi, "Max-Wyrmwind"],
+ [/me[- ]*first/gi, "Me-First"],
+ [/mean[- ]*look/gi, "Mean-Look"],
+ [/mega[- ]*drain/gi, "Mega-Drain"],
+ [/mega[- ]*kick/gi, "Mega-Kick"],
+ [/mega[- ]*punch/gi, "Mega-Punch"],
+ [/menacing[- ]*moonraze[- ]*maelstrom/gi, "Menacing-Moonraze-Maelstrom"],
+ [/metal[- ]*burst/gi, "Metal-Burst"],
+ [/metal[- ]*claw/gi, "Metal-Claw"],
+ [/metal[- ]*sound/gi, "Metal-Sound"],
+ [/meteor[- ]*assault/gi, "Meteor-Assault"],
+ [/meteor[- ]*beam/gi, "Meteor-Beam"],
+ [/meteor[- ]*mash/gi, "Meteor-Mash"],
+ [/mighty[- ]*cleave/gi, "Mighty-Cleave"],
+ [/milk[- ]*drink/gi, "Milk-Drink"],
+ [/mind[- ]*blown/gi, "Mind-Blown"],
+ [/mind[- ]*reader/gi, "Mind-Reader"],
+ [/miracle[- ]*eye/gi, "Miracle-Eye"],
+ [/mirror[- ]*coat/gi, "Mirror-Coat"],
+ [/mirror[- ]*move/gi, "Mirror-Move"],
+ [/mirror[- ]*shot/gi, "Mirror-Shot"],
+ [/mist[- ]*ball/gi, "Mist-Ball"],
+ [/misty[- ]*explosion/gi, "Misty-Explosion"],
+ [/misty[- ]*terrain/gi, "Misty-Terrain"],
+ [/moongeist[- ]*beam/gi, "Moongeist-Beam"],
+ [/morning[- ]*sun/gi, "Morning-Sun"],
+ [/mortal[- ]*spin/gi, "Mortal-Spin"],
+ [/mountain[- ]*gale/gi, "Mountain-Gale"],
+ [/mud[- ]*bomb/gi, "Mud-Bomb"],
+ [/mud[- ]*shot/gi, "Mud-Shot"],
+ [/mud[- ]*sport/gi, "Mud-Sport"],
+ [/mud[- ]*slap/gi, "Mud-Slap"],
+ [/muddy[- ]*water/gi, "Muddy-Water"],
+ [/multi[- ]*attack/gi, "Multi-Attack"],
+ [/mystical[- ]*fire/gi, "Mystical-Fire"],
+ [/mystical[- ]*power/gi, "Mystical-Power"],
+ [/nasty[- ]*plot/gi, "Nasty-Plot"],
+ [/natural[- ]*gift/gi, "Natural-Gift"],
+ [/nature[- ]*power/gi, "Nature-Power"],
+ [/nature[- ]*madness/gi, "Nature-Madness"],
+ [/needle[- ]*arm/gi, "Needle-Arm"],
+ [/never[- ]*ending[- ]*nightmare/gi, "Never-Ending-Nightmare"],
+ [/night[- ]*daze/gi, "Night-Daze"],
+ [/night[- ]*shade/gi, "Night-Shade"],
+ [/night[- ]*slash/gi, "Night-Slash"],
+ [/no[- ]*retreat/gi, "No-Retreat"],
+ [/noble[- ]*roar/gi, "Noble-Roar"],
+ [/noxious[- ]*torque/gi, "Noxious-Torque"],
+ [/oblivion[- ]*wing/gi, "Oblivion-Wing"],
+ [/oceanic[- ]*operetta/gi, "Oceanic-Operetta"],
+ [/odor[- ]*sleuth/gi, "Odor-Sleuth"],
+ [/ominous[- ]*wind/gi, "Ominous-Wind"],
+ [/order[- ]*up/gi, "Order-Up"],
+ [/origin[- ]*pulse/gi, "Origin-Pulse"],
+ [/pain[- ]*split/gi, "Pain-Split"],
+ [/parabolic[- ]*charge/gi, "Parabolic-Charge"],
+ [/parting[- ]*shot/gi, "Parting-Shot"],
+ [/pay[- ]*day/gi, "Pay-Day"],
+ [/perish[- ]*song/gi, "Perish-Song"],
+ [/petal[- ]*blizzard/gi, "Petal-Blizzard"],
+ [/petal[- ]*dance/gi, "Petal-Dance"],
+ [/phantom[- ]*force/gi, "Phantom-Force"],
+ [/photon[- ]*geyser/gi, "Photon-Geyser"],
+ [/pika[- ]*papow/gi, "Pika-Papow"],
+ [/pin[- ]*missile/gi, "Pin-Missile"],
+ [/plasma[- ]*fists/gi, "Plasma-Fists"],
+ [/play[- ]*nice/gi, "Play-Nice"],
+ [/play[- ]*rough/gi, "Play-Rough"],
+ [/poison[- ]*fang/gi, "Poison-Fang"],
+ [/poison[- ]*gas/gi, "Poison-Gas"],
+ [/poison[- ]*jab/gi, "Poison-Jab"],
+ [/poison[- ]*powder/gi, "Poison-Powder"],
+ [/poison[- ]*sting/gi, "Poison-Sting"],
+ [/poison[- ]*tail/gi, "Poison-Tail"],
+ [/pollen[- ]*puff/gi, "Pollen-Puff"],
+ [/population[- ]*bomb/gi, "Population-Bomb"],
+ [/powder[- ]*snow/gi, "Powder-Snow"],
+ [/power[- ]*gem/gi, "Power-Gem"],
+ [/power[- ]*shift/gi, "Power-Shift"],
+ [/power[- ]*split/gi, "Power-Split"],
+ [/power[- ]*swap/gi, "Power-Swap"],
+ [/power[- ]*trick/gi, "Power-Trick"],
+ [/power[- ]*trip/gi, "Power-Trip"],
+ [/power[- ]*whip/gi, "Power-Whip"],
+ [/power[- ]*up[- ]*punch/gi, "Power-Up-Punch"],
+ [/precipice[- ]*blades/gi, "Precipice-Blades"],
+ [/prismatic[- ]*laser/gi, "Prismatic-Laser"],
+ [/psych[- ]*up/gi, "Psych-Up"],
+ [/psychic[- ]*fangs/gi, "Psychic-Fangs"],
+ [/psychic[- ]*noise/gi, "Psychic-Noise"],
+ [/psychic[- ]*terrain/gi, "Psychic-Terrain"],
+ [/psycho[- ]*boost/gi, "Psycho-Boost"],
+ [/psycho[- ]*cut/gi, "Psycho-Cut"],
+ [/psycho[- ]*shift/gi, "Psycho-Shift"],
+ [/psyshield[- ]*bash/gi, "Psyshield-Bash"],
+ [/pulverizing[- ]*pancake/gi, "Pulverizing-Pancake"],
+ [/pyro[- ]*ball/gi, "Pyro-Ball"],
+ [/quick[- ]*attack/gi, "Quick-Attack"],
+ [/quick[- ]*guard/gi, "Quick-Guard"],
+ [/quiver[- ]*dance/gi, "Quiver-Dance"],
+ [/rage[- ]*fist/gi, "Rage-Fist"],
+ [/rage[- ]*powder/gi, "Rage-Powder"],
+ [/raging[- ]*bull/gi, "Raging-Bull"],
+ [/raging[- ]*fury/gi, "Raging-Fury"],
+ [/rain[- ]*dance/gi, "Rain-Dance"],
+ [/rapid[- ]*spin/gi, "Rapid-Spin"],
+ [/razor[- ]*leaf/gi, "Razor-Leaf"],
+ [/razor[- ]*shell/gi, "Razor-Shell"],
+ [/razor[- ]*wind/gi, "Razor-Wind"],
+ [/reflect[- ]*type/gi, "Reflect-Type"],
+ [/relic[- ]*song/gi, "Relic-Song"],
+ [/revelation[- ]*dance/gi, "Revelation-Dance"],
+ [/revival[- ]*blessing/gi, "Revival-Blessing"],
+ [/rising[- ]*voltage/gi, "Rising-Voltage"],
+ [/roar[- ]*of[- ]*time/gi, "Roar-of-Time"],
+ [/rock[- ]*blast/gi, "Rock-Blast"],
+ [/rock[- ]*climb/gi, "Rock-Climb"],
+ [/rock[- ]*polish/gi, "Rock-Polish"],
+ [/rock[- ]*slide/gi, "Rock-Slide"],
+ [/rock[- ]*smash/gi, "Rock-Smash"],
+ [/rock[- ]*throw/gi, "Rock-Throw"],
+ [/rock[- ]*tomb/gi, "Rock-Tomb"],
+ [/rock[- ]*wrecker/gi, "Rock-Wrecker"],
+ [/role[- ]*play/gi, "Role-Play"],
+ [/rolling[- ]*kick/gi, "Rolling-Kick"],
+ [/sacred[- ]*fire/gi, "Sacred-Fire"],
+ [/sacred[- ]*sword/gi, "Sacred-Sword"],
+ [/salt[- ]*cure/gi, "Salt-Cure"],
+ [/sand[- ]*attack/gi, "Sand-Attack"],
+ [/sand[- ]*tomb/gi, "Sand-Tomb"],
+ [/sandsear[- ]*storm/gi, "Sandsear-Storm"],
+ [/sappy[- ]*seed/gi, "Sappy-Seed"],
+ [/savage[- ]*spin[- ]*out/gi, "Savage-Spin-Out"],
+ [/scale[- ]*shot/gi, "Scale-Shot"],
+ [/scary[- ]*face/gi, "Scary-Face"],
+ [/scorching[- ]*sands/gi, "Scorching-Sands"],
+ [/searing[- ]*shot/gi, "Searing-Shot"],
+ [/searing[- ]*sunraze[- ]*smash/gi, "Searing-Sunraze-Smash"],
+ [/secret[- ]*power/gi, "Secret-Power"],
+ [/secret[- ]*sword/gi, "Secret-Sword"],
+ [/seed[- ]*bomb/gi, "Seed-Bomb"],
+ [/seed[- ]*flare/gi, "Seed-Flare"],
+ [/seismic[- ]*toss/gi, "Seismic-Toss"],
+ [/self[- ]*destruct/gi, "Self-Destruct"],
+ [/shadow[- ]*ball/gi, "Shadow-Ball"],
+ [/shadow[- ]*bone/gi, "Shadow-Bone"],
+ [/shadow[- ]*claw/gi, "Shadow-Claw"],
+ [/shadow[- ]*force/gi, "Shadow-Force"],
+ [/shadow[- ]*punch/gi, "Shadow-Punch"],
+ [/shadow[- ]*sneak/gi, "Shadow-Sneak"],
+ [/shattered[- ]*psyche/gi, "Shattered-Psyche"],
+ [/shed[- ]*tail/gi, "Shed-Tail"],
+ [/sheer[- ]*cold/gi, "Sheer-Cold"],
+ [/shell[- ]*side[- ]*arm/gi, "Shell-Side-Arm"],
+ [/shell[- ]*smash/gi, "Shell-Smash"],
+ [/shell[- ]*trap/gi, "Shell-Trap"],
+ [/shift[- ]*gear/gi, "Shift-Gear"],
+ [/shock[- ]*wave/gi, "Shock-Wave"],
+ [/shore[- ]*up/gi, "Shore-Up"],
+ [/signal[- ]*beam/gi, "Signal-Beam"],
+ [/silk[- ]*trap/gi, "Silk-Trap"],
+ [/silver[- ]*wind/gi, "Silver-Wind"],
+ [/simple[- ]*beam/gi, "Simple-Beam"],
+ [/sinister[- ]*arrow[- ]*raid/gi, "Sinister-Arrow-Raid"],
+ [/sizzly[- ]*slide/gi, "Sizzly-Slide"],
+ [/skill[- ]*swap/gi, "Skill-Swap"],
+ [/skitter[- ]*smack/gi, "Skitter-Smack"],
+ [/skull[- ]*bash/gi, "Skull-Bash"],
+ [/sky[- ]*attack/gi, "Sky-Attack"],
+ [/sky[- ]*drop/gi, "Sky-Drop"],
+ [/sky[- ]*uppercut/gi, "Sky-Uppercut"],
+ [/slack[- ]*off/gi, "Slack-Off"],
+ [/sleep[- ]*powder/gi, "Sleep-Powder"],
+ [/sleep[- ]*talk/gi, "Sleep-Talk"],
+ [/sludge[- ]*bomb/gi, "Sludge-Bomb"],
+ [/sludge[- ]*wave/gi, "Sludge-Wave"],
+ [/smack[- ]*down/gi, "Smack-Down"],
+ [/smart[- ]*strike/gi, "Smart-Strike"],
+ [/smelling[- ]*salts/gi, "Smelling-Salts"],
+ [/snap[- ]*trap/gi, "Snap-Trap"],
+ [/snipe[- ]*shot/gi, "Snipe-Shot"],
+ [/soft[- ]*boiled/gi, "Soft-Boiled"],
+ [/solar[- ]*beam/gi, "Solar-Beam"],
+ [/solar[- ]*blade/gi, "Solar-Blade"],
+ [/sonic[- ]*boom/gi, "Sonic-Boom"],
+ [/soul[- ]*stealing[- ]*7[- ]*star[- ]*strike/gi, "Soul-Stealing-7-Star-Strike"],
+ [/spacial[- ]*rend/gi, "Spacial-Rend"],
+ [/sparkling[- ]*aria/gi, "Sparkling-Aria"],
+ [/sparkly[- ]*swirl/gi, "Sparkly-Swirl"],
+ [/spectral[- ]*thief/gi, "Spectral-Thief"],
+ [/speed[- ]*swap/gi, "Speed-Swap"],
+ [/spicy[- ]*extract/gi, "Spicy-Extract"],
+ [/spider[- ]*web/gi, "Spider-Web"],
+ [/spike[- ]*cannon/gi, "Spike-Cannon"],
+ [/spiky[- ]*shield/gi, "Spiky-Shield"],
+ [/spin[- ]*out/gi, "Spin-Out"],
+ [/spirit[- ]*break/gi, "Spirit-Break"],
+ [/spirit[- ]*shackle/gi, "Spirit-Shackle"],
+ [/spit[- ]*up/gi, "Spit-Up"],
+ [/splintered[- ]*stormshards/gi, "Splintered-Stormshards"],
+ [/splishy[- ]*splash/gi, "Splishy-Splash"],
+ [/springtide[- ]*storm/gi, "Springtide-Storm"],
+ [/stealth[- ]*rock/gi, "Stealth-Rock"],
+ [/steam[- ]*eruption/gi, "Steam-Eruption"],
+ [/steel[- ]*beam/gi, "Steel-Beam"],
+ [/steel[- ]*roller/gi, "Steel-Roller"],
+ [/steel[- ]*wing/gi, "Steel-Wing"],
+ [/sticky[- ]*web/gi, "Sticky-Web"],
+ [/stoked[- ]*sparksurfer/gi, "Stoked-Sparksurfer"],
+ [/stomping[- ]*tantrum/gi, "Stomping-Tantrum"],
+ [/stone[- ]*axe/gi, "Stone-Axe"],
+ [/stone[- ]*edge/gi, "Stone-Edge"],
+ [/stored[- ]*power/gi, "Stored-Power"],
+ [/storm[- ]*throw/gi, "Storm-Throw"],
+ [/strange[- ]*steam/gi, "Strange-Steam"],
+ [/strength[- ]*sap/gi, "Strength-Sap"],
+ [/string[- ]*shot/gi, "String-Shot"],
+ [/struggle[- ]*bug/gi, "Struggle-Bug"],
+ [/stuff[- ]*cheeks/gi, "Stuff-Cheeks"],
+ [/stun[- ]*spore/gi, "Stun-Spore"],
+ [/subzero[- ]*slammer/gi, "Subzero-Slammer"],
+ [/sucker[- ]*punch/gi, "Sucker-Punch"],
+ [/sunny[- ]*day/gi, "Sunny-Day"],
+ [/sunsteel[- ]*strike/gi, "Sunsteel-Strike"],
+ [/super[- ]*fang/gi, "Super-Fang"],
+ [/supercell[- ]*slam/gi, "Supercell-Slam"],
+ [/supersonic[- ]*skystrike/gi, "Supersonic-Skystrike"],
+ [/surging[- ]*strikes/gi, "Surging-Strikes"],
+ [/sweet[- ]*kiss/gi, "Sweet-Kiss"],
+ [/sweet[- ]*scent/gi, "Sweet-Scent"],
+ [/swords[- ]*dance/gi, "Swords-Dance"],
+ [/syrup[- ]*bomb/gi, "Syrup-Bomb"],
+ [/tachyon[- ]*cutter/gi, "Tachyon-Cutter"],
+ [/tail[- ]*glow/gi, "Tail-Glow"],
+ [/tail[- ]*slap/gi, "Tail-Slap"],
+ [/tail[- ]*whip/gi, "Tail-Whip"],
+ [/take[- ]*down/gi, "Take-Down"],
+ [/take[- ]*heart/gi, "Take-Heart"],
+ [/tar[- ]*shot/gi, "Tar-Shot"],
+ [/tearful[- ]*look/gi, "Tearful-Look"],
+ [/techno[- ]*blast/gi, "Techno-Blast"],
+ [/tectonic[- ]*rage/gi, "Tectonic-Rage"],
+ [/teeter[- ]*dance/gi, "Teeter-Dance"],
+ [/temper[- ]*flare/gi, "Temper-Flare"],
+ [/tera[- ]*blast/gi, "Tera-Blast"],
+ [/tera[- ]*starstorm/gi, "Tera-Starstorm"],
+ [/terrain[- ]*pulse/gi, "Terrain-Pulse"],
+ [/thousand[- ]*arrows/gi, "Thousand-Arrows"],
+ [/thousand[- ]*waves/gi, "Thousand-Waves"],
+ [/throat[- ]*chop/gi, "Throat-Chop"],
+ [/thunder[- ]*cage/gi, "Thunder-Cage"],
+ [/thunder[- ]*fang/gi, "Thunder-Fang"],
+ [/thunder[- ]*punch/gi, "Thunder-Punch"],
+ [/thunder[- ]*shock/gi, "Thunder-Shock"],
+ [/thunder[- ]*wave/gi, "Thunder-Wave"],
+ [/thunderous[- ]*kick/gi, "Thunderous-Kick"],
+ [/tidy[- ]*up/gi, "Tidy-Up"],
+ [/topsy[- ]*turvy/gi, "Topsy-Turvy"],
+ [/torch[- ]*song/gi, "Torch-Song"],
+ [/toxic[- ]*spikes/gi, "Toxic-Spikes"],
+ [/toxic[- ]*thread/gi, "Toxic-Thread"],
+ [/tri[- ]*attack/gi, "Tri-Attack"],
+ [/trick[- ]*room/gi, "Trick-Room"],
+ [/trick[- ]*or[- ]*treat/gi, "Trick-or-Treat"],
+ [/triple[- ]*arrows/gi, "Triple-Arrows"],
+ [/triple[- ]*axel/gi, "Triple-Axel"],
+ [/triple[- ]*dive/gi, "Triple-Dive"],
+ [/triple[- ]*kick/gi, "Triple-Kick"],
+ [/trop[- ]*kick/gi, "Trop-Kick"],
+ [/trump[- ]*card/gi, "Trump-Card"],
+ [/twin[- ]*beam/gi, "Twin-Beam"],
+ [/twinkle[- ]*tackle/gi, "Twinkle-Tackle"],
+ [/u[- ]*turn/gi, "U-turn"],
+ [/upper[- ]*hand/gi, "Upper-Hand"],
+ [/v[- ]*create/gi, "V-create"],
+ [/vacuum[- ]*wave/gi, "Vacuum-Wave"],
+ [/veevee[- ]*volley/gi, "Veevee-Volley"],
+ [/venom[- ]*drench/gi, "Venom-Drench"],
+ [/victory[- ]*dance/gi, "Victory-Dance"],
+ [/vine[- ]*whip/gi, "Vine-Whip"],
+ [/vise[- ]*grip/gi, "Vise-Grip"],
+ [/vital[- ]*throw/gi, "Vital-Throw"],
+ [/volt[- ]*switch/gi, "Volt-Switch"],
+ [/volt[- ]*tackle/gi, "Volt-Tackle"],
+ [/wake[- ]*up[- ]*slap/gi, "Wake-Up-Slap"],
+ [/water[- ]*gun/gi, "Water-Gun"],
+ [/water[- ]*pledge/gi, "Water-Pledge"],
+ [/water[- ]*pulse/gi, "Water-Pulse"],
+ [/water[- ]*shuriken/gi, "Water-Shuriken"],
+ [/water[- ]*sport/gi, "Water-Sport"],
+ [/water[- ]*spout/gi, "Water-Spout"],
+ [/wave[- ]*crash/gi, "Wave-Crash"],
+ [/weather[- ]*ball/gi, "Weather-Ball"],
+ [/wicked[- ]*blow/gi, "Wicked-Blow"],
+ [/wicked[- ]*torque/gi, "Wicked-Torque"],
+ [/wide[- ]*guard/gi, "Wide-Guard"],
+ [/wild[- ]*charge/gi, "Wild-Charge"],
+ [/wildbolt[- ]*storm/gi, "Wildbolt-Storm"],
+ [/will[- ]*o[- ]*wisp/gi, "Will-O-Wisp"],
+ [/wing[- ]*attack/gi, "Wing-Attack"],
+ [/wonder[- ]*room/gi, "Wonder-Room"],
+ [/wood[- ]*hammer/gi, "Wood-Hammer"],
+ [/work[- ]*up/gi, "Work-Up"],
+ [/worry[- ]*seed/gi, "Worry-Seed"],
+ [/wring[- ]*out/gi, "Wring-Out"],
+ [/x[- ]*scissor/gi, "X-Scissor"],
+ [/zap[- ]*cannon/gi, "Zap-Cannon"],
+ [/zen[- ]*headbutt/gi, "Zen-Headbutt"],
+ [/zing[- ]*zap/gi, "Zing-Zap"],
+ [/zippy[- ]*zap/gi, "Zippy-Zap"]
+];
+text = ((typeof text === "string") && text) || "\n";
+text = text.replaceAll("é", "e");
+for (const [pattern, replacement] of replacements) {
+ text = text.replace(pattern, replacement);
+}
+/*
+Auto-Cards
+Made by LewdLeah on May 21, 2025
+This AI Dungeon script automatically creates and updates plot-relevant story cards while you play
+General-purpose usefulness and compatibility with other scenarios/scripts were my design priorities
+Auto-Cards is fully open-source, please copy for use within your own projects! ❤️
+*/
+function AutoCards(inHook, inText, inStop) {
+ "use strict";
+ /*
+ Default Auto-Cards settings
+ Feel free to change these settings to customize your scenario's default gameplay experience
+ The default values for your scenario are specified below:
+ */
+ // Is Auto-Cards already enabled when the adventure begins?
+ const DEFAULT_DO_AC = true
+ // (true or false)
+
+ // Pin the "Configure Auto-Cards" story card at the top of the player's story cards list?
+ const DEFAULT_PIN_CONFIGURE_CARD = true
+ // (true or false)
+
+ // Minimum number of turns in between automatic card generation events?
+ const DEFAULT_CARD_CREATION_COOLDOWN = 22
+ // (0 to 9999)
+
+ // Use a bulleted list format for newly generated card entries?
+ const DEFAULT_USE_BULLETED_LIST_MODE = true
+ // (true or false)
+
+ // Maximum allowed length for newly generated story card entries?
+ const DEFAULT_GENERATED_ENTRY_LIMIT = 750
+ // (200 to 2000)
+
+ // Do newly generated cards have memory updates enabled by default?
+ const DEFAULT_NEW_CARDS_DO_MEMORY_UPDATES = true
+ // (true or false)
+
+ // Default character limit before the card's memory bank is summarized?
+ const DEFAULT_NEW_CARDS_MEMORY_LIMIT = 2750
+ // (1750 to 9900)
+
+ // Approximately how much shorter should recently compressed memories be? (ratio = 10 * old / new)
+ const DEFAULT_MEMORY_COMPRESSION_RATIO = 25
+ // (20 to 1250)
+
+ // Ignore all-caps during title candidate detection?
+ const DEFAULT_IGNORE_ALL_CAPS_TITLES = true
+ // (true or false)
+
+ // Should player input actions (Do/Say/Story) be considered during title detection?
+ const DEFAULT_DETECT_TITLES_FROM_INPUTS = false
+ // (true or false)
+
+ // How many (minimum) actions in the past does Auto-Cards look for named entities?
+ const DEFAULT_MINIMUM_LOOK_BACK_DISTANCE = 5
+ // (2 to 88)
+
+ // Is Live Script Interface v2 enabled?
+ const DEFAULT_DO_LSI_V2 = false
+ // (true or false)
+
+ // Should the "Debug Data" story card be visible?
+ const DEFAULT_SHOW_DEBUG_DATA = false
+ // (true or false)
+
+ // AI prompt used to generate new story card entries?
+ const DEFAULT_CARD_GENERATION_PROMPT = prose(
+ "-----",
+ "",
+ "",
+ "# Stop the story and ignore previous instructions. You are a Pokemon expert. Write a brief and coherent informational entry for %{title} following these instructions:",
+ "- Write only third-person pure prose information about %{title} using complete sentences with correct punctuation",
+ "- Avoid short-term temporary details or appearances, instead focus on plot-significant information",
+ "- Prioritize story-relevant details about %{title} first to ensure seamless integration with later fanfiction",
+ "- Adhere to the Pokemon canon at all times",
+ "- Create new information based on the context and story direction",
+ "- Mention %{title} in every sentence",
+ "- Use semicolons if needed",
+ "- Avoid meta media information; this entry is for fictional writing",
+ "- Add additional details about %{title} beneath incomplete entries",
+ "- Be concise and grounded",
+ "- Imitate the story's writing style and infer the reader's preferences",
+ "",
+ "Continue the entry for %{title} below while avoiding repetition:",
+ "%{entry}"
+ ); // (mimic this multi-line "text" format)
+
+ // AI prompt used to summarize a given story card's memory bank?
+ const DEFAULT_CARD_MEMORY_COMPRESSION_PROMPT = prose(
+ "-----",
+ "",
+ "",
+ "# Stop the story and ignore previous instructions. You are a Pokemon expert. Summarize and condense the given paragraph into a narrow and focused memory passage while following these guidelines:",
+ "- Ensure the passage retains the core meaning and most essential details",
+ "- Use the third-person perspective",
+ "- Prioritize information-density, accuracy, completeness, and Pokemon canon-compliance",
+ "- Avoid meta media information",
+ "- Remain brief and concise",
+ "- Write firmly in the past tense",
+ "- The paragraph below pertains to old events from far earlier in the story",
+ "- Integrate %{title} naturally within the memory; however, only write about the events as they occurred",
+ "- Only reference information present inside the paragraph itself, be specific",
+ "",
+ "Write a summarized old memory passage for %{title} based only on the following paragraph:",
+ "\"\"\"",
+ "%{memory}",
+ "\"\"\"",
+ "Summarize below:"
+ ); // (mimic this multi-line "text" format)
+
+ // Titles banned from future card generation attempts?
+ const DEFAULT_BANNED_TITLES_LIST = (
+ "North, East, South, West, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, January, February, March, April, May, June, July, August, September, October, November, December, Normal, Fire, Water, Electric, Grass, Ice, Fighting, Poison, Ground, Flying, Psychic, Bug, Rock, Ghost, Dragon, Dark, Steel, Fairy, Stellar, Pokemon, Poke, Pokeball, Pokedex, Trainer, Gym, Champion, Battle, Box, Team, Nature, Ability, Move, Form, Forme, Mega, Dynamax, Gigantmax, Terastallization, Tera, Hidden"
+ ); // (mimic this comma-list "text" format)
+
+ // Default story card "type" used by Auto-Cards? (does not matter)
+ const DEFAULT_CARD_TYPE = "class"
+ // ("text")
+
+ // Should titles mentioned in the "opening" plot component be banned from future card generation by default?
+ const DEFAULT_BAN_TITLES_FROM_OPENING = true
+ // (true or false)
+
+ //—————————————————————————————————————————————————————————————————————————————————
+
+ /*
+ Useful API functions for coders (otherwise ignore)
+ Here's what each one does in plain terms:
+
+ AutoCards().API.postponeEvents();
+ Pauses Auto-Cards activity for n many turns
+
+ AutoCards().API.emergencyHalt();
+ Emergency stop or resume
+
+ AutoCards().API.suppressMessages();
+ Hides Auto-Cards toasts by preventing assignment to state.message
+
+ AutoCards().API.debugLog();
+ Writes to the debug log card
+
+ AutoCards().API.toggle();
+ Turns Auto-Cards on/off
+
+ AutoCards().API.generateCard();
+ Initiates AI generation of the requested card
+
+ AutoCards().API.redoCard();
+ Regenerates an existing card
+
+ AutoCards().API.setCardAsAuto();
+ Flags or unflags a card as automatic
+
+ AutoCards().API.addCardMemory();
+ Adds a memory to a specific card
+
+ AutoCards().API.eraseAllAutoCards();
+ Deletes all auto-cards
+
+ AutoCards().API.getUsedTitles();
+ Lists all current card titles
+
+ AutoCards().API.getBannedTitles();
+ Shows your current banned titles list
+
+ AutoCards().API.setBannedTitles();
+ Replaces the banned titles list with a new list
+
+ AutoCards().API.buildCard();
+ Makes a new card from scratch, using exact parameters
+
+ AutoCards().API.getCard();
+ Finds cards that match a filter
+
+ AutoCards().API.eraseCard();
+ Deletes cards matching a filter
+ */
+
+ /*** Postpones internal Auto-Cards events for a specified number of turns
+ *
+ * @function
+ * @param {number} turns A non-negative integer representing the number of turns to postpone events
+ * @returns {Object} An object containing cooldown values affected by the postponement
+ * @throws {Error} If turns is not a non-negative integer
+ */
+ // AutoCards().API.postponeEvents();
+
+ /*** Sets or clears the emergency halt flag to pause Auto-Cards operations
+ *
+ * @function
+ * @param {boolean} shouldHalt A boolean value indicating whether to engage (true) or disengage (false) emergency halt
+ * @returns {boolean} The value that was set
+ * @throws {Error} If called from within isolateLSIv2 scope or with a non-boolean argument
+ */
+ // AutoCards().API.emergencyHalt();
+
+ /*** Enables or disables state.message assignments from Auto-Cards
+ *
+ * @function
+ * @param {boolean} shouldSuppress If true, suppresses all Auto-Cards messages; false enables them
+ * @returns {Array} The current pending messages after setting suppression
+ * @throws {Error} If shouldSuppress is not a boolean
+ */
+ // AutoCards().API.suppressMessages();
+
+ /*** Logs debug information to the "Debug Log card console
+ *
+ * @function
+ * @param {...any} args Arguments to log for debugging purposes
+ * @returns {any} The story card object reference
+ */
+ // AutoCards().API.debugLog();
+
+ /*** Toggles Auto-Cards behavior or sets it directly
+ *
+ * @function
+ * @param {boolean|null|undefined} toggleType If undefined, toggles the current state. If boolean or null, sets the state accordingly
+ * @returns {boolean|null|undefined} The state that was set or inferred
+ * @throws {Error} If toggleType is not a boolean, null, or undefined
+ */
+ // AutoCards().API.toggle();
+
+ /*** Generates a new card using optional prompt details or a card request object
+ *
+ * This function supports two usage modes:
+ *
+ * 1. Object Mode:
+ * Pass a single object containing card request parameters. The only mandatory property is "title"
+ * All other properties are optional and customize the card generation
+ *
+ * Example:
+ * AutoCards().API.generateCard({
+ * type: "character", // The category or type of the card; defaults to "class" if omitted
+ * title: "Leah the Lewd", // The card's title (required)
+ * keysStart: "Lewd,Leah", // Optional trigger keywords associated with the card
+ * entryStart: "You are a woman named Leah.", // Existing content to prepend to the AI-generated entry
+ * entryPrompt: "", // Global prompt guiding AI content generation
+ * entryPromptDetails: "Focus on Leah's works of artifice and ingenuity", // Additional prompt info
+ * entryLimit: 750, // Target character length for the AI-generated entry
+ * description: "Player character!", // Freeform notes
+ * memoryStart: "Leah purchased a new sweater.", // Existing memory content
+ * memoryUpdates: true, // Whether the card's memory bank will update on its own
+ * memoryLimit: 2750 // Preferred memory bank size before summarization/compression
+ * });
+ *
+ * 2. String Mode:
+ * Pass a string as the title and optionally two additional strings to specify prompt details
+ * This mode is shorthand for quick card generation without an explicit card request object
+ *
+ * Examples:
+ * AutoCards().API.generateCard("Leah the Lewd");
+ * AutoCards().API.generateCard("Leah the Lewd", "Focus on Leah's works of artifice and ingenuity");
+ * AutoCards().API.generateCard(
+ * "Leah the Lewd",
+ * "Focus on Leah's works of artifice and ingenuity",
+ * "You are a woman named Leah."
+ * );
+ *
+ * @function
+ * @param {Object|string} request Either a fully specified card request object or a string title
+ * @param {string} [extra1] Optional detailed prompt text when using string mode
+ * @param {string} [extra2] Optional entry start text when using string mode
+ * @returns {boolean} Returns true if the generation attempt succeeded, false otherwise
+ * @throws {Error} Throws if called with invalid arguments or missing a required title property
+ */
+ // AutoCards().API.generateCard();
+
+ /*** Regenerates a card by title or object reference, optionally preserving or modifying its input info
+ *
+ * @function
+ * @param {Object|string} request Either a fully specified card request object or a string title for the card to be regenerated
+ * @param {boolean} [useOldInfo=true] If true, preserves old info in the new generation; false omits it
+ * @param {string} [newInfo=""] Additional info to append to the generation prompt
+ * @returns {boolean} True if regeneration succeeded; false otherwise
+ * @throws {Error} If the request format is invalid, or if the second or third parameters are the wrong types
+ */
+ // AutoCards().API.redoCard();
+
+ /*** Flags or unflags a card as an auto-card, controlling its automatic generation behavior
+ *
+ * @function
+ * @param {Object|string} targetCard The card object or title to mark/unmark as an auto-card
+ * @param {boolean} [setOrUnset=true] If true, marks the card as an auto-card; false removes the flag
+ * @returns {boolean} True if the operation succeeded; false if the card was invalid or already matched the target state
+ * @throws {Error} If the arguments are invalid types
+ */
+ // AutoCards().API.setCardAsAuto();
+
+ /*** Appends a memory to a story card's memory bank
+ *
+ * @function
+ * @param {Object|string} targetCard A card object reference or title string
+ * @param {string} newMemory The memory text to add
+ * @returns {boolean} True if the memory was added; false if it was empty, already present, or the card was not found
+ * @throws {Error} If the inputs are not a string or valid card object reference
+ */
+ // AutoCards().API.addCardMemory();
+
+ /*** Removes all previously generated auto-cards and resets various states
+ *
+ * @function
+ * @returns {number} The number of cards that were removed
+ */
+ // AutoCards().API.eraseAllAutoCards();
+
+ /*** Retrieves an array of titles currently used by the adventure's story cards
+ *
+ * @function
+ * @returns {Array} An array of strings representing used titles
+ */
+ // AutoCards().API.getUsedTitles();
+
+ /*** Retrieves an array of banned titles
+ *
+ * @function
+ * @returns {Array} An array of banned title strings
+ */
+ // AutoCards().API.getBannedTitles();
+
+ /*** Sets the banned titles array, replacing any previously banned titles
+ *
+ * @function
+ * @param {string|Array} titles A comma-separated string or array of strings representing titles to ban
+ * @returns {Object} An object containing oldBans and newBans arrays
+ * @throws {Error} If the input is neither a string nor an array of strings
+ */
+ // AutoCards().API.setBannedTitles();
+
+ /*** Creates a new story card with the specified parameters
+ *
+ * @function
+ * @param {string|Object} title Card title string or full card template object containing all fields
+ * @param {string} [entry] The entry text for the card
+ * @param {string} [type] The card type (e.g., "character", "location")
+ * @param {string} [keys] The keys (triggers) for the card
+ * @param {string} [description] The notes or memory bank of the card
+ * @param {number} [insertionIndex] Optional index to insert the card at a specific position within storyCards
+ * @returns {Object|null} The created card object reference, or null if creation failed
+ */
+ // AutoCards().API.buildCard();
+
+ /*** Finds and returns story cards satisfying a user-defined condition
+ * Example:
+ * const leahCard = AutoCards().API.getCard(card => (card.title === "Leah"));
+ *
+ * @function
+ * @param {Function} predicate A function which takes a card and returns true if it matches
+ * @param {boolean} [getAll=false] If true, returns all matching cards; otherwise returns the first match
+ * @returns {Object|Array