Spaces:
Running
Running
File size: 29,177 Bytes
5c2ed06 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 |
Simulator protocol
==================
Pokémon Showdown's simulator protocol is implemented as a newline-and-pipe-delimited text stream. For details on how to read to or write from the text stream, see [sim/SIMULATOR.md](./SIMULATOR.md).
Receiving messages
------------------
### Battle initialization
The beginning of a battle will look something like this:
|player|p1|Anonycat|60|1200
|player|p2|Anonybird|113|1300
|teamsize|p1|4
|teamsize|p2|5
|gametype|doubles
|gen|7
|tier|[Gen 7] Doubles Ubers
|rule|Species Clause: Limit one of each Pokémon
|rule|OHKO Clause: OHKO moves are banned
|rule|Moody Clause: Moody is banned
|rule|Evasion Abilities Clause: Evasion abilities are banned
|rule|Evasion Moves Clause: Evasion moves are banned
|rule|Endless Battle Clause: Forcing endless battles is banned
|rule|HP Percentage Mod: HP is shown in percentages
|clearpoke
|poke|p1|Pikachu, L59, F|item
|poke|p1|Kecleon, M|item
|poke|p1|Jynx, F|item
|poke|p1|Mewtwo|item
|poke|p2|Hoopa-Unbound|
|poke|p2|Smeargle, L1, F|item
|poke|p2|Forretress, L31, F|
|poke|p2|Groudon, L60|item
|poke|p2|Feebas, L1, M|
|teampreview
|
|start
`|player|PLAYER|USERNAME|AVATAR|RATING`
> Player details.
>
> - `PLAYER` is `p1` or `p2`
> - `PLAYER` may also be `p3` or `p4` in 4 player battles
> - `USERNAME` is the username
> - `AVATAR` is the player's avatar identifier (usually a number, but other
> values can be used for custom avatars)
> - `RATING` is the player's Elo rating in the format they're playing. This will only be displayed in rated battles and when the player is first introduced otherwise it's blank
`|teamsize|PLAYER|NUMBER`
> - `PLAYER` is `p1`, `p2`, `p3`, or `p4`
> - `NUMBER` is the number of Pokémon your opponent starts with. In games
> without Team Preview, you don't know which Pokémon your opponent has, but
> you at least know how many there are.
`|gametype|GAMETYPE`
> - `GAMETYPE` is `singles`, `doubles`, `triples`, `multi`, or `freeforall`.
`|gen|GENNUM`
> Generation number, from 1 to 9. Stadium counts as its respective gens;
> Let's Go counts as 7, and modded formats count as whatever gen they were
> based on.
`|tier|FORMATNAME`
> The name of the format being played.
`|rated`
> Will be sent if the game will affect the player's ladder rating (Elo
> score).
`|rated|MESSAGE`
> Will be sent if the game is official in some other way, such as being
> a tournament game. Does not actually mean the game is rated.
`|rule|RULE: DESCRIPTION`
> Will appear multiple times, one for each
|clearpoke
|poke|PLAYER|DETAILS|ITEM
|poke|PLAYER|DETAILS|ITEM
...
|teampreview
> These messages appear if you're playing a format that uses team previews.
`|clearpoke`
> Marks the start of Team Preview
`|poke|PLAYER|DETAILS|ITEM`
> Declares a Pokémon for Team Preview.
>
> - `PLAYER` is the player ID (see `|player|`)
> - `DETAILS` describes the pokemon (see "Identifying Pokémon" below)
> - `ITEM` will be `item` if the Pokémon is holding an item, or blank if it isn't.
>
> Note that forme and shininess are hidden on this, unlike on the `|switch|`
> details message.
`|start`
> Indicates that the game has started.
### Battle progress
`|`
> Clears the message-bar, and add a spacer to the battle history. This is
> usually done automatically by detecting the message-type, but can also
> be forced to happen with this.
`|request|REQUEST`
> Gives a JSON object containing a request for a choice (to move or
> switch). To assist in your decision, `REQUEST.active` has information
> about your active Pokémon, and `REQUEST.side` has information about your
> your team as a whole. `REQUEST.rqid` is an optional request ID (see
> "Sending decisions" for details).
`|inactive|MESSAGE` or `|inactiveoff|MESSAGE`
> A message related to the battle timer has been sent. The official client
> displays these messages in red.
>
> `inactive` means that the timer is on at the time the message was sent,
> while `inactiveoff` means that the timer is off.
`|upkeep`
> Signals the upkeep phase of the turn where the number of turns left for field
> conditions are updated.
`|turn|NUMBER`
> It is now turn `NUMBER`.
`|win|USER`
> `USER` has won the battle.
`|tie`
> The battle has ended in a tie.
`|t:|TIMESTAMP`
> The current UNIX timestamp (the number of seconds since 1970) - useful for determining
> when events occured in real time.
### Identifying Pokémon
Pokémon will be identified by a Pokémon ID (generally labeled `POKEMON` in
this document), and, in certain cases, also a details string (generally
labeled `DETAILS`).
A Pokémon ID is in the form `POSITION: NAME`.
- `POSITION` is the spot that the Pokémon is in: it consists of the `PLAYER`
of the player (see `|player|`), followed by a position letter (`a` in
singles).
An inactive Pokémon will not have a position letter.
In doubles and triples battles, `a` will refer to the leftmost Pokémon
from its trainer's perspective (so the leftmost on your team, and the
rightmost on your opponent's team, so `p1a` faces `p2c`, etc).
So the layout looks like:
Doubles, player 1's perspective:
p2b p2a
p1a p1b
Doubles, player 2's perspective:
p1b p1a
p2a p2b
In multi and free-for-all battles, players are grouped by parity. That is,
`p1` and `p3` share a side, as do `p2` and `p4`. The position letters still
follow the same conventions as in double battles, so the layout looks like:
Multi, player 1's perspective
p4b p2a
p1a p3b
- `NAME` is the nickname of the Pokémon (or the species name, if no nickname
is given).
For example: `p1a: Sparky` could be a Charizard named Sparky.
`p1: Dragonite` could be an inactive Dragonite being healed by Heal Bell.
- `DETAILS` is a comma-separated list of all information about a Pokemon
visible on the battle screen: species, shininess, gender, and level. So it
starts with `SPECIES`, adding `, L##` if it's not level 100, `M` if it's male,
`, F` if it's female, `, shiny` if it's shiny.
In Gen 9, `, tera:TYPE` will be appended if the Pokemon has Terastallized.
So, for instance, `Deoxys-Speed` is a level 100 non-shiny genderless
Deoxys (Speed forme). `Sawsbuck, L50, F, shiny` is a level 50 shiny female
Sawsbuck (Spring form).
In Team Preview, `DETAILS` will not include information not available in
Team Preview (in particular, level and shininess will be left off), and
for Pokémon whose forme isn't revealed in Team Preview, it will be given as
`-*`. So, for instance, an Arceus in Team Preview would have the details
string `Arceus-*`, no matter what kind of Arceus it is.
For most commands, you can just use the position information in the
Pokémon ID to identify the Pokémon. Only a few commands actually change the
Pokémon in that position (`|switch|` switching, `|replace|` illusion dropping,
`|drag|` phazing, and `|detailschange|` permanent forme changes), and these
all specify `DETAILS` for you to perform updates with.
### Major actions
In battle, most Pokémon actions come in the form `|ACTION|POKEMON|DETAILS`
followed by a few messages detailing what happens after the action occurs.
Battle actions (especially minor actions) often come with tags such as
`|[from] EFFECT|[of] SOURCE`. `EFFECT` will be an effect (move, ability,
item, status, etc), and `SOURCE` will be a Pokémon. These can affect the
message or animation displayed, but do not affect anything else. Other
tags include `|[still]` (suppress animation) and `|[silent]` (suppress
message).
`|move|POKEMON|MOVE|TARGET`
> The specified Pokémon has used move `MOVE` at `TARGET`. If a move has
> multiple targets or no target, `TARGET` should be ignored. If a move
> targets a side, `TARGET` will be a (possibly fainted) Pokémon on that
> side.
>
> If `|[miss]` is present, the move missed.
>
> If `|[still]` is present, the move should not animate
>
> `|[anim] MOVE2` tells the client to use the animation of `MOVE2` instead
> of `MOVE` when displaying to the client.
`|switch|POKEMON|DETAILS|HP STATUS` or `|drag|POKEMON|DETAILS|HP STATUS`
> A Pokémon identified by `POKEMON` has switched in (if there was an old
> Pokémon in that position, it is switched out).
>
> For the DETAILS format, see "Identifying Pokémon" above.
>
> `POKEMON|DETAILS` represents all the information that can be used to tell
> Pokémon apart. If two pokemon have the same `POKEMON|DETAILS` (which will
> never happen in any format with Species Clause), you usually won't be able
> to tell if the same pokemon switched in or a different pokemon switched
> in.
>
> The switched Pokémon has HP `HP`, and status `STATUS`. `HP` is specified as
> a fraction; if it is your own Pokémon then it will be `CURRENT/MAX`, if not,
> it will be `/100` if HP Percentage Mod is in effect and `/48` otherwise.
> `STATUS` can be left blank, or it can be `slp`, `par`, etc.
>
> `switch` means it was intentional, while `drag` means it was unintentional
> (forced by Whirlwind, Roar, etc).
`|detailschange|POKEMON|DETAILS|HP STATUS` or
`|-formechange|POKEMON|SPECIES|HP STATUS`
> The specified Pokémon has changed formes (via Mega Evolution, ability, etc.)
> to `SPECIES`. If the forme change is permanent (Mega Evolution or a
> Shaymin-Sky that is frozen), then `detailschange` will appear; otherwise,
> the client will send `-formechange`.
>
> Syntax is the same as `|switch|` above.
`|replace|POKEMON|DETAILS|HP STATUS`
> Illusion has ended for the specified Pokémon. Syntax is the same as
> `|switch|` above, but remember that everything you thought you knew about the
> previous Pokémon is now wrong.
>
> `POKEMON` will be the NEW Pokémon ID - i.e. it will have the nickname of the
> Zoroark (or other Illusion user).
`|swap|POKEMON|POSITION`
> Moves already active `POKEMON` to active field `POSITION` where the
> leftmost position is 0 and each position to the right counts up by 1.
`|cant|POKEMON|REASON` or `|cant|POKEMON|REASON|MOVE`
> The Pokémon `POKEMON` could not perform a move because of the indicated
> `REASON` (such as paralysis, Disable, etc). Sometimes, the move it was
> trying to use is given.
`|faint|POKEMON`
> The Pokémon `POKEMON` has fainted.
### Minor actions
Minor actions are less important than major actions. In the official client,
they're usually displayed in small font if they have a message. Pretty much
anything that happens in a battle other than a switch or the fact that a move
was used is a minor action. So yes, the effects of a move such as damage or
stat boosts are minor actions.
`|-fail|POKEMON|ACTION`
> The specified `ACTION` has failed against the `POKEMON` targetted. The
> `ACTION` in question should be a move that fails due to its own mechanics.
> Moves (or effect activations) that fail because they're blocked by another
> effect should use `-block` instead.
`|-block|POKEMON|EFFECT|MOVE|ATTACKER`
> An effect targeted at `POKEMON` was blocked by `EFFECT`. This may optionally
> specify that the effect was a `MOVE` from `ATTACKER`. `[of]SOURCE` will note
> the owner of the `EFFECT`, in the case that it's not `EFFECT` (for instance,
> an ally with Aroma Veil.)
`|-notarget|POKEMON`
> A move has failed due to their being no target Pokémon `POKEMON`. `POKEMON` is
> not present in Generation 1. This action is specific to Generations 1-4 as in
> later Generations a failed move will display using `-fail`.
`|-miss|SOURCE|TARGET`
> The move used by the `SOURCE` Pokémon missed (maybe absent) the `TARGET`
> Pokémon.
`|-damage|POKEMON|HP STATUS`
> The specified Pokémon `POKEMON` has taken damage, and is now at
> `HP STATUS` (see `|switch|` for details).
>
> If `HP` is 0, `STATUS` should be ignored. The current behavior is for
> `STATUS` to be `fnt`, but this may change and should not be relied upon.
`|-heal|POKEMON|HP STATUS`
> Same as `-damage`, but the Pokémon has healed damage instead.
`|-sethp|POKEMON|HP`
> The specified Pokémon `POKEMON` now has `HP` hit points.
`|-status|POKEMON|STATUS`
> The Pokémon `POKEMON` has been inflicted with `STATUS`.
`|-curestatus|POKEMON|STATUS`
> The Pokémon `POKEMON` has recovered from `STATUS`.
`|-cureteam|POKEMON`
> The Pokémon `POKEMON` has used a move that cures its team of status effects,
> like Heal Bell.
`|-boost|POKEMON|STAT|AMOUNT`
> The specified Pokémon `POKEMON` has gained `AMOUNT` in `STAT`, using the
> standard rules for Pokémon stat changes in-battle. `STAT` is a standard
> three-letter abbreviation fot the stat in question, so Speed will be `spe`,
> Special Defense will be `spd`, etc.
`|-unboost|POKEMON|STAT|AMOUNT`
> Same as `-boost`, but for negative stat changes instead.
`|-setboost|POKEMON|STAT|AMOUNT`
> Same as `-boost` and `-unboost`, but `STAT` is *set* to `AMOUNT` instead of
> boosted *by* `AMOUNT`. (For example: Anger Point, Belly Drum)
`|-swapboost|SOURCE|TARGET|STATS`
> Swaps the boosts from `STATS` between the `SOURCE` Pokémon and `TARGET`
> Pokémon. `STATS` takes the form of a comma-separated list of `STAT`
> abbreviations as described in `-boost`. (For example: Guard Swap, Heart
> Swap).
`|-invertboost|POKEMON`
> Invert the boosts of the target Pokémon `POKEMON`. (For example: Topsy-Turvy).
`|-clearboost|POKEMON`
> Clears all of the boosts of the target `POKEMON`. (For example: Clear Smog).
`|-clearallboost`
> Clears all boosts from all Pokémon on both sides. (For example: Haze).
`|-clearpositiveboost|TARGET|POKEMON|EFFECT`
> Clear the positive boosts from the `TARGET` Pokémon due to an `EFFECT` of the
> `POKEMON` Pokémon. (For example: 'move: Spectral Thief').
`|-clearnegativeboost|POKEMON`
> Clear the negative boosts from the target Pokémon `POKEMON`. (For example:
> usually as the result of a `[zeffect]`).
`|-copyboost|SOURCE|TARGET`
> Copy the boosts from `SOURCE` Pokémon to `TARGET` Pokémon (For example: Psych
> Up).
`|-weather|WEATHER`
> Indicates the weather that is currently in effect. If `|[upkeep]` is present,
> it means that `WEATHER` was active previously and is still in effect that
> turn. Otherwise, it means that the weather has changed due to a move or ability,
> or has expired, in which case `WEATHER` will be `none`.
`|-fieldstart|CONDITION`
> The field condition `CONDITION` has started. Field conditions are all effects that
> affect the entire field and aren't a weather. (For example: Trick Room, Grassy
> Terrain)
`|-fieldend|CONDITION`
> Indicates that the field condition `CONDITION` has ended.
`|-sidestart|SIDE|CONDITION`
> A side condition `CONDITION` has started on `SIDE`. Side conditions are all
> effects that affect one side of the field. (For example: Tailwind, Stealth
> Rock, Reflect)
`|-sideend|SIDE|CONDITION`
> Indicates that the side condition `CONDITION` ended for the given `SIDE`.
`|-swapsideconditions`
> Swaps side conditions between sides. Used for Court Change.
`|-start|POKEMON|EFFECT`
> A [*volatile* status](https://bulbapedia.bulbagarden.net/wiki/Status_condition#Volatile_status)
> has been inflicted on the `POKEMON` Pokémon by `EFFECT`. (For example:
> confusion, Taunt, Substitute).
`|-end|POKEMON|EFFECT`
> The volatile status from `EFFECT` inflicted on the `POKEMON` Pokémon has
> ended.
`|-crit|POKEMON`
> A move has dealt a critical hit against the `POKEMON`.
`|-supereffective|POKEMON`
> A move was super effective against the `POKEMON`.
`|-resisted|POKEMON`
> A move was not very effective against the `POKEMON`.
`|-immune|POKEMON`
> The `POKEMON` was immune to a move.
`|-item|POKEMON|ITEM|[from]EFFECT`
> The `ITEM` held by the `POKEMON` has been changed or revealed due to a move or
> ability `EFFECT`.
`|-item|POKEMON|ITEM`
> `POKEMON` has just switched in, and its item `ITEM` is being announced to have a
> long-term effect (will not use `[from]`). Air Balloon is the only current user of
> this.
`|-enditem|POKEMON|ITEM|[from]EFFECT`
> The `ITEM` held by `POKEMON` has been destroyed by a move or ability (like
> Knock Off), and it now holds no item.
>
> This will be silent `[silent]` if the item's ownership was changed (with a move
> or ability like Thief or Trick), even if the move or ability would result in
> a Pokémon without an item.
`|-enditem|POKEMON|ITEM`
> `POKEMON`'s `ITEM` has destroyed itself (consumed Berries, Air Balloon). If a
> berry is consumed, it also has an additional modifier `|[eat]` to indicate
> that it was consumed.
>
> Sticky Barb does not announce itself with this or any other message when it
> changes hands.
`|-ability|POKEMON|ABILITY|[from]EFFECT`
> The `ABILITY` of the `POKEMON` has been changed due to a move/ability `EFFECT`.
>
> Note that Skill Swap does not send this message despite it changing abilities,
> because it does not reveal abilities when used between allies in a Double or
> Triple Battle.
`|-ability|POKEMON|ABILITY`
> `POKEMON` has just switched-in, and its ability `ABILITY` is being announced
> to have a long-term effect (will not use `[from]`).
>
> Effects that start at switch-in include Mold Breaker and Neutralizing Gas. It
> does not include abilities that activate once and don't have any long-term
> effects, like Intimidate (Intimidate should use `-activate`).
`|-endability|POKEMON`
> The `POKEMON` has had its ability suppressed by Gastro Acid.
`|-transform|POKEMON|SPECIES`
> The Pokémon `POKEMON` has transformed into `SPECIES` by the move Transform or
> the ability Imposter.
`|-mega|POKEMON|MEGASTONE`
> The Pokémon `POKEMON` used `MEGASTONE` to Mega Evolve.
`|-primal|POKEMON`
> The Pokémon `POKEMON` has reverted to its primal forme.
`|-burst|POKEMON|SPECIES|ITEM`
> The Pokémon `POKEMON` has used `ITEM` to Ultra Burst into `SPECIES`.
`|-zpower|POKEMON`
> The Pokémon `POKEMON` has used the z-move version of its move.
`|-zbroken|POKEMON`
> A z-move has broken through protect and hit the `POKEMON`.
`|-activate|EFFECT`
> A miscellaneous effect has activated. This is triggered whenever an effect could
> not be better described by one of the other minor messages: for example, healing
> abilities like Water Absorb simply use `-heal`.
>
> Items usually activate with `-end`, although items with two messages, like Berries
> ("POKEMON ate the Leppa Berry! POKEMON restored PP...!"), will send the "ate"
> message as `-eat`, and the "restored" message as `-activate`.
`|-hint|MESSAGE`
> Displays a message in parentheses to the client. Hint messages appear to explain and
> clarify why certain actions, such as Fake Out and Mat Block failing, have occurred,
> when there would normally be no in-game messages.
`|-center`
> Appears in Triple Battles when only one Pokémon remains on each side, to indicate
> that the Pokémon have been automatically centered.
`|-message|MESSAGE`
> Displays a miscellaneous message to the client. These messages are primarily used
> for messages from game mods that aren't supported by the client, like rule clauses
> such as Sleep Clause, or other metagames with custom messages for specific scenarios.
`|-combine`
> A move has been combined with another (For example: Fire Pledge).
`|-waiting|SOURCE|TARGET`
> The `SOURCE` Pokémon has used a move and is waiting for the `TARGET` Pokémon
> (For example: Fire Pledge).
`|-prepare|ATTACKER|MOVE`
> The `ATTACKER` Pokémon is preparing to use a charge `MOVE` on an unknown target.
> (For example: Dig, Fly).
`|-prepare|ATTACKER|MOVE|DEFENDER`
> The `ATTACKER` Pokémon is preparing to use a charge `MOVE` on the `DEFENDER`.
> (For example: Sky Drop).
`|-mustrecharge|POKEMON`
> The Pokémon `POKEMON` must spend the turn recharging from a previous move.
`|-nothing`
> **DEPRECATED**: A move did absolutely nothing. (For example: Splash). In the
> future this will be of the form `|-activate|POKEMON|move: Splash`.
`|-hitcount|POKEMON|NUM`
> A multi-hit move hit the `POKEMON` `NUM` times.
`|-singlemove|POKEMON|MOVE`
> The Pokémon `POKEMON` used move `MOVE` which causes a temporary effect lasting
> the duration of the move. (For example: Grudge, Destiny Bond).
`|-singleturn|POKEMON|MOVE`
> The Pokémon `POKEMON` used move `MOVE` which causes a temporary effect lasting
> the duration of the turn. (For example: Protect, Focus Punch, Roost).
Sending decisions
-----------------
Using the Pokémon Showdown client, you can specify decisions with
`/choose CHOICE`, or, for move and switch decisions, just `/CHOICE` works as
well.
Using the simulator API, you would write `>p1 CHOICE` or `>p2 CHOICE` into the
battle stream.
### Possible choices
You can see the syntax in action by looking at the JavaScript console when
playing a Pokémon Showdown battle in a browser such as Chrome.
As an overview:
- `switch Pikachu`, `switch pikachu`, or `switch 2` are all valid `CHOICE`
strings to switch to a Pikachu in slot 2.
- `move Focus Blast`, `move focusblast`, or `move 4` are all valid `CHOICE`
strings to use Focus Blast, your active Pokemon's 4th move.
In Doubles, decisions are delimited by `,`. If you have a Manectric and a
Cresselia, `move Thunderbolt 1 mega, move Helping Hand -1` will make the
Manectric mega evolve and use Thunderbolt at the opponent in slot 1, while
Cresselia will use Helping Hand at Manectric.
To be exact, `CHOICE` is one of:
- `team TEAMSPEC`, during Team Preview, where `TEAMSPEC` is a list of pokemon
slots.
- For instance, `team 213456` will swap the first two Pokemon and keep all
other pokemon in order.
- `TEAMSPEC` does not have to be all pokemon: `team 5231` might be a choice
in VGC.
- `TEAMSPEC` does not need separators unless you have over 10 Pokémon, but
in custom games, separate slots with `,`. For instance:
`team 2, 1, 3, 4, 5, 6, 7, 8, 9, 10`
- `default`, to auto-choose a decision. This will be the first possible legal
choice. This is what's used in VGC if you run out of Move Time.
- `undo`, to cancel a previously-made choice. This can only be done if the
another player needs to make a choice and hasn't done so yet (or if you are
calling `side.choose()` directly, which doesn't auto-continue when both
players have made a choice).
- `POKEMONCHOICE` in Singles
- `POKEMONCHOICE, POKEMONCHOICE` in Doubles
`POKEMONCHOICE` is one of:
- `default`, to auto-choose a decision
- `pass`, to skip a slot in Doubles/Triples that doesn't need a decision (can
be left off, but can be useful for readability, to mean "the pokemon in this
slot is fainted and won't be making a move")
- `move MOVESPEC`, to make a move
- `move MOVESPEC mega`, to mega-evolve and make a move
- `move MOVESPEC zmove`, to use a z-move version of a move
- `move MOVESPEC max`, to Dynamax/Gigantamax and make a move
- `switch SWITCHSPEC`, to make a switch
`MOVESPEC` is:
- `MOVESLOTSPEC` or `MOVESLOTSPEC TARGETSPEC`
- `MOVESLOTSPEC` is a move name (capitalization/spacing-insensitive) or
1-based move slot number
- `TARGETSPEC` is a 1-based target slot number. Add a `-` in front of it to
refer to allies, and a `+` to refer to foes. Remember that slots go in
opposite directions, like this:
Triples Doubles
+3 +2 +1 +2 +1
-1 -2 -3 -1 -2
(Slot numbers are unnecessary in Singles: you can never choose a target in
Singles.)
`SWITCHSPEC` is:
- a Pokémon nickname/species or 1-based slot number
- Note that if you have multiple Pokémon with the same nickname/species, using the
nickname/species will select the first unfainted one. If you want another Pokémon,
you'll need to specify it by slot number.
Once a choice has been set for all players who need to make a choice, the
battle will continue.
If an invalid decision is sent (trying to switch when you're trapped by
Mean Look or something), you will receive a message starting with:
`|error|[Invalid choice] MESSAGE`
This will tell you to send a different decision. If your previous choice
revealed additional information (For example: a move disabled by Imprison
or a trapping effect), the error will be followed with a `|request|` command
to base your decision off of:
`|error|[Unavailable choice] MESSAGE`
`|request|REQUEST`
### Choice requests
The protocol message to tell you that it's time for you to make a decision
is:
`|request|REQUEST`
> Gives a JSON object containing a request for a choice (to move or
> switch). To assist in your decision, `REQUEST.active` has information
> about your active Pokémon, and `REQUEST.side` has information about your
> your team as a whole.
>
> If you're using the simulator through a Pokémon Showdown server,
> `REQUEST.rqid` is an optional request ID. It will not exist if you're
> using the simulator directly through `import sim` or
> `./pokemon-showdown simulate-battle`.
>
> When sending decisions to a Pokémon Showdown server with `/choose`, you
> can add `|RQID` at the end. `RQID` is `REQUEST.rqid`, and it identifies
> which request the decision was intended for, making sure "Undo" doesn't
> cause the next decision to be sent for the wrong turn.
Example request object:
```
{
"active": [
{
"moves": [
{
"move": "Light Screen",
"id": "lightscreen",
"pp": 48,
"maxpp": 48,
"target": "allySide",
"disabled": false
},
{
"move": "U-turn",
"id": "uturn",
"pp": 32,
"maxpp": 32,
"target": "normal",
"disabled": false
},
{
"move": "Knock Off",
"id": "knockoff",
"pp": 32,
"maxpp": 32,
"target": "normal",
"disabled": false
},
{
"move": "Roost",
"id": "roost",
"pp": 16,
"maxpp": 16,
"target": "self",
"disabled": false
}
]
}
],
"side": {
"name": "Zarel",
"id": "p2",
"pokemon": [
{
"ident": "p2: Ledian",
"details": "Ledian, L83, M",
"condition": "227/227",
"active": true,
"stats": {
"atk": 106,
"def": 131,
"spa": 139,
"spd": 230,
"spe": 189
},
"moves": [
"lightscreen",
"uturn",
"knockoff",
"roost"
],
"baseAbility": "swarm",
"item": "leftovers",
"pokeball": "pokeball",
"ability": "swarm"
},
{
"ident": "p2: Pyukumuku",
"details": "Pyukumuku, L83, F",
"condition": "227/227",
"active": false,
"stats": {
"atk": 104,
"def": 263,
"spa": 97,
"spd": 263,
"spe": 56
},
"moves": [
"recover",
"counter",
"lightscreen",
"reflect"
],
"baseAbility": "innardsout",
"item": "lightclay",
"pokeball": "pokeball",
"ability": "innardsout"
},
{
"ident": "p2: Heatmor",
"details": "Heatmor, L83, F",
"condition": "277/277",
"active": false,
"stats": {
"atk": 209,
"def": 157,
"spa": 222,
"spd": 157,
"spe": 156
},
"moves": [
"fireblast",
"suckerpunch",
"gigadrain",
"focusblast"
],
"baseAbility": "flashfire",
"item": "lifeorb",
"pokeball": "pokeball",
"ability": "flashfire"
},
{
"ident": "p2: Reuniclus",
"details": "Reuniclus, L78, M",
"condition": "300/300",
"active": false,
"stats": {
"atk": 106,
"def": 162,
"spa": 240,
"spd": 178,
"spe": 92
},
"moves": [
"shadowball",
"recover",
"calmmind",
"psyshock"
],
"baseAbility": "magicguard",
"item": "lifeorb",
"pokeball": "pokeball",
"ability": "magicguard"
},
{
"ident": "p2: Minun",
"details": "Minun, L83, F",
"condition": "235/235",
"active": false,
"stats": {
"atk": 71,
"def": 131,
"spa": 172,
"spd": 189,
"spe": 205
},
"moves": [
"hiddenpowerice60",
"nastyplot",
"substitute",
"thunderbolt"
],
"baseAbility": "voltabsorb",
"item": "leftovers",
"pokeball": "pokeball",
"ability": "voltabsorb"
},
{
"ident": "p2: Gligar",
"details": "Gligar, L79, M",
"condition": "232/232",
"active": false,
"stats": {
"atk": 164,
"def": 211,
"spa": 101,
"spd": 148,
"spe": 180
},
"moves": [
"toxic",
"stealthrock",
"roost",
"earthquake"
],
"baseAbility": "hypercutter",
"item": "eviolite",
"pokeball": "pokeball",
"ability": "hypercutter"
}
]
},
"rqid": 3
}
```
|