summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Martinek <andrewrmartinek@gmail.com>2020-12-20 17:31:00 -0500
committerAndrew Martinek <andrewrmartinek@gmail.com>2020-12-20 17:31:00 -0500
commite8ec8efa902ea56cf17bdcd908067247d13ee28d (patch)
treeba708ba6b0e0125148de6de2c48713d0b64d70de /src
parent5930b53dd28705197ebfc1a905ea3175552ba39a (diff)
parent9fab715759ddf919b0c4bb9a01095c4c225fcac0 (diff)
Merge in master (and update some macros)
Diffstat (limited to 'src')
-rw-r--r--src/audio/music1.asm116
-rw-r--r--src/audio/music2.asm116
-rw-r--r--src/audio/sfx.asm18
-rw-r--r--src/constants/animation_constants.asm2
-rw-r--r--src/constants/card_constants.asm2
-rw-r--r--src/constants/card_data_constants.asm3
-rw-r--r--src/constants/charmaps.asm13
-rw-r--r--src/constants/deck_ai_constants.asm19
-rw-r--r--src/constants/deck_constants.asm6
-rw-r--r--src/constants/duel_constants.asm174
-rw-r--r--src/constants/hardware_constants.asm2
-rw-r--r--src/data/booster_packs.asm6
-rw-r--r--src/data/cards.asm16
-rw-r--r--src/data/effect_commands.asm1113
-rw-r--r--src/data/map_headers.asm66
-rw-r--r--src/data/map_objects.asm1
-rw-r--r--src/data/move_animations.asm4
-rw-r--r--src/engine/bank01.asm249
-rw-r--r--src/engine/bank02.asm31
-rwxr-xr-x[-rw-r--r--]src/engine/bank03.asm123
-rw-r--r--src/engine/bank04.asm83
-rw-r--r--src/engine/bank05.asm62
-rw-r--r--src/engine/bank06.asm72
-rw-r--r--src/engine/bank07.asm54
-rw-r--r--src/engine/bank08.asm86
-rw-r--r--src/engine/bank1c.asm6
-rw-r--r--src/engine/booster_packs.asm18
-rw-r--r--src/engine/deck_ai/decks/legendary_articuno.asm2
-rw-r--r--src/engine/deck_ai/decks/legendary_dragonite.asm2
-rw-r--r--src/engine/deck_ai/decks/sams_practice.asm4
-rw-r--r--src/engine/effect_functions.asm11038
-rw-r--r--src/engine/home.asm401
-rw-r--r--src/gfx.asm536
-rw-r--r--src/gfx/booster_packs/colosseum2.png (renamed from src/gfx/booster_packs/colosseum2.t10.png)bin1033 -> 1033 bytes
-rw-r--r--src/gfx/booster_packs/evolution2.png (renamed from src/gfx/booster_packs/evolution2.t10.png)bin1068 -> 1068 bytes
-rw-r--r--src/gfx/booster_packs/laboratory2.png (renamed from src/gfx/booster_packs/laboratory2.t10.png)bin1068 -> 1068 bytes
-rw-r--r--src/gfx/booster_packs/mystery2.png (renamed from src/gfx/booster_packs/mystery2.t10.png)bin1136 -> 1136 bytes
-rw-r--r--src/gfx/cardpop/cardpop1.png (renamed from src/gfx/cardpop/cardpop1.t3.png)bin1452 -> 1452 bytes
-rw-r--r--src/gfx/cardpop/cardpop2.png (renamed from src/gfx/cardpop/cardpop2.t3.png)bin803 -> 803 bytes
-rw-r--r--src/gfx/cardpop/cardpop3.png (renamed from src/gfx/cardpop/cardpop3.t3.png)bin784 -> 784 bytes
-rw-r--r--src/gfx/cards/abra.8x6.pngbin745 -> 0 bytes
-rw-r--r--src/gfx/cards/abra.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/abra.pngbin0 -> 791 bytes
-rw-r--r--src/gfx/cards/aerodactyl.8x6.pngbin759 -> 0 bytes
-rw-r--r--src/gfx/cards/aerodactyl.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/aerodactyl.pngbin0 -> 810 bytes
-rw-r--r--src/gfx/cards/alakazam.8x6.pngbin755 -> 0 bytes
-rw-r--r--src/gfx/cards/alakazam.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/alakazam.pngbin0 -> 806 bytes
-rw-r--r--src/gfx/cards/arbok.8x6.pngbin831 -> 0 bytes
-rw-r--r--src/gfx/cards/arbok.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/arbok.pngbin0 -> 875 bytes
-rw-r--r--src/gfx/cards/arcanine1.8x6.pngbin760 -> 0 bytes
-rw-r--r--src/gfx/cards/arcanine1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/arcanine1.pngbin0 -> 807 bytes
-rw-r--r--src/gfx/cards/arcanine2.8x6.pngbin772 -> 0 bytes
-rw-r--r--src/gfx/cards/arcanine2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/arcanine2.pngbin0 -> 809 bytes
-rw-r--r--src/gfx/cards/articuno1.8x6.pngbin793 -> 0 bytes
-rw-r--r--src/gfx/cards/articuno1.pal1
-rw-r--r--src/gfx/cards/articuno1.pngbin0 -> 847 bytes
-rw-r--r--src/gfx/cards/articuno2.8x6.pngbin795 -> 0 bytes
-rw-r--r--src/gfx/cards/articuno2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/articuno2.pngbin0 -> 831 bytes
-rw-r--r--src/gfx/cards/beedrill.8x6.pngbin825 -> 0 bytes
-rw-r--r--src/gfx/cards/beedrill.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/beedrill.pngbin0 -> 869 bytes
-rw-r--r--src/gfx/cards/bellsprout.8x6.pngbin775 -> 0 bytes
-rw-r--r--src/gfx/cards/bellsprout.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/bellsprout.pngbin0 -> 817 bytes
-rw-r--r--src/gfx/cards/bill.8x6.pngbin519 -> 0 bytes
-rw-r--r--src/gfx/cards/bill.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/bill.pngbin0 -> 556 bytes
-rw-r--r--src/gfx/cards/blastoise.8x6.pngbin737 -> 0 bytes
-rw-r--r--src/gfx/cards/blastoise.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/blastoise.pngbin0 -> 782 bytes
-rw-r--r--src/gfx/cards/bulbasaur.8x6.pngbin830 -> 0 bytes
-rw-r--r--src/gfx/cards/bulbasaur.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/bulbasaur.pngbin0 -> 866 bytes
-rw-r--r--src/gfx/cards/butterfree.8x6.pngbin808 -> 0 bytes
-rw-r--r--src/gfx/cards/butterfree.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/butterfree.pngbin0 -> 844 bytes
-rw-r--r--src/gfx/cards/caterpie.8x6.pngbin801 -> 0 bytes
-rw-r--r--src/gfx/cards/caterpie.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/caterpie.pngbin0 -> 841 bytes
-rw-r--r--src/gfx/cards/chansey.8x6.pngbin764 -> 0 bytes
-rw-r--r--src/gfx/cards/chansey.pal1
-rw-r--r--src/gfx/cards/chansey.pngbin0 -> 793 bytes
-rw-r--r--src/gfx/cards/charizard.8x6.pngbin801 -> 0 bytes
-rw-r--r--src/gfx/cards/charizard.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/charizard.pngbin0 -> 843 bytes
-rw-r--r--src/gfx/cards/charmander.8x6.pngbin744 -> 0 bytes
-rw-r--r--src/gfx/cards/charmander.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/charmander.pngbin0 -> 780 bytes
-rw-r--r--src/gfx/cards/charmeleon.8x6.pngbin745 -> 0 bytes
-rw-r--r--src/gfx/cards/charmeleon.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/charmeleon.pngbin0 -> 785 bytes
-rw-r--r--src/gfx/cards/clefable.8x6.pngbin702 -> 0 bytes
-rw-r--r--src/gfx/cards/clefable.pal1
-rw-r--r--src/gfx/cards/clefable.pngbin0 -> 756 bytes
-rw-r--r--src/gfx/cards/clefairy.8x6.pngbin683 -> 0 bytes
-rw-r--r--src/gfx/cards/clefairy.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/clefairy.pngbin0 -> 728 bytes
-rw-r--r--src/gfx/cards/clefairydoll.8x6.pngbin631 -> 0 bytes
-rw-r--r--src/gfx/cards/clefairydoll.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/clefairydoll.pngbin0 -> 669 bytes
-rw-r--r--src/gfx/cards/cloyster.8x6.pngbin752 -> 0 bytes
-rw-r--r--src/gfx/cards/cloyster.pal1
-rw-r--r--src/gfx/cards/cloyster.pngbin0 -> 795 bytes
-rw-r--r--src/gfx/cards/computersearch.8x6.pngbin731 -> 0 bytes
-rw-r--r--src/gfx/cards/computersearch.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/computersearch.pngbin0 -> 774 bytes
-rw-r--r--src/gfx/cards/cubone.8x6.pngbin675 -> 0 bytes
-rw-r--r--src/gfx/cards/cubone.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/cubone.pngbin0 -> 715 bytes
-rw-r--r--src/gfx/cards/defender.8x6.pngbin478 -> 0 bytes
-rw-r--r--src/gfx/cards/defender.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/defender.pngbin0 -> 526 bytes
-rw-r--r--src/gfx/cards/devolutionspray.8x6.pngbin481 -> 0 bytes
-rw-r--r--src/gfx/cards/devolutionspray.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/devolutionspray.pngbin0 -> 522 bytes
-rw-r--r--src/gfx/cards/dewgong.8x6.pngbin775 -> 0 bytes
-rw-r--r--src/gfx/cards/dewgong.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/dewgong.pngbin0 -> 814 bytes
-rw-r--r--src/gfx/cards/diglett.8x6.pngbin662 -> 0 bytes
-rw-r--r--src/gfx/cards/diglett.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/diglett.pngbin0 -> 707 bytes
-rw-r--r--src/gfx/cards/ditto.8x6.pngbin593 -> 0 bytes
-rw-r--r--src/gfx/cards/ditto.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/ditto.pngbin0 -> 630 bytes
-rw-r--r--src/gfx/cards/dodrio.8x6.pngbin662 -> 0 bytes
-rw-r--r--src/gfx/cards/dodrio.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/dodrio.pngbin0 -> 701 bytes
-rw-r--r--src/gfx/cards/doduo.8x6.pngbin618 -> 0 bytes
-rw-r--r--src/gfx/cards/doduo.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/doduo.pngbin0 -> 656 bytes
-rw-r--r--src/gfx/cards/doublecolorlessenergy.8x6.pngbin538 -> 0 bytes
-rw-r--r--src/gfx/cards/doublecolorlessenergy.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/doublecolorlessenergy.pngbin0 -> 576 bytes
-rw-r--r--src/gfx/cards/dragonair.8x6.pngbin755 -> 0 bytes
-rw-r--r--src/gfx/cards/dragonair.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/dragonair.pngbin0 -> 796 bytes
-rw-r--r--src/gfx/cards/dragonite1.8x6.pngbin659 -> 0 bytes
-rw-r--r--src/gfx/cards/dragonite1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/dragonite1.pngbin0 -> 701 bytes
-rw-r--r--src/gfx/cards/dragonite2.8x6.pngbin775 -> 0 bytes
-rw-r--r--src/gfx/cards/dragonite2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/dragonite2.pngbin0 -> 827 bytes
-rw-r--r--src/gfx/cards/dratini.8x6.pngbin730 -> 0 bytes
-rw-r--r--src/gfx/cards/dratini.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/dratini.pngbin0 -> 768 bytes
-rw-r--r--src/gfx/cards/drowzee.8x6.pngbin732 -> 0 bytes
-rw-r--r--src/gfx/cards/drowzee.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/drowzee.pngbin0 -> 776 bytes
-rw-r--r--src/gfx/cards/dugtrio.8x6.pngbin657 -> 0 bytes
-rw-r--r--src/gfx/cards/dugtrio.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/dugtrio.pngbin0 -> 695 bytes
-rw-r--r--src/gfx/cards/eevee.8x6.pngbin784 -> 0 bytes
-rw-r--r--src/gfx/cards/eevee.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/eevee.pngbin0 -> 819 bytes
-rw-r--r--src/gfx/cards/ekans.8x6.pngbin770 -> 0 bytes
-rw-r--r--src/gfx/cards/ekans.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/ekans.pngbin0 -> 811 bytes
-rw-r--r--src/gfx/cards/electabuzz1.8x6.pngbin704 -> 0 bytes
-rw-r--r--src/gfx/cards/electabuzz1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/electabuzz1.pngbin0 -> 759 bytes
-rw-r--r--src/gfx/cards/electabuzz2.8x6.pngbin616 -> 0 bytes
-rw-r--r--src/gfx/cards/electabuzz2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/electabuzz2.pngbin0 -> 667 bytes
-rw-r--r--src/gfx/cards/electrode1.8x6.pngbin732 -> 0 bytes
-rw-r--r--src/gfx/cards/electrode1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/electrode1.pngbin0 -> 770 bytes
-rw-r--r--src/gfx/cards/electrode2.8x6.pngbin688 -> 0 bytes
-rw-r--r--src/gfx/cards/electrode2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/electrode2.pngbin0 -> 731 bytes
-rw-r--r--src/gfx/cards/energyremoval.8x6.pngbin651 -> 0 bytes
-rw-r--r--src/gfx/cards/energyremoval.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/energyremoval.pngbin0 -> 693 bytes
-rw-r--r--src/gfx/cards/energyretrieval.8x6.pngbin479 -> 0 bytes
-rw-r--r--src/gfx/cards/energyretrieval.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/energyretrieval.pngbin0 -> 519 bytes
-rw-r--r--src/gfx/cards/energysearch.8x6.pngbin596 -> 0 bytes
-rw-r--r--src/gfx/cards/energysearch.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/energysearch.pngbin0 -> 635 bytes
-rw-r--r--src/gfx/cards/exeggcute.8x6.pngbin756 -> 0 bytes
-rw-r--r--src/gfx/cards/exeggcute.pal1
-rw-r--r--src/gfx/cards/exeggcute.pngbin0 -> 795 bytes
-rw-r--r--src/gfx/cards/exeggutor.8x6.pngbin783 -> 0 bytes
-rw-r--r--src/gfx/cards/exeggutor.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/exeggutor.pngbin0 -> 825 bytes
-rw-r--r--src/gfx/cards/farfetchd.8x6.pngbin718 -> 0 bytes
-rw-r--r--src/gfx/cards/farfetchd.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/farfetchd.pngbin0 -> 760 bytes
-rw-r--r--src/gfx/cards/fearow.8x6.pngbin725 -> 0 bytes
-rw-r--r--src/gfx/cards/fearow.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/fearow.pngbin0 -> 763 bytes
-rw-r--r--src/gfx/cards/fightingenergy.8x6.pngbin514 -> 0 bytes
-rw-r--r--src/gfx/cards/fightingenergy.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/fightingenergy.pngbin0 -> 554 bytes
-rw-r--r--src/gfx/cards/fireenergy.8x6.pngbin558 -> 0 bytes
-rw-r--r--src/gfx/cards/fireenergy.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/fireenergy.pngbin0 -> 599 bytes
-rw-r--r--src/gfx/cards/flareon1.8x6.pngbin844 -> 0 bytes
-rw-r--r--src/gfx/cards/flareon1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/flareon1.pngbin0 -> 880 bytes
-rw-r--r--src/gfx/cards/flareon2.8x6.pngbin808 -> 0 bytes
-rw-r--r--src/gfx/cards/flareon2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/flareon2.pngbin0 -> 853 bytes
-rw-r--r--src/gfx/cards/flyingpikachu.8x6.pngbin633 -> 0 bytes
-rw-r--r--src/gfx/cards/flyingpikachu.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/flyingpikachu.pngbin0 -> 672 bytes
-rw-r--r--src/gfx/cards/fullheal.8x6.pngbin561 -> 0 bytes
-rw-r--r--src/gfx/cards/fullheal.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/fullheal.pngbin0 -> 612 bytes
-rw-r--r--src/gfx/cards/gambler.8x6.pngbin449 -> 0 bytes
-rw-r--r--src/gfx/cards/gambler.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/gambler.pngbin0 -> 498 bytes
-rw-r--r--src/gfx/cards/gastly1.8x6.pngbin612 -> 0 bytes
-rw-r--r--src/gfx/cards/gastly1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/gastly1.pngbin0 -> 666 bytes
-rw-r--r--src/gfx/cards/gastly2.8x6.pngbin744 -> 0 bytes
-rw-r--r--src/gfx/cards/gastly2.pal1
-rw-r--r--src/gfx/cards/gastly2.pngbin0 -> 781 bytes
-rw-r--r--src/gfx/cards/gengar.8x6.pngbin664 -> 0 bytes
-rw-r--r--src/gfx/cards/gengar.pal1
-rw-r--r--src/gfx/cards/gengar.pngbin0 -> 713 bytes
-rw-r--r--src/gfx/cards/geodude.8x6.pngbin810 -> 0 bytes
-rw-r--r--src/gfx/cards/geodude.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/geodude.pngbin0 -> 851 bytes
-rw-r--r--src/gfx/cards/gloom.8x6.pngbin622 -> 0 bytes
-rw-r--r--src/gfx/cards/gloom.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/gloom.pngbin0 -> 664 bytes
-rw-r--r--src/gfx/cards/golbat.8x6.pngbin795 -> 0 bytes
-rw-r--r--src/gfx/cards/golbat.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/golbat.pngbin0 -> 840 bytes
-rw-r--r--src/gfx/cards/goldeen.8x6.pngbin766 -> 0 bytes
-rw-r--r--src/gfx/cards/goldeen.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/goldeen.pngbin0 -> 796 bytes
-rw-r--r--src/gfx/cards/golduck.8x6.pngbin816 -> 0 bytes
-rw-r--r--src/gfx/cards/golduck.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/golduck.pngbin0 -> 856 bytes
-rw-r--r--src/gfx/cards/golem.8x6.pngbin809 -> 0 bytes
-rw-r--r--src/gfx/cards/golem.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/golem.pngbin0 -> 849 bytes
-rw-r--r--src/gfx/cards/grassenergy.8x6.pngbin542 -> 0 bytes
-rw-r--r--src/gfx/cards/grassenergy.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/grassenergy.pngbin0 -> 597 bytes
-rw-r--r--src/gfx/cards/graveler.8x6.pngbin836 -> 0 bytes
-rw-r--r--src/gfx/cards/graveler.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/graveler.pngbin0 -> 869 bytes
-rw-r--r--src/gfx/cards/grimer.8x6.pngbin698 -> 0 bytes
-rw-r--r--src/gfx/cards/grimer.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/grimer.pngbin0 -> 742 bytes
-rw-r--r--src/gfx/cards/growlithe.8x6.pngbin673 -> 0 bytes
-rw-r--r--src/gfx/cards/growlithe.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/growlithe.pngbin0 -> 706 bytes
-rw-r--r--src/gfx/cards/gustofwind.8x6.pngbin775 -> 0 bytes
-rw-r--r--src/gfx/cards/gustofwind.pal1
-rw-r--r--src/gfx/cards/gustofwind.pngbin0 -> 819 bytes
-rw-r--r--src/gfx/cards/gyarados.8x6.pngbin734 -> 0 bytes
-rw-r--r--src/gfx/cards/gyarados.pal1
-rw-r--r--src/gfx/cards/gyarados.pngbin0 -> 786 bytes
-rw-r--r--src/gfx/cards/haunter1.8x6.pngbin594 -> 0 bytes
-rw-r--r--src/gfx/cards/haunter1.pal1
-rw-r--r--src/gfx/cards/haunter1.pngbin0 -> 652 bytes
-rw-r--r--src/gfx/cards/haunter2.8x6.pngbin470 -> 0 bytes
-rw-r--r--src/gfx/cards/haunter2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/haunter2.pngbin0 -> 523 bytes
-rw-r--r--src/gfx/cards/hitmonchan.8x6.pngbin772 -> 0 bytes
-rw-r--r--src/gfx/cards/hitmonchan.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/hitmonchan.pngbin0 -> 817 bytes
-rw-r--r--src/gfx/cards/hitmonlee.8x6.pngbin704 -> 0 bytes
-rw-r--r--src/gfx/cards/hitmonlee.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/hitmonlee.pngbin0 -> 757 bytes
-rw-r--r--src/gfx/cards/horsea.8x6.pngbin703 -> 0 bytes
-rw-r--r--src/gfx/cards/horsea.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/horsea.pngbin0 -> 740 bytes
-rw-r--r--src/gfx/cards/hypno.8x6.pngbin715 -> 0 bytes
-rw-r--r--src/gfx/cards/hypno.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/hypno.pngbin0 -> 769 bytes
-rw-r--r--src/gfx/cards/imakuni.8x6.pngbin708 -> 0 bytes
-rw-r--r--src/gfx/cards/imakuni.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/imakuni.pngbin0 -> 753 bytes
-rw-r--r--src/gfx/cards/imposterprofessoroak.8x6.pngbin658 -> 0 bytes
-rw-r--r--src/gfx/cards/imposterprofessoroak.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/imposterprofessoroak.pngbin0 -> 700 bytes
-rw-r--r--src/gfx/cards/itemfinder.8x6.pngbin468 -> 0 bytes
-rw-r--r--src/gfx/cards/itemfinder.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/itemfinder.pngbin0 -> 513 bytes
-rw-r--r--src/gfx/cards/ivysaur.8x6.pngbin785 -> 0 bytes
-rw-r--r--src/gfx/cards/ivysaur.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/ivysaur.pngbin0 -> 839 bytes
-rw-r--r--src/gfx/cards/jigglypuff1.8x6.pngbin751 -> 0 bytes
-rw-r--r--src/gfx/cards/jigglypuff1.pal1
-rw-r--r--src/gfx/cards/jigglypuff1.pngbin0 -> 792 bytes
-rw-r--r--src/gfx/cards/jigglypuff2.8x6.pngbin648 -> 0 bytes
-rw-r--r--src/gfx/cards/jigglypuff2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/jigglypuff2.pngbin0 -> 682 bytes
-rw-r--r--src/gfx/cards/jigglypuff3.8x6.pngbin710 -> 0 bytes
-rw-r--r--src/gfx/cards/jigglypuff3.pal1
-rw-r--r--src/gfx/cards/jigglypuff3.pngbin0 -> 755 bytes
-rw-r--r--src/gfx/cards/jolteon1.8x6.pngbin725 -> 0 bytes
-rw-r--r--src/gfx/cards/jolteon1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/jolteon1.pngbin0 -> 759 bytes
-rw-r--r--src/gfx/cards/jolteon2.8x6.pngbin778 -> 0 bytes
-rw-r--r--src/gfx/cards/jolteon2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/jolteon2.pngbin0 -> 827 bytes
-rw-r--r--src/gfx/cards/jynx.8x6.pngbin638 -> 0 bytes
-rw-r--r--src/gfx/cards/jynx.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/jynx.pngbin0 -> 687 bytes
-rw-r--r--src/gfx/cards/kabuto.8x6.pngbin736 -> 0 bytes
-rw-r--r--src/gfx/cards/kabuto.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/kabuto.pngbin0 -> 775 bytes
-rw-r--r--src/gfx/cards/kabutops.8x6.pngbin691 -> 0 bytes
-rw-r--r--src/gfx/cards/kabutops.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/kabutops.pngbin0 -> 744 bytes
-rw-r--r--src/gfx/cards/kadabra.8x6.pngbin608 -> 0 bytes
-rw-r--r--src/gfx/cards/kadabra.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/kadabra.pngbin0 -> 656 bytes
-rw-r--r--src/gfx/cards/kakuna.8x6.pngbin760 -> 0 bytes
-rw-r--r--src/gfx/cards/kakuna.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/kakuna.pngbin0 -> 807 bytes
-rw-r--r--src/gfx/cards/kangaskhan.8x6.pngbin757 -> 0 bytes
-rw-r--r--src/gfx/cards/kangaskhan.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/kangaskhan.pngbin0 -> 802 bytes
-rw-r--r--src/gfx/cards/kingler.8x6.pngbin767 -> 0 bytes
-rw-r--r--src/gfx/cards/kingler.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/kingler.pngbin0 -> 808 bytes
-rw-r--r--src/gfx/cards/koffing.8x6.pngbin802 -> 0 bytes
-rw-r--r--src/gfx/cards/koffing.pal1
-rw-r--r--src/gfx/cards/koffing.pngbin0 -> 841 bytes
-rw-r--r--src/gfx/cards/krabby.8x6.pngbin676 -> 0 bytes
-rw-r--r--src/gfx/cards/krabby.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/krabby.pngbin0 -> 713 bytes
-rw-r--r--src/gfx/cards/lapras.8x6.pngbin639 -> 0 bytes
-rw-r--r--src/gfx/cards/lapras.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/lapras.pngbin0 -> 698 bytes
-rw-r--r--src/gfx/cards/lass.8x6.pngbin621 -> 0 bytes
-rw-r--r--src/gfx/cards/lass.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/lass.pngbin0 -> 661 bytes
-rw-r--r--src/gfx/cards/lickitung.8x6.pngbin813 -> 0 bytes
-rw-r--r--src/gfx/cards/lickitung.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/lickitung.pngbin0 -> 839 bytes
-rw-r--r--src/gfx/cards/lightningenergy.8x6.pngbin537 -> 0 bytes
-rw-r--r--src/gfx/cards/lightningenergy.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/lightningenergy.pngbin0 -> 577 bytes
-rw-r--r--src/gfx/cards/machamp.8x6.pngbin776 -> 0 bytes
-rw-r--r--src/gfx/cards/machamp.pal1
-rw-r--r--src/gfx/cards/machamp.pngbin0 -> 830 bytes
-rw-r--r--src/gfx/cards/machoke.8x6.pngbin709 -> 0 bytes
-rw-r--r--src/gfx/cards/machoke.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/machoke.pngbin0 -> 758 bytes
-rw-r--r--src/gfx/cards/machop.8x6.pngbin728 -> 0 bytes
-rw-r--r--src/gfx/cards/machop.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/machop.pngbin0 -> 767 bytes
-rw-r--r--src/gfx/cards/magikarp.8x6.pngbin813 -> 0 bytes
-rw-r--r--src/gfx/cards/magikarp.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/magikarp.pngbin0 -> 849 bytes
-rw-r--r--src/gfx/cards/magmar1.8x6.pngbin712 -> 0 bytes
-rw-r--r--src/gfx/cards/magmar1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/magmar1.pngbin0 -> 781 bytes
-rw-r--r--src/gfx/cards/magmar2.8x6.pngbin794 -> 0 bytes
-rw-r--r--src/gfx/cards/magmar2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/magmar2.pngbin0 -> 841 bytes
-rw-r--r--src/gfx/cards/magnemite1.8x6.pngbin652 -> 0 bytes
-rw-r--r--src/gfx/cards/magnemite1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/magnemite1.pngbin0 -> 691 bytes
-rw-r--r--src/gfx/cards/magnemite2.8x6.pngbin650 -> 0 bytes
-rw-r--r--src/gfx/cards/magnemite2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/magnemite2.pngbin0 -> 699 bytes
-rw-r--r--src/gfx/cards/magneton1.8x6.pngbin736 -> 0 bytes
-rw-r--r--src/gfx/cards/magneton1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/magneton1.pngbin0 -> 790 bytes
-rw-r--r--src/gfx/cards/magneton2.8x6.pngbin663 -> 0 bytes
-rw-r--r--src/gfx/cards/magneton2.pal1
-rw-r--r--src/gfx/cards/magneton2.pngbin0 -> 715 bytes
-rw-r--r--src/gfx/cards/maintenance.8x6.pngbin467 -> 0 bytes
-rw-r--r--src/gfx/cards/maintenance.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/maintenance.pngbin0 -> 508 bytes
-rw-r--r--src/gfx/cards/mankey.8x6.pngbin797 -> 0 bytes
-rw-r--r--src/gfx/cards/mankey.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/mankey.pngbin0 -> 837 bytes
-rw-r--r--src/gfx/cards/marowak1.8x6.pngbin731 -> 0 bytes
-rw-r--r--src/gfx/cards/marowak1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/marowak1.pngbin0 -> 768 bytes
-rw-r--r--src/gfx/cards/marowak2.8x6.pngbin763 -> 0 bytes
-rw-r--r--src/gfx/cards/marowak2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/marowak2.pngbin0 -> 798 bytes
-rw-r--r--src/gfx/cards/meowth1.8x6.pngbin794 -> 0 bytes
-rw-r--r--src/gfx/cards/meowth1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/meowth1.pngbin0 -> 836 bytes
-rw-r--r--src/gfx/cards/meowth2.8x6.pngbin773 -> 0 bytes
-rw-r--r--src/gfx/cards/meowth2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/meowth2.pngbin0 -> 813 bytes
-rw-r--r--src/gfx/cards/metapod.8x6.pngbin675 -> 0 bytes
-rw-r--r--src/gfx/cards/metapod.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/metapod.pngbin0 -> 713 bytes
-rw-r--r--src/gfx/cards/mew1.8x6.pngbin767 -> 0 bytes
-rw-r--r--src/gfx/cards/mew1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/mew1.pngbin0 -> 803 bytes
-rw-r--r--src/gfx/cards/mew2.8x6.pngbin754 -> 0 bytes
-rw-r--r--src/gfx/cards/mew2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/mew2.pngbin0 -> 790 bytes
-rw-r--r--src/gfx/cards/mew3.8x6.pngbin699 -> 0 bytes
-rw-r--r--src/gfx/cards/mew3.pal1
-rw-r--r--src/gfx/cards/mew3.pngbin0 -> 744 bytes
-rw-r--r--src/gfx/cards/mewtwo1.8x6.pngbin659 -> 0 bytes
-rw-r--r--src/gfx/cards/mewtwo1.pal1
-rw-r--r--src/gfx/cards/mewtwo1.pngbin0 -> 716 bytes
-rw-r--r--src/gfx/cards/mewtwo2.8x6.pngbin695 -> 0 bytes
-rw-r--r--src/gfx/cards/mewtwo2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/mewtwo2.pngbin0 -> 742 bytes
-rw-r--r--src/gfx/cards/mewtwo3.8x6.pngbin788 -> 0 bytes
-rw-r--r--src/gfx/cards/mewtwo3.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/mewtwo3.pngbin0 -> 834 bytes
-rw-r--r--src/gfx/cards/moltres1.8x6.pngbin790 -> 0 bytes
-rw-r--r--src/gfx/cards/moltres1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/moltres1.pngbin0 -> 838 bytes
-rw-r--r--src/gfx/cards/moltres2.8x6.pngbin796 -> 0 bytes
-rw-r--r--src/gfx/cards/moltres2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/moltres2.pngbin0 -> 835 bytes
-rw-r--r--src/gfx/cards/mrfuji.8x6.pngbin746 -> 0 bytes
-rw-r--r--src/gfx/cards/mrfuji.pal1
-rw-r--r--src/gfx/cards/mrfuji.pngbin0 -> 785 bytes
-rw-r--r--src/gfx/cards/mrmime.8x6.pngbin709 -> 0 bytes
-rw-r--r--src/gfx/cards/mrmime.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/mrmime.pngbin0 -> 769 bytes
-rw-r--r--src/gfx/cards/muk.8x6.pngbin738 -> 0 bytes
-rw-r--r--src/gfx/cards/muk.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/muk.pngbin0 -> 795 bytes
-rw-r--r--src/gfx/cards/mysteriousfossil.8x6.pngbin717 -> 0 bytes
-rw-r--r--src/gfx/cards/mysteriousfossil.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/mysteriousfossil.pngbin0 -> 771 bytes
-rw-r--r--src/gfx/cards/nidoking.8x6.pngbin810 -> 0 bytes
-rw-r--r--src/gfx/cards/nidoking.pal1
-rw-r--r--src/gfx/cards/nidoking.pngbin0 -> 862 bytes
-rw-r--r--src/gfx/cards/nidoqueen.8x6.pngbin752 -> 0 bytes
-rw-r--r--src/gfx/cards/nidoqueen.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/nidoqueen.pngbin0 -> 811 bytes
-rw-r--r--src/gfx/cards/nidoranf.8x6.pngbin769 -> 0 bytes
-rw-r--r--src/gfx/cards/nidoranf.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/nidoranf.pngbin0 -> 819 bytes
-rw-r--r--src/gfx/cards/nidoranm.8x6.pngbin714 -> 0 bytes
-rw-r--r--src/gfx/cards/nidoranm.pal1
-rw-r--r--src/gfx/cards/nidoranm.pngbin0 -> 757 bytes
-rw-r--r--src/gfx/cards/nidorina.8x6.pngbin723 -> 0 bytes
-rw-r--r--src/gfx/cards/nidorina.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/nidorina.pngbin0 -> 767 bytes
-rw-r--r--src/gfx/cards/nidorino.8x6.pngbin834 -> 0 bytes
-rw-r--r--src/gfx/cards/nidorino.pal1
-rw-r--r--src/gfx/cards/nidorino.pngbin0 -> 872 bytes
-rw-r--r--src/gfx/cards/ninetails1.8x6.pngbin760 -> 0 bytes
-rw-r--r--src/gfx/cards/ninetails1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/ninetails1.pngbin0 -> 801 bytes
-rw-r--r--src/gfx/cards/ninetails2.8x6.pngbin670 -> 0 bytes
-rw-r--r--src/gfx/cards/ninetails2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/ninetails2.pngbin0 -> 717 bytes
-rw-r--r--src/gfx/cards/oddish.8x6.pngbin708 -> 0 bytes
-rw-r--r--src/gfx/cards/oddish.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/oddish.pngbin0 -> 753 bytes
-rw-r--r--src/gfx/cards/omanyte.8x6.pngbin792 -> 0 bytes
-rw-r--r--src/gfx/cards/omanyte.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/omanyte.pngbin0 -> 835 bytes
-rw-r--r--src/gfx/cards/omastar.8x6.pngbin810 -> 0 bytes
-rw-r--r--src/gfx/cards/omastar.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/omastar.pngbin0 -> 860 bytes
-rw-r--r--src/gfx/cards/onix.8x6.pngbin762 -> 0 bytes
-rw-r--r--src/gfx/cards/onix.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/onix.pngbin0 -> 803 bytes
-rw-r--r--src/gfx/cards/paras.8x6.pngbin779 -> 0 bytes
-rw-r--r--src/gfx/cards/paras.pal1
-rw-r--r--src/gfx/cards/paras.pngbin0 -> 820 bytes
-rw-r--r--src/gfx/cards/parasect.8x6.pngbin813 -> 0 bytes
-rw-r--r--src/gfx/cards/parasect.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/parasect.pngbin0 -> 852 bytes
-rw-r--r--src/gfx/cards/persian.8x6.pngbin690 -> 0 bytes
-rw-r--r--src/gfx/cards/persian.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/persian.pngbin0 -> 729 bytes
-rw-r--r--src/gfx/cards/pidgeot1.8x6.pngbin782 -> 0 bytes
-rw-r--r--src/gfx/cards/pidgeot1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pidgeot1.pngbin0 -> 815 bytes
-rw-r--r--src/gfx/cards/pidgeot2.8x6.pngbin749 -> 0 bytes
-rw-r--r--src/gfx/cards/pidgeot2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pidgeot2.pngbin0 -> 794 bytes
-rw-r--r--src/gfx/cards/pidgeotto.8x6.pngbin675 -> 0 bytes
-rw-r--r--src/gfx/cards/pidgeotto.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pidgeotto.pngbin0 -> 712 bytes
-rw-r--r--src/gfx/cards/pidgey.8x6.pngbin611 -> 0 bytes
-rw-r--r--src/gfx/cards/pidgey.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pidgey.pngbin0 -> 653 bytes
-rw-r--r--src/gfx/cards/pikachu1.8x6.pngbin728 -> 0 bytes
-rw-r--r--src/gfx/cards/pikachu1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pikachu1.pngbin0 -> 770 bytes
-rw-r--r--src/gfx/cards/pikachu2.8x6.pngbin754 -> 0 bytes
-rw-r--r--src/gfx/cards/pikachu2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pikachu2.pngbin0 -> 794 bytes
-rw-r--r--src/gfx/cards/pikachu3.8x6.pngbin675 -> 0 bytes
-rw-r--r--src/gfx/cards/pikachu3.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pikachu3.pngbin0 -> 720 bytes
-rw-r--r--src/gfx/cards/pikachu4.8x6.pngbin753 -> 0 bytes
-rw-r--r--src/gfx/cards/pikachu4.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pikachu4.pngbin0 -> 789 bytes
-rw-r--r--src/gfx/cards/pinsir.8x6.pngbin745 -> 0 bytes
-rw-r--r--src/gfx/cards/pinsir.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pinsir.pngbin0 -> 800 bytes
-rw-r--r--src/gfx/cards/pluspower.8x6.pngbin531 -> 0 bytes
-rw-r--r--src/gfx/cards/pluspower.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pluspower.pngbin0 -> 579 bytes
-rw-r--r--src/gfx/cards/pokeball.8x6.pngbin549 -> 0 bytes
-rw-r--r--src/gfx/cards/pokeball.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pokeball.pngbin0 -> 594 bytes
-rw-r--r--src/gfx/cards/pokedex.8x6.pngbin750 -> 0 bytes
-rw-r--r--src/gfx/cards/pokedex.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pokedex.pngbin0 -> 791 bytes
-rw-r--r--src/gfx/cards/pokemonbreeder.8x6.pngbin616 -> 0 bytes
-rw-r--r--src/gfx/cards/pokemonbreeder.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pokemonbreeder.pngbin0 -> 654 bytes
-rw-r--r--src/gfx/cards/pokemoncenter.8x6.pngbin529 -> 0 bytes
-rw-r--r--src/gfx/cards/pokemoncenter.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pokemoncenter.pngbin0 -> 589 bytes
-rw-r--r--src/gfx/cards/pokemonflute.8x6.pngbin582 -> 0 bytes
-rw-r--r--src/gfx/cards/pokemonflute.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pokemonflute.pngbin0 -> 624 bytes
-rw-r--r--src/gfx/cards/pokemontrader.8x6.pngbin697 -> 0 bytes
-rw-r--r--src/gfx/cards/pokemontrader.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/pokemontrader.pngbin0 -> 736 bytes
-rw-r--r--src/gfx/cards/poliwag.8x6.pngbin764 -> 0 bytes
-rw-r--r--src/gfx/cards/poliwag.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/poliwag.pngbin0 -> 799 bytes
-rw-r--r--src/gfx/cards/poliwhirl.8x6.pngbin761 -> 0 bytes
-rw-r--r--src/gfx/cards/poliwhirl.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/poliwhirl.pngbin0 -> 801 bytes
-rw-r--r--src/gfx/cards/poliwrath.8x6.pngbin773 -> 0 bytes
-rw-r--r--src/gfx/cards/poliwrath.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/poliwrath.pngbin0 -> 821 bytes
-rw-r--r--src/gfx/cards/ponyta.8x6.pngbin668 -> 0 bytes
-rw-r--r--src/gfx/cards/ponyta.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/ponyta.pngbin0 -> 718 bytes
-rw-r--r--src/gfx/cards/porygon.8x6.pngbin619 -> 0 bytes
-rw-r--r--src/gfx/cards/porygon.pal1
-rw-r--r--src/gfx/cards/porygon.pngbin0 -> 663 bytes
-rw-r--r--src/gfx/cards/potion.8x6.pngbin508 -> 0 bytes
-rw-r--r--src/gfx/cards/potion.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/potion.pngbin0 -> 554 bytes
-rw-r--r--src/gfx/cards/primeape.8x6.pngbin756 -> 0 bytes
-rw-r--r--src/gfx/cards/primeape.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/primeape.pngbin0 -> 796 bytes
-rw-r--r--src/gfx/cards/professoroak.8x6.pngbin738 -> 0 bytes
-rw-r--r--src/gfx/cards/professoroak.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/professoroak.pngbin0 -> 778 bytes
-rw-r--r--src/gfx/cards/psychicenergy.8x6.pngbin536 -> 0 bytes
-rw-r--r--src/gfx/cards/psychicenergy.pal1
-rw-r--r--src/gfx/cards/psychicenergy.pngbin0 -> 576 bytes
-rw-r--r--src/gfx/cards/psyduck.8x6.pngbin782 -> 0 bytes
-rw-r--r--src/gfx/cards/psyduck.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/psyduck.pngbin0 -> 818 bytes
-rw-r--r--src/gfx/cards/raichu1.8x6.pngbin771 -> 0 bytes
-rw-r--r--src/gfx/cards/raichu1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/raichu1.pngbin0 -> 815 bytes
-rw-r--r--src/gfx/cards/raichu2.8x6.pngbin789 -> 0 bytes
-rw-r--r--src/gfx/cards/raichu2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/raichu2.pngbin0 -> 834 bytes
-rw-r--r--src/gfx/cards/rapidash.8x6.pngbin686 -> 0 bytes
-rw-r--r--src/gfx/cards/rapidash.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/rapidash.pngbin0 -> 723 bytes
-rw-r--r--src/gfx/cards/raticate.8x6.pngbin702 -> 0 bytes
-rw-r--r--src/gfx/cards/raticate.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/raticate.pngbin0 -> 739 bytes
-rw-r--r--src/gfx/cards/rattata.8x6.pngbin748 -> 0 bytes
-rw-r--r--src/gfx/cards/rattata.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/rattata.pngbin0 -> 788 bytes
-rw-r--r--src/gfx/cards/recycle.8x6.pngbin554 -> 0 bytes
-rw-r--r--src/gfx/cards/recycle.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/recycle.pngbin0 -> 600 bytes
-rw-r--r--src/gfx/cards/revive.8x6.pngbin603 -> 0 bytes
-rw-r--r--src/gfx/cards/revive.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/revive.pngbin0 -> 644 bytes
-rw-r--r--src/gfx/cards/rhydon.8x6.pngbin781 -> 0 bytes
-rw-r--r--src/gfx/cards/rhydon.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/rhydon.pngbin0 -> 823 bytes
-rw-r--r--src/gfx/cards/rhyhorn.8x6.pngbin725 -> 0 bytes
-rw-r--r--src/gfx/cards/rhyhorn.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/rhyhorn.pngbin0 -> 763 bytes
-rw-r--r--src/gfx/cards/sandshrew.8x6.pngbin776 -> 0 bytes
-rw-r--r--src/gfx/cards/sandshrew.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/sandshrew.pngbin0 -> 816 bytes
-rw-r--r--src/gfx/cards/sandslash.8x6.pngbin789 -> 0 bytes
-rw-r--r--src/gfx/cards/sandslash.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/sandslash.pngbin0 -> 831 bytes
-rw-r--r--src/gfx/cards/scoopup.8x6.pngbin726 -> 0 bytes
-rw-r--r--src/gfx/cards/scoopup.pal1
-rw-r--r--src/gfx/cards/scoopup.pngbin0 -> 766 bytes
-rw-r--r--src/gfx/cards/scyther.8x6.pngbin720 -> 0 bytes
-rw-r--r--src/gfx/cards/scyther.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/scyther.pngbin0 -> 770 bytes
-rw-r--r--src/gfx/cards/seadra.8x6.pngbin789 -> 0 bytes
-rw-r--r--src/gfx/cards/seadra.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/seadra.pngbin0 -> 824 bytes
-rw-r--r--src/gfx/cards/seaking.8x6.pngbin782 -> 0 bytes
-rw-r--r--src/gfx/cards/seaking.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/seaking.pngbin0 -> 817 bytes
-rw-r--r--src/gfx/cards/seel.8x6.pngbin759 -> 0 bytes
-rw-r--r--src/gfx/cards/seel.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/seel.pngbin0 -> 794 bytes
-rw-r--r--src/gfx/cards/shellder.8x6.pngbin693 -> 0 bytes
-rw-r--r--src/gfx/cards/shellder.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/shellder.pngbin0 -> 734 bytes
-rw-r--r--src/gfx/cards/slowbro.8x6.pngbin757 -> 0 bytes
-rw-r--r--src/gfx/cards/slowbro.pal1
-rw-r--r--src/gfx/cards/slowbro.pngbin0 -> 792 bytes
-rw-r--r--src/gfx/cards/slowpoke1.8x6.pngbin721 -> 0 bytes
-rw-r--r--src/gfx/cards/slowpoke1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/slowpoke1.pngbin0 -> 759 bytes
-rw-r--r--src/gfx/cards/slowpoke2.8x6.pngbin359 -> 0 bytes
-rw-r--r--src/gfx/cards/slowpoke2.pal1
-rw-r--r--src/gfx/cards/slowpoke2.pngbin0 -> 399 bytes
-rw-r--r--src/gfx/cards/snorlax.8x6.pngbin675 -> 0 bytes
-rw-r--r--src/gfx/cards/snorlax.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/snorlax.pngbin0 -> 736 bytes
-rw-r--r--src/gfx/cards/spearow.8x6.pngbin781 -> 0 bytes
-rw-r--r--src/gfx/cards/spearow.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/spearow.pngbin0 -> 809 bytes
-rw-r--r--src/gfx/cards/squirtle.8x6.pngbin775 -> 0 bytes
-rw-r--r--src/gfx/cards/squirtle.pal1
-rw-r--r--src/gfx/cards/squirtle.pngbin0 -> 812 bytes
-rw-r--r--src/gfx/cards/starmie.8x6.pngbin599 -> 0 bytes
-rw-r--r--src/gfx/cards/starmie.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/starmie.pngbin0 -> 646 bytes
-rw-r--r--src/gfx/cards/staryu.8x6.pngbin627 -> 0 bytes
-rw-r--r--src/gfx/cards/staryu.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/staryu.pngbin0 -> 669 bytes
-rw-r--r--src/gfx/cards/superenergyremoval.8x6.pngbin602 -> 0 bytes
-rw-r--r--src/gfx/cards/superenergyremoval.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/superenergyremoval.pngbin0 -> 645 bytes
-rw-r--r--src/gfx/cards/superenergyretrieval.8x6.pngbin743 -> 0 bytes
-rw-r--r--src/gfx/cards/superenergyretrieval.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/superenergyretrieval.pngbin0 -> 786 bytes
-rw-r--r--src/gfx/cards/superpotion.8x6.pngbin666 -> 0 bytes
-rw-r--r--src/gfx/cards/superpotion.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/superpotion.pngbin0 -> 704 bytes
-rw-r--r--src/gfx/cards/surfingpikachu1.8x6.pngbin603 -> 0 bytes
-rw-r--r--src/gfx/cards/surfingpikachu1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/surfingpikachu1.pngbin0 -> 639 bytes
-rw-r--r--src/gfx/cards/surfingpikachu2.8x6.pngbin694 -> 0 bytes
-rw-r--r--src/gfx/cards/surfingpikachu2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/surfingpikachu2.pngbin0 -> 727 bytes
-rw-r--r--src/gfx/cards/switch.8x6.pngbin544 -> 0 bytes
-rw-r--r--src/gfx/cards/switch.pal1
-rw-r--r--src/gfx/cards/switch.pngbin0 -> 598 bytes
-rw-r--r--src/gfx/cards/tangela1.8x6.pngbin808 -> 0 bytes
-rw-r--r--src/gfx/cards/tangela1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/tangela1.pngbin0 -> 856 bytes
-rw-r--r--src/gfx/cards/tangela2.8x6.pngbin774 -> 0 bytes
-rw-r--r--src/gfx/cards/tangela2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/tangela2.pngbin0 -> 820 bytes
-rw-r--r--src/gfx/cards/tauros.8x6.pngbin774 -> 0 bytes
-rw-r--r--src/gfx/cards/tauros.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/tauros.pngbin0 -> 816 bytes
-rw-r--r--src/gfx/cards/tentacool.8x6.pngbin763 -> 0 bytes
-rw-r--r--src/gfx/cards/tentacool.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/tentacool.pngbin0 -> 802 bytes
-rw-r--r--src/gfx/cards/tentacruel.8x6.pngbin755 -> 0 bytes
-rw-r--r--src/gfx/cards/tentacruel.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/tentacruel.pngbin0 -> 796 bytes
-rw-r--r--src/gfx/cards/vaporeon1.8x6.pngbin697 -> 0 bytes
-rw-r--r--src/gfx/cards/vaporeon1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/vaporeon1.pngbin0 -> 737 bytes
-rw-r--r--src/gfx/cards/vaporeon2.8x6.pngbin760 -> 0 bytes
-rw-r--r--src/gfx/cards/vaporeon2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/vaporeon2.pngbin0 -> 811 bytes
-rw-r--r--src/gfx/cards/venomoth.8x6.pngbin784 -> 0 bytes
-rw-r--r--src/gfx/cards/venomoth.pal1
-rw-r--r--src/gfx/cards/venomoth.pngbin0 -> 833 bytes
-rw-r--r--src/gfx/cards/venonat.8x6.pngbin680 -> 0 bytes
-rw-r--r--src/gfx/cards/venonat.pal1
-rw-r--r--src/gfx/cards/venonat.pngbin0 -> 717 bytes
-rw-r--r--src/gfx/cards/venusaur1.8x6.pngbin731 -> 0 bytes
-rw-r--r--src/gfx/cards/venusaur1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/venusaur1.pngbin0 -> 769 bytes
-rw-r--r--src/gfx/cards/venusaur2.8x6.pngbin801 -> 0 bytes
-rw-r--r--src/gfx/cards/venusaur2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/venusaur2.pngbin0 -> 848 bytes
-rw-r--r--src/gfx/cards/victreebel.8x6.pngbin736 -> 0 bytes
-rw-r--r--src/gfx/cards/victreebel.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/victreebel.pngbin0 -> 785 bytes
-rw-r--r--src/gfx/cards/vileplume.8x6.pngbin662 -> 0 bytes
-rw-r--r--src/gfx/cards/vileplume.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/vileplume.pngbin0 -> 722 bytes
-rw-r--r--src/gfx/cards/voltorb.8x6.pngbin583 -> 0 bytes
-rw-r--r--src/gfx/cards/voltorb.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/voltorb.pngbin0 -> 640 bytes
-rw-r--r--src/gfx/cards/vulpix.8x6.pngbin620 -> 0 bytes
-rw-r--r--src/gfx/cards/vulpix.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/vulpix.pngbin0 -> 671 bytes
-rw-r--r--src/gfx/cards/wartortle.8x6.pngbin759 -> 0 bytes
-rw-r--r--src/gfx/cards/wartortle.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/wartortle.pngbin0 -> 797 bytes
-rw-r--r--src/gfx/cards/waterenergy.8x6.pngbin501 -> 0 bytes
-rw-r--r--src/gfx/cards/waterenergy.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/waterenergy.pngbin0 -> 539 bytes
-rw-r--r--src/gfx/cards/weedle.8x6.pngbin808 -> 0 bytes
-rw-r--r--src/gfx/cards/weedle.pal1
-rw-r--r--src/gfx/cards/weedle.pngbin0 -> 846 bytes
-rw-r--r--src/gfx/cards/weepinbell.8x6.pngbin763 -> 0 bytes
-rw-r--r--src/gfx/cards/weepinbell.pal1
-rw-r--r--src/gfx/cards/weepinbell.pngbin0 -> 802 bytes
-rw-r--r--src/gfx/cards/weezing.8x6.pngbin736 -> 0 bytes
-rw-r--r--src/gfx/cards/weezing.pal1
-rw-r--r--src/gfx/cards/weezing.pngbin0 -> 773 bytes
-rw-r--r--src/gfx/cards/wigglytuff.8x6.pngbin639 -> 0 bytes
-rw-r--r--src/gfx/cards/wigglytuff.pal1
-rw-r--r--src/gfx/cards/wigglytuff.pngbin0 -> 689 bytes
-rw-r--r--src/gfx/cards/zapdos1.8x6.pngbin705 -> 0 bytes
-rw-r--r--src/gfx/cards/zapdos1.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/zapdos1.pngbin0 -> 757 bytes
-rw-r--r--src/gfx/cards/zapdos2.8x6.pngbin662 -> 0 bytes
-rw-r--r--src/gfx/cards/zapdos2.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/zapdos2.pngbin0 -> 722 bytes
-rw-r--r--src/gfx/cards/zapdos3.8x6.pngbin585 -> 0 bytes
-rw-r--r--src/gfx/cards/zapdos3.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/zapdos3.pngbin0 -> 626 bytes
-rw-r--r--src/gfx/cards/zubat.8x6.pngbin777 -> 0 bytes
-rw-r--r--src/gfx/cards/zubat.palbin8 -> 0 bytes
-rw-r--r--src/gfx/cards/zubat.pngbin0 -> 818 bytes
-rw-r--r--src/gfx/duel/anims/51.png (renamed from src/gfx/duel/anims/51.t10.png)bin552 -> 552 bytes
-rw-r--r--src/gfx/duel/cgb_symbols.pngbin0 -> 1270 bytes
-rw-r--r--src/gfx/duel/cgb_symbols.t7.pngbin2960 -> 0 bytes
-rw-r--r--src/gfx/duel/dmg_sgb_symbols.pngbin0 -> 1374 bytes
-rw-r--r--src/gfx/duel/dmg_sgb_symbols.t7.pngbin3107 -> 0 bytes
-rw-r--r--src/gfx/duel/other.pngbin0 -> 820 bytes
-rw-r--r--src/gfx/duel/other.t7.pngbin1588 -> 0 bytes
-rw-r--r--src/gfx/fonts/full_width/4.pngbin0 -> 1153 bytes
-rw-r--r--src/gfx/fonts/full_width/4.t3.pngbin2279 -> 0 bytes
-rw-r--r--src/gfx/fonts/symbols.pngbin1398 -> 726 bytes
-rw-r--r--src/gfx/overworld_map.png (renamed from src/gfx/overworld_map.t15.png)bin2176 -> 2176 bytes
-rw-r--r--src/gfx/tilesets/challengehall.png (renamed from src/gfx/tilesets/challengehall.t3.png)bin1736 -> 1736 bytes
-rw-r--r--src/gfx/tilesets/clubentrance.png (renamed from src/gfx/tilesets/clubentrance.t15.png)bin1573 -> 1573 bytes
-rw-r--r--src/gfx/tilesets/clublobby.png (renamed from src/gfx/tilesets/clublobby.t8.png)bin1401 -> 1401 bytes
-rw-r--r--src/gfx/tilesets/fightingclub.png (renamed from src/gfx/tilesets/fightingclub.t13.png)bin1080 -> 1080 bytes
-rw-r--r--src/gfx/tilesets/fireclub.png (renamed from src/gfx/tilesets/fireclub.t9.png)bin1066 -> 1066 bytes
-rw-r--r--src/gfx/tilesets/grassclub.png (renamed from src/gfx/tilesets/grassclub.t9.png)bin1155 -> 1155 bytes
-rw-r--r--src/gfx/tilesets/hallofhonor.png (renamed from src/gfx/tilesets/hallofhonor.t7.png)bin1369 -> 1369 bytes
-rw-r--r--src/gfx/tilesets/ishihara.png (renamed from src/gfx/tilesets/ishihara.t3.png)bin926 -> 926 bytes
-rw-r--r--src/gfx/tilesets/lightningclub.png (renamed from src/gfx/tilesets/lightningclub.t13.png)bin1305 -> 1305 bytes
-rw-r--r--src/gfx/tilesets/masonlaboratory.png (renamed from src/gfx/tilesets/masonlaboratory.t9.png)bin1664 -> 1664 bytes
-rw-r--r--src/gfx/tilesets/pokemondome.png (renamed from src/gfx/tilesets/pokemondome.t1.png)bin2298 -> 2298 bytes
-rw-r--r--src/gfx/tilesets/pokemondomeentrance.png (renamed from src/gfx/tilesets/pokemondomeentrance.t2.png)bin941 -> 941 bytes
-rw-r--r--src/gfx/tilesets/psychicclub.png (renamed from src/gfx/tilesets/psychicclub.t6.png)bin690 -> 690 bytes
-rw-r--r--src/gfx/tilesets/rockclub.png (renamed from src/gfx/tilesets/rockclub.t4.png)bin828 -> 828 bytes
-rw-r--r--src/gfx/tilesets/scienceclub.png (renamed from src/gfx/tilesets/scienceclub.t14.png)bin1051 -> 1051 bytes
-rw-r--r--src/gfx/tilesets/waterclub.png (renamed from src/gfx/tilesets/waterclub.t15.png)bin1825 -> 1825 bytes
-rw-r--r--src/gfx/titlescreen/titlescreen1.png (renamed from src/gfx/titlescreen/titlescreen1.t15.png)bin909 -> 909 bytes
-rw-r--r--src/gfx/titlescreen/titlescreen2.png (renamed from src/gfx/titlescreen/titlescreen2.t15.png)bin950 -> 950 bytes
-rw-r--r--src/gfx/titlescreen/titlescreen3.png (renamed from src/gfx/titlescreen/titlescreen3.t12.png)bin2572 -> 2572 bytes
-rw-r--r--src/gfx/titlescreen/titlescreen4.png (renamed from src/gfx/titlescreen/titlescreen4.t5.png)bin3602 -> 3602 bytes
-rw-r--r--src/gfx/titlescreen/titlescreen5.png (renamed from src/gfx/titlescreen/titlescreen5.t4.png)bin2007 -> 2007 bytes
-rw-r--r--src/gfx/titlescreen/titlescreen6.png (renamed from src/gfx/titlescreen/titlescreen6.t12.png)bin2005 -> 2005 bytes
-rw-r--r--src/hram.asm25
-rw-r--r--src/layout.link180
-rw-r--r--src/macros/data.asm2
-rwxr-xr-x[-rw-r--r--]src/macros/scripts.asm221
-rw-r--r--src/macros/text.asm6
-rw-r--r--src/rgbdscheck.asm12
-rw-r--r--src/text/text1.asm100
-rw-r--r--src/text/text10.asm2
-rw-r--r--src/text/text2.asm200
-rw-r--r--src/text/text_offsets.asm302
-rw-r--r--src/wram.asm127
768 files changed, 13583 insertions, 2073 deletions
diff --git a/src/audio/music1.asm b/src/audio/music1.asm
index a3a6e9e..03c55b9 100644
--- a/src/audio/music1.asm
+++ b/src/audio/music1.asm
@@ -106,13 +106,13 @@ Func_f406f: ; f406f (3d:406f)
Music1_Init: ; f407d (3d:407d)
xor a
- ld [rNR52], a
+ ldh [rNR52], a
ld a, $80
- ld [rNR52], a
+ ldh [rNR52], a
ld a, $77
- ld [rNR50], a
+ ldh [rNR50], a
ld a, $ff
- ld [rNR51], a
+ ldh [rNR51], a
ld a, $3d
ld [wCurSongBank], a
ld a, $80
@@ -216,34 +216,34 @@ Music1_StopAllChannels: ; f414b (3d:414b)
bit 0, d
jr nz, .stop_channel_2
ld a, $8
- ld [rNR12], a
+ ldh [rNR12], a
swap a
- ld [rNR14], a
+ ldh [rNR14], a
.stop_channel_2
xor a
ld [wMusicIsPlaying + 1], a
bit 1, d
jr nz, .stop_channel_4
ld a, $8
- ld [rNR22], a
+ ldh [rNR22], a
swap a
- ld [rNR24], a
+ ldh [rNR24], a
.stop_channel_4
xor a
ld [wMusicIsPlaying + 3], a
bit 3, d
jr nz, .stop_channel_3
ld a, $8
- ld [rNR42], a
+ ldh [rNR42], a
swap a
- ld [rNR44], a
+ ldh [rNR44], a
.stop_channel_3
xor a
ld [wMusicIsPlaying + 2], a
bit 2, d
jr nz, .done
ld a, $0
- ld [rNR32], a
+ ldh [rNR32], a
.done
ret
@@ -429,9 +429,9 @@ Music1_UpdateChannel1: ; f42a5 (3d:42a5)
bit 0, a
jr nz, .asm_f4309
ld a, $8
- ld [rNR12], a
+ ldh [rNR12], a
swap a
- ld [rNR14], a
+ ldh [rNR14], a
.asm_f4309
ret
@@ -482,9 +482,9 @@ Music1_UpdateChannel2: ; f430a (3d:430a)
bit 1, a
jr nz, .asm_f436e
ld a, $8
- ld [rNR22], a
+ ldh [rNR22], a
swap a
- ld [rNR24], a
+ ldh [rNR24], a
.asm_f436e
ret
@@ -506,7 +506,7 @@ Music1_UpdateChannel3: ; f436f (3d:436f)
cp $1
jr z, .asm_f4398
ld a, [wMusicE9 + 2]
- ld [rNR32], a
+ ldh [rNR32], a
.asm_f4398
ld a, [wddbb + 2]
dec a
@@ -531,9 +531,9 @@ Music1_UpdateChannel3: ; f436f (3d:436f)
bit 2, a
jr nz, .asm_f43cd
ld a, $0
- ld [rNR32], a
+ ldh [rNR32], a
ld a, $80
- ld [rNR34], a
+ ldh [rNR34], a
.asm_f43cd
ret
@@ -569,9 +569,9 @@ Music1_UpdateChannel4: ; f43ce (3d:43ce)
xor a
ld [wddef], a
ld a, $8
- ld [rNR42], a
+ ldh [rNR42], a
swap a
- ld [rNR44], a
+ ldh [rNR44], a
.asm_f4413
ret
@@ -1167,19 +1167,19 @@ Func_f4714: ; f4714 (3d:4714)
cp $80
jr z, .asm_f4733
ld a, [wMusicVolume]
- ld [rNR12], a
+ ldh [rNR12], a
ld d, $80
.asm_f4733
ld [hl], $2
ld a, $8
- ld [rNR10], a
+ ldh [rNR10], a
ld a, [wMusicDuty1]
- ld [rNR11], a
+ ldh [rNR11], a
ld a, [wMusicCh1CurPitch]
- ld [rNR13], a
+ ldh [rNR13], a
ld a, [wMusicCh1CurOctave]
or d
- ld [rNR14], a
+ ldh [rNR14], a
.asm_f4749
ret
.asm_f474a
@@ -1206,17 +1206,17 @@ Func_f475a: ; f475a (3d:475a)
cp $80
jr z, .asm_f4779
ld a, [wMusicVolume + 1]
- ld [rNR22], a
+ ldh [rNR22], a
ld d, $80
.asm_f4779
ld [hl], $2
ld a, [wMusicDuty2]
- ld [rNR21], a
+ ldh [rNR21], a
ld a, [wMusicCh2CurPitch]
- ld [rNR23], a
+ ldh [rNR23], a
ld a, [wMusicCh2CurOctave]
or d
- ld [rNR24], a
+ ldh [rNR24], a
.asm_f478b
ret
.asm_f478c
@@ -1239,7 +1239,7 @@ Func_f479c: ; f479c (3d:479c)
or a
jr z, .no_wave_change
xor a
- ld [rNR30], a
+ ldh [rNR30], a
call Music1_LoadWaveInstrument
ld d, $80
.no_wave_change
@@ -1251,28 +1251,28 @@ Func_f479c: ; f479c (3d:479c)
cp $80
jr z, .asm_f47cc
ld a, [wMusicVolume + 2]
- ld [rNR32], a
+ ldh [rNR32], a
xor a
- ld [rNR30], a
+ ldh [rNR30], a
ld d, $80
.asm_f47cc
ld [hl], $2
xor a
- ld [rNR31], a
+ ldh [rNR31], a
ld a, [wMusicCh3CurPitch]
- ld [rNR33], a
+ ldh [rNR33], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
ld a, [wMusicCh3CurOctave]
or d
- ld [rNR34], a
+ ldh [rNR34], a
.asm_f47e0
ret
.asm_f47e1
ld hl, wMusicTie
ld [hl], $0
xor a
- ld [rNR30], a
+ ldh [rNR30], a
ret
Music1_LoadWaveInstrument: ; f479c (3d:47ea)
@@ -1349,7 +1349,7 @@ Func_f4839: ; f4839 (3d:4839)
jr nz, .asm_f4853
jr asm_f482a
.asm_f4853
- ld [rNR43], a
+ ldh [rNR43], a
inc de
ld a, d
ld [hld], a
@@ -1368,7 +1368,7 @@ Func_f485a: ; f485a (3d:485a)
Func_f4866: ; f4866 (3d:4866)
ld a, [wMusicPanning]
- ld [rNR50], a
+ ldh [rNR50], a
ld a, [wdd8c]
or a
ld hl, wMusicDC
@@ -1397,7 +1397,7 @@ Func_f4866: ; f4866 (3d:4866)
swap e
or e
and d
- ld [rNR51], a
+ ldh [rNR51], a
ret
Music1_UpdateVibrato: ; f4898 (3d:4898)
@@ -1495,13 +1495,13 @@ Func_f490b: ; f490b (3d:490b)
bit 0, a
jr nz, .done
ld a, e
- ld [rNR13], a
- ld a, [rNR11]
+ ldh [rNR13], a
+ ldh a, [rNR11]
and $c0
- ld [rNR11], a
+ ldh [rNR11], a
ld a, d
and $3f
- ld [rNR14], a
+ ldh [rNR14], a
ret
.not_channel_1
cp $1
@@ -1513,12 +1513,12 @@ Func_f490b: ; f490b (3d:490b)
bit 1, a
jr nz, .done
ld a, e
- ld [rNR23], a
- ld a, [rNR21]
+ ldh [rNR23], a
+ ldh a, [rNR21]
and $c0
- ld [rNR21], a
+ ldh [rNR21], a
ld a, d
- ld [rNR24], a
+ ldh [rNR24], a
ret
.not_channel_2
cp $2
@@ -1530,11 +1530,11 @@ Func_f490b: ; f490b (3d:490b)
bit 2, a
jr nz, .done
ld a, e
- ld [rNR33], a
+ ldh [rNR33], a
xor a
- ld [rNR31], a
+ ldh [rNR31], a
ld a, d
- ld [rNR34], a
+ ldh [rNR34], a
.done
ret
@@ -1567,28 +1567,28 @@ Func_f4980: ; f4980 (3d:4980)
bit 0, d
jr nz, .asm_f4990
ld a, $8
- ld [rNR12], a
+ ldh [rNR12], a
swap a
- ld [rNR14], a
+ ldh [rNR14], a
.asm_f4990
bit 1, d
jr nz, .asm_f499c
swap a
- ld [rNR22], a
+ ldh [rNR22], a
swap a
- ld [rNR24], a
+ ldh [rNR24], a
.asm_f499c
bit 3, d
jr nz, .asm_f49a8
swap a
- ld [rNR42], a
+ ldh [rNR42], a
swap a
- ld [rNR44], a
+ ldh [rNR44], a
.asm_f49a8
bit 2, d
jr nz, .asm_f49b0
ld a, $0
- ld [rNR32], a
+ ldh [rNR32], a
.asm_f49b0
ret
diff --git a/src/audio/music2.asm b/src/audio/music2.asm
index e13389e..4a8178e 100644
--- a/src/audio/music2.asm
+++ b/src/audio/music2.asm
@@ -106,13 +106,13 @@ Func_f806f: ; f806f (3e:406f)
Music2_Init: ; f807d (3e:407d)
xor a
- ld [rNR52], a
+ ldh [rNR52], a
ld a, $80
- ld [rNR52], a
+ ldh [rNR52], a
ld a, $77
- ld [rNR50], a
+ ldh [rNR50], a
ld a, $ff
- ld [rNR51], a
+ ldh [rNR51], a
ld a, $3d
ld [wCurSongBank], a
ld a, $80
@@ -216,34 +216,34 @@ Music2_StopAllChannels: ; f814b (3e:414b)
bit 0, d
jr nz, .stop_channel_2
ld a, $8
- ld [rNR12], a
+ ldh [rNR12], a
swap a
- ld [rNR14], a
+ ldh [rNR14], a
.stop_channel_2
xor a
ld [wMusicIsPlaying + 1], a
bit 1, d
jr nz, .stop_channel_4
ld a, $8
- ld [rNR22], a
+ ldh [rNR22], a
swap a
- ld [rNR24], a
+ ldh [rNR24], a
.stop_channel_4
xor a
ld [wMusicIsPlaying + 3], a
bit 3, d
jr nz, .stop_channel_3
ld a, $8
- ld [rNR42], a
+ ldh [rNR42], a
swap a
- ld [rNR44], a
+ ldh [rNR44], a
.stop_channel_3
xor a
ld [wMusicIsPlaying + 2], a
bit 2, d
jr nz, .done
ld a, $0
- ld [rNR32], a
+ ldh [rNR32], a
.done
ret
@@ -429,9 +429,9 @@ Music2_UpdateChannel1: ; f82a5 (3e:42a5)
bit 0, a
jr nz, .asm_f8309
ld a, $8
- ld [rNR12], a
+ ldh [rNR12], a
swap a
- ld [rNR14], a
+ ldh [rNR14], a
.asm_f8309
ret
@@ -482,9 +482,9 @@ Music2_UpdateChannel2: ; f830a (3e:430a)
bit 1, a
jr nz, .asm_f836e
ld a, $8
- ld [rNR22], a
+ ldh [rNR22], a
swap a
- ld [rNR24], a
+ ldh [rNR24], a
.asm_f836e
ret
@@ -506,7 +506,7 @@ Music2_UpdateChannel3: ; f836f (3e:436f)
cp $1
jr z, .asm_f8398
ld a, [wMusicE9 + 2]
- ld [rNR32], a
+ ldh [rNR32], a
.asm_f8398
ld a, [wddbb + 2]
dec a
@@ -531,9 +531,9 @@ Music2_UpdateChannel3: ; f836f (3e:436f)
bit 2, a
jr nz, .asm_f83cd
ld a, $0
- ld [rNR32], a
+ ldh [rNR32], a
ld a, $80
- ld [rNR34], a
+ ldh [rNR34], a
.asm_f83cd
ret
@@ -569,9 +569,9 @@ Music2_UpdateChannel4: ; f83ce (3e:43ce)
xor a
ld [wddef], a
ld a, $8
- ld [rNR42], a
+ ldh [rNR42], a
swap a
- ld [rNR44], a
+ ldh [rNR44], a
.asm_f8413
ret
@@ -1167,19 +1167,19 @@ Func_f8714: ; f8714 (3e:4714)
cp $80
jr z, .asm_f8733
ld a, [wMusicVolume]
- ld [rNR12], a
+ ldh [rNR12], a
ld d, $80
.asm_f8733
ld [hl], $2
ld a, $8
- ld [rNR10], a
+ ldh [rNR10], a
ld a, [wMusicDuty1]
- ld [rNR11], a
+ ldh [rNR11], a
ld a, [wMusicCh1CurPitch]
- ld [rNR13], a
+ ldh [rNR13], a
ld a, [wMusicCh1CurOctave]
or d
- ld [rNR14], a
+ ldh [rNR14], a
.asm_f8749
ret
.asm_f874a
@@ -1206,17 +1206,17 @@ Func_f875a: ; f875a (3e:475a)
cp $80
jr z, .asm_f8779
ld a, [wMusicVolume + 1]
- ld [rNR22], a
+ ldh [rNR22], a
ld d, $80
.asm_f8779
ld [hl], $2
ld a, [wMusicDuty2]
- ld [rNR21], a
+ ldh [rNR21], a
ld a, [wMusicCh2CurPitch]
- ld [rNR23], a
+ ldh [rNR23], a
ld a, [wMusicCh2CurOctave]
or d
- ld [rNR24], a
+ ldh [rNR24], a
.asm_f878b
ret
.asm_f878c
@@ -1239,7 +1239,7 @@ Func_f879c: ; f879c (3e:479c)
or a
jr z, .no_wave_change
xor a
- ld [rNR30], a
+ ldh [rNR30], a
call Music2_LoadWaveInstrument
ld d, $80
.no_wave_change
@@ -1251,28 +1251,28 @@ Func_f879c: ; f879c (3e:479c)
cp $80
jr z, .asm_f87cc
ld a, [wMusicVolume + 2]
- ld [rNR32], a
+ ldh [rNR32], a
xor a
- ld [rNR30], a
+ ldh [rNR30], a
ld d, $80
.asm_f87cc
ld [hl], $2
xor a
- ld [rNR31], a
+ ldh [rNR31], a
ld a, [wMusicCh3CurPitch]
- ld [rNR33], a
+ ldh [rNR33], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
ld a, [wMusicCh3CurOctave]
or d
- ld [rNR34], a
+ ldh [rNR34], a
.asm_f87e0
ret
.asm_f87e1
ld hl, wMusicTie
ld [hl], $0
xor a
- ld [rNR30], a
+ ldh [rNR30], a
ret
Music2_LoadWaveInstrument: ; f879c (3e:47ea)
@@ -1349,7 +1349,7 @@ Func_f8839: ; f8839 (3e:4839)
jr nz, .asm_f8853
jr asm_f882a
.asm_f8853
- ld [rNR43], a
+ ldh [rNR43], a
inc de
ld a, d
ld [hld], a
@@ -1368,7 +1368,7 @@ Func_f885a: ; f885a (3e:485a)
Func_f8866: ; f8866 (3e:4866)
ld a, [wMusicPanning]
- ld [rNR50], a
+ ldh [rNR50], a
ld a, [wdd8c]
or a
ld hl, wMusicDC
@@ -1397,7 +1397,7 @@ Func_f8866: ; f8866 (3e:4866)
swap e
or e
and d
- ld [rNR51], a
+ ldh [rNR51], a
ret
Func_f8898: ; f8898 (3e:4898)
@@ -1495,13 +1495,13 @@ Func_f890b: ; f890b (3e:490b)
bit 0, a
jr nz, .done
ld a, e
- ld [rNR13], a
- ld a, [rNR11]
+ ldh [rNR13], a
+ ldh a, [rNR11]
and $c0
- ld [rNR11], a
+ ldh [rNR11], a
ld a, d
and $3f
- ld [rNR14], a
+ ldh [rNR14], a
ret
.not_channel_1
cp $1
@@ -1513,12 +1513,12 @@ Func_f890b: ; f890b (3e:490b)
bit 1, a
jr nz, .done
ld a, e
- ld [rNR23], a
- ld a, [rNR21]
+ ldh [rNR23], a
+ ldh a, [rNR21]
and $c0
- ld [rNR21], a
+ ldh [rNR21], a
ld a, d
- ld [rNR24], a
+ ldh [rNR24], a
ret
.not_channel_2
cp $2
@@ -1530,11 +1530,11 @@ Func_f890b: ; f890b (3e:490b)
bit 2, a
jr nz, .done
ld a, e
- ld [rNR33], a
+ ldh [rNR33], a
xor a
- ld [rNR31], a
+ ldh [rNR31], a
ld a, d
- ld [rNR34], a
+ ldh [rNR34], a
.done
ret
@@ -1567,28 +1567,28 @@ Func_f8980: ; f8980 (3e:4980)
bit 0, d
jr nz, .asm_f8990
ld a, $8
- ld [rNR12], a
+ ldh [rNR12], a
swap a
- ld [rNR14], a
+ ldh [rNR14], a
.asm_f8990
bit 1, d
jr nz, .asm_f899c
swap a
- ld [rNR22], a
+ ldh [rNR22], a
swap a
- ld [rNR24], a
+ ldh [rNR24], a
.asm_f899c
bit 3, d
jr nz, .asm_f89a8
swap a
- ld [rNR42], a
+ ldh [rNR42], a
swap a
- ld [rNR44], a
+ ldh [rNR44], a
.asm_f89a8
bit 2, d
jr nz, .asm_f89b0
ld a, $0
- ld [rNR32], a
+ ldh [rNR32], a
.asm_f89b0
ret
diff --git a/src/audio/sfx.asm b/src/audio/sfx.asm
index 6b3e2bc..c682191 100644
--- a/src/audio/sfx.asm
+++ b/src/audio/sfx.asm
@@ -400,7 +400,7 @@ SFX_7: ; fc202 (3f:4202)
ld h, [hl]
ld l, a
ld a, $0
- ld [rNR30], a
+ ldh [rNR30], a
ld b, d
ld de, $ff30
.asm_fc215
@@ -414,7 +414,7 @@ SFX_7: ; fc202 (3f:4202)
ld a, $1
ld [wMusicWaveChange], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
ld b, $0
pop hl
jp Func_fc094
@@ -481,14 +481,14 @@ Func_fc26c: ; fc26c (3f:426c)
Func_fc279: ; fc279 (3f:4279)
ld a, $8
- ld a, [rNR12]
- ld a, [rNR22]
- ld a, [rNR32]
- ld a, [rNR42]
+ ldh a, [rNR12]
+ ldh a, [rNR22]
+ ldh a, [rNR32]
+ ldh a, [rNR42]
ld a, $80
- ld a, [rNR14]
- ld a, [rNR24]
- ld a, [rNR44]
+ ldh a, [rNR14]
+ ldh a, [rNR24]
+ ldh a, [rNR44]
xor a
ld [wdd8c], a
ret
diff --git a/src/constants/animation_constants.asm b/src/constants/animation_constants.asm
index bdf93f8..645cb5e 100644
--- a/src/constants/animation_constants.asm
+++ b/src/constants/animation_constants.asm
@@ -2,7 +2,7 @@
ANIM_SPELL_MOVE EQU $01
ANIM_GET_HIT EQU $07
ANIM_THUNDER_SHOCK EQU $0a
-ANIM_FURY_SWEEPES EQU $24
+ANIM_FURY_SWIPES EQU $24
; Special animations
ANIM_SHOW_DAMAGE EQU $09
diff --git a/src/constants/card_constants.asm b/src/constants/card_constants.asm
index df6da6b..a079f72 100644
--- a/src/constants/card_constants.asm
+++ b/src/constants/card_constants.asm
@@ -227,4 +227,4 @@
const POKEMON_FLUTE ; $e2
const GAMBLER ; $e3
const RECYCLE ; $e4
-NUM_CARDS EQU const_value + -1
+NUM_CARDS EQU const_value - 1
diff --git a/src/constants/card_data_constants.asm b/src/constants/card_data_constants.asm
index 3f26e4d..cfb855b 100644
--- a/src/constants/card_data_constants.asm
+++ b/src/constants/card_data_constants.asm
@@ -116,7 +116,7 @@ TYPE_ENERGY EQU const_value
const TYPE_ENERGY_UNUSED ; $0f
const TYPE_TRAINER ; $10
const TYPE_TRAINER_UNUSED ; $11
-NUM_CARD_TYPES EQU const_value + -1
+NUM_CARD_TYPES EQU const_value - 1
TYPE_PKMN EQU %111
TYPE_ENERGY_F EQU 3
@@ -146,6 +146,7 @@ PRO EQU $8
BASIC EQU $00
STAGE1 EQU $01
STAGE2 EQU $02
+STAGE2_WITHOUT_STAGE1 EQU $03
; CARD_DATA_WEAKNESS and CARD_DATA_RESISTANCE constants
WR_FIRE EQU $80
diff --git a/src/constants/charmaps.asm b/src/constants/charmaps.asm
index baa3f46..44b8e0b 100644
--- a/src/constants/charmaps.asm
+++ b/src/constants/charmaps.asm
@@ -94,6 +94,7 @@ ENDM
fwcharmap 3, "\", $98
fwcharmap 3, "┐", $99
fwcharmap 3, "|", $9a
+ fwcharmap 3, " ", $9c
fwcharmap 3, "!", $9d
fwcharmap 3, "#", $9f
fwcharmap 3, "$", $a0
@@ -279,11 +280,11 @@ ENDM
fwcharmap 0, "ぷ", $54
fwcharmap 0, "ぺ", $55
fwcharmap 0, "ぽ", $56
- fwcharmap 0, "あ", $57
- fwcharmap 0, "い", $58
- fwcharmap 0, "う", $59
- fwcharmap 0, "え", $5a
- fwcharmap 0, "お", $5b
+ fwcharmap 0, "あ(2)", $57
+ fwcharmap 0, "い(2)", $58
+ fwcharmap 0, "う(2)", $59
+ fwcharmap 0, "え(2)", $5a
+ fwcharmap 0, "お(2)", $5b
fwcharmap 0, "ゃ", $5c
fwcharmap 0, "ゅ", $5d
fwcharmap 0, "ょ", $5e
@@ -316,7 +317,7 @@ FW_SPACE EQU $70
txsymbol: MACRO
const SYM_\1
- charmap "\1>", const_value + -1
+ charmap "\1>", const_value - 1
ENDM
; TX_SYMBOL
diff --git a/src/constants/deck_ai_constants.asm b/src/constants/deck_ai_constants.asm
index a0b87f7..4533c99 100644
--- a/src/constants/deck_ai_constants.asm
+++ b/src/constants/deck_ai_constants.asm
@@ -42,7 +42,8 @@ AI_ENERGY_FLAG_SKIP_ARENA_CARD EQU 1 << 7 ; whether to include Arena card in det
; used by wAIBarrierFlagCounter to determine
; whether Player is running Mewtwo1 mill deck.
; flag set means true, flag not set means false.
-AI_FLAG_MEWTWO_MILL EQU 1 << 7
+AI_MEWTWO_MILL_F EQU 7
+AI_MEWTWO_MILL EQU 1 << AI_MEWTWO_MILL_F
; defines the behaviour of HandleAIEnergyTrans, for determining
; whether to move energy cards from the Bench to the Arena or vice-versa
@@ -59,3 +60,19 @@ AI_ENERGY_TRANS_TO_BENCH EQU $e ; moves energy cards away from Arena card
const AIACTION_FORCED_SWITCH ; $3
const AIACTION_KO_SWITCH ; $4
const AIACTION_TAKE_PRIZE ; $5
+
+; this bit is set when the AI decides to use Peek on their Prize cards,
+; with the following bits deciding which one to Peek. That is:
+; %10'0000 = first prize card
+; %10'0001 = second prize card
+; %10'0010 = third prize card
+; etc...
+AI_PEEK_TARGET_PRIZE_F EQU 6
+AI_PEEK_TARGET_PRIZE EQU 1 << AI_PEEK_TARGET_PRIZE_F
+; this bit is set when the AI decides to use Peek on Player hand card,
+; with the following bits deciding which one to Peek. That is:
+; %1XXX XXXX, where XXX XXXX is the deck index of card chosen
+AI_PEEK_TARGET_HAND_F EQU 7
+AI_PEEK_TARGET_HAND EQU 1 << AI_PEEK_TARGET_HAND_F
+; all bits set means AI chose to look at Player's top deck card
+AI_PEEK_TARGET_DECK EQU $ff
diff --git a/src/constants/deck_constants.asm b/src/constants/deck_constants.asm
index 4105242..02c8ac9 100644
--- a/src/constants/deck_constants.asm
+++ b/src/constants/deck_constants.asm
@@ -1,6 +1,6 @@
deck_const: MACRO
if const_value >= 2
-\1_ID EQU const_value + -2
+\1_ID EQU const_value - 2
endc
const \1
ENDM
@@ -65,4 +65,6 @@ ENDM
deck_const FLAMETHROWER_DECK ; $34
deck_const RESHUFFLE_DECK ; $35
deck_const IMAKUNI_DECK ; $36
-DECKS_END EQU const_value + -1
+DECKS_END EQU const_value - 1
+DECK_IDS_END EQU DECKS_END - 2
+
diff --git a/src/constants/duel_constants.asm b/src/constants/duel_constants.asm
index 928e78c..8255afe 100644
--- a/src/constants/duel_constants.asm
+++ b/src/constants/duel_constants.asm
@@ -25,58 +25,61 @@ DUEL_WIN EQU $0
DUEL_LOSS EQU $1
; wPlayerDuelVariables or wOpponentDuelVariables constants
-DUELVARS_CARD_LOCATIONS EQUS "LOW(wPlayerCardLocations)" ; 00
-DUELVARS_PRIZE_CARDS EQUS "LOW(wPlayerPrizeCards)" ; 3c
-DUELVARS_HAND EQUS "LOW(wPlayerHand)" ; 42
-DUELVARS_DECK_CARDS EQUS "LOW(wPlayerDeckCards)" ; 7e
-DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK EQUS "LOW(wPlayerNumberOfCardsNotInDeck)" ; ba
-DUELVARS_ARENA_CARD EQUS "LOW(wPlayerArenaCard)" ; bb
-DUELVARS_BENCH EQUS "LOW(wPlayerBench)" ; bc
-DUELVARS_ARENA_CARD_FLAGS_C2 EQU $c2
-DUELVARS_ARENA_CARD_HP EQUS "LOW(wPlayerArenaCardHP)" ; c8
-DUELVARS_BENCH1_CARD_HP EQUS "LOW(wPlayerBench1CardHP)" ; c9
-DUELVARS_BENCH2_CARD_HP EQUS "LOW(wPlayerBench2CardHP)" ; ca
-DUELVARS_BENCH3_CARD_HP EQUS "LOW(wPlayerBench3CardHP)" ; cb
-DUELVARS_BENCH4_CARD_HP EQUS "LOW(wPlayerBench4CardHP)" ; cc
-DUELVARS_BENCH5_CARD_HP EQUS "LOW(wPlayerBench5CardHP)" ; cd
-DUELVARS_ARENA_CARD_STAGE EQUS "LOW(wPlayerArenaCardStage)" ; ce
-DUELVARS_BENCH1_CARD_STAGE EQUS "LOW(wPlayerBench1CardStage)" ; cf
-DUELVARS_BENCH2_CARD_STAGE EQUS "LOW(wPlayerBench2CardStage)" ; d0
-DUELVARS_BENCH3_CARD_STAGE EQUS "LOW(wPlayerBench3CardStage)" ; d1
-DUELVARS_BENCH4_CARD_STAGE EQUS "LOW(wPlayerBench4CardStage)" ; d2
-DUELVARS_BENCH5_CARD_STAGE EQUS "LOW(wPlayerBench5CardStage)" ; d3
-DUELVARS_ARENA_CARD_CHANGED_TYPE EQUS "LOW(wPlayerArenaCardChangedType)" ; d4
-DUELVARS_BENCH1_CARD_CHANGED_TYPE EQUS "LOW(wPlayerBench1CardChangedType)" ; d5
-DUELVARS_BENCH2_CARD_CHANGED_TYPE EQUS "LOW(wPlayerBench2CardChangedType)" ; d6
-DUELVARS_BENCH3_CARD_CHANGED_TYPE EQUS "LOW(wPlayerBench3CardChangedType)" ; d7
-DUELVARS_BENCH4_CARD_CHANGED_TYPE EQUS "LOW(wPlayerBench4CardChangedType)" ; d8
-DUELVARS_BENCH5_CARD_CHANGED_TYPE EQUS "LOW(wPlayerBench5CardChangedType)" ; d9
-DUELVARS_ARENA_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerArenaCardAttachedDefender)" ; da
-DUELVARS_BENCH1_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench1CardAttachedDefender)" ; db
-DUELVARS_BENCH2_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench2CardAttachedDefender)" ; dc
-DUELVARS_BENCH3_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench3CardAttachedDefender)" ; dd
-DUELVARS_BENCH4_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench4CardAttachedDefender)" ; de
-DUELVARS_BENCH5_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench5CardAttachedDefender)" ; df
-DUELVARS_ARENA_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerArenaCardAttachedPluspower)" ; e0
-DUELVARS_BENCH1_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench1CardAttachedPluspower)" ; e1
-DUELVARS_BENCH2_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench2CardAttachedPluspower)" ; e2
-DUELVARS_BENCH3_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench3CardAttachedPluspower)" ; e3
-DUELVARS_BENCH4_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench4CardAttachedPluspower)" ; e4
-DUELVARS_BENCH5_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench5CardAttachedPluspower)" ; e5
-DUELVARS_ARENA_CARD_SUBSTATUS1 EQUS "LOW(wPlayerArenaCardSubstatus1)" ; e7
-DUELVARS_ARENA_CARD_SUBSTATUS2 EQUS "LOW(wPlayerArenaCardSubstatus2)" ; e8
-DUELVARS_ARENA_CARD_CHANGED_WEAKNESS EQUS "LOW(wPlayerArenaCardChangedWeakness)" ; e9
-DUELVARS_ARENA_CARD_CHANGED_RESISTANCE EQUS "LOW(wPlayerArenaCardChangedResistance)" ; ea
-DUELVARS_ARENA_CARD_SUBSTATUS3 EQUS "LOW(wPlayerArenaCardSubstatus3)" ; eb
-DUELVARS_PRIZES EQUS "LOW(wPlayerPrizes)" ; ec
-DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE EQUS "LOW(wPlayerNumberOfCardsInDiscardPile)" ; ed
-DUELVARS_NUMBER_OF_CARDS_IN_HAND EQUS "LOW(wPlayerNumberOfCardsInHand)" ; ee
-DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA EQUS "LOW(wPlayerNumberOfPokemonInPlayArea)" ; ef
-DUELVARS_ARENA_CARD_STATUS EQUS "LOW(wPlayerArenaCardStatus)" ; f0
-DUELVARS_DUELIST_TYPE EQUS "LOW(wPlayerDuelistType)" ; f1
-DUELVARS_ARENA_CARD_DISABLED_MOVE_INDEX EQUS "LOW(wPlayerArenaCardDisabledMoveIndex)" ; f2
-DUELVARS_ARENA_CARD_LAST_TURN_DAMAGE EQUS "LOW(wPlayerArenaCardLastTurnDamage)" ; f3
-DUELVARS_ARENA_CARD_LAST_TURN_STATUS EQUS "LOW(wPlayerArenaCardLastTurnStatus)" ; f5
+DUELVARS_CARD_LOCATIONS EQUS "LOW(wPlayerCardLocations)" ; 00
+DUELVARS_PRIZE_CARDS EQUS "LOW(wPlayerPrizeCards)" ; 3c
+DUELVARS_HAND EQUS "LOW(wPlayerHand)" ; 42
+DUELVARS_DECK_CARDS EQUS "LOW(wPlayerDeckCards)" ; 7e
+DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK EQUS "LOW(wPlayerNumberOfCardsNotInDeck)" ; ba
+DUELVARS_ARENA_CARD EQUS "LOW(wPlayerArenaCard)" ; bb
+DUELVARS_BENCH EQUS "LOW(wPlayerBench)" ; bc
+DUELVARS_ARENA_CARD_FLAGS EQUS "LOW(wPlayerArenaCardFlags)" ; c2
+DUELVARS_ARENA_CARD_HP EQUS "LOW(wPlayerArenaCardHP)" ; c8
+DUELVARS_BENCH1_CARD_HP EQUS "LOW(wPlayerBench1CardHP)" ; c9
+DUELVARS_BENCH2_CARD_HP EQUS "LOW(wPlayerBench2CardHP)" ; ca
+DUELVARS_BENCH3_CARD_HP EQUS "LOW(wPlayerBench3CardHP)" ; cb
+DUELVARS_BENCH4_CARD_HP EQUS "LOW(wPlayerBench4CardHP)" ; cc
+DUELVARS_BENCH5_CARD_HP EQUS "LOW(wPlayerBench5CardHP)" ; cd
+DUELVARS_ARENA_CARD_STAGE EQUS "LOW(wPlayerArenaCardStage)" ; ce
+DUELVARS_BENCH1_CARD_STAGE EQUS "LOW(wPlayerBench1CardStage)" ; cf
+DUELVARS_BENCH2_CARD_STAGE EQUS "LOW(wPlayerBench2CardStage)" ; d0
+DUELVARS_BENCH3_CARD_STAGE EQUS "LOW(wPlayerBench3CardStage)" ; d1
+DUELVARS_BENCH4_CARD_STAGE EQUS "LOW(wPlayerBench4CardStage)" ; d2
+DUELVARS_BENCH5_CARD_STAGE EQUS "LOW(wPlayerBench5CardStage)" ; d3
+DUELVARS_ARENA_CARD_CHANGED_TYPE EQUS "LOW(wPlayerArenaCardChangedType)" ; d4
+DUELVARS_BENCH1_CARD_CHANGED_COLOR EQUS "LOW(wPlayerBench1CardChangedType)" ; d5
+DUELVARS_BENCH2_CARD_CHANGED_COLOR EQUS "LOW(wPlayerBench2CardChangedType)" ; d6
+DUELVARS_BENCH3_CARD_CHANGED_COLOR EQUS "LOW(wPlayerBench3CardChangedType)" ; d7
+DUELVARS_BENCH4_CARD_CHANGED_COLOR EQUS "LOW(wPlayerBench4CardChangedType)" ; d8
+DUELVARS_BENCH5_CARD_CHANGED_COLOR EQUS "LOW(wPlayerBench5CardChangedType)" ; d9
+DUELVARS_ARENA_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerArenaCardAttachedDefender)" ; da
+DUELVARS_BENCH1_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench1CardAttachedDefender)" ; db
+DUELVARS_BENCH2_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench2CardAttachedDefender)" ; dc
+DUELVARS_BENCH3_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench3CardAttachedDefender)" ; dd
+DUELVARS_BENCH4_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench4CardAttachedDefender)" ; de
+DUELVARS_BENCH5_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench5CardAttachedDefender)" ; df
+DUELVARS_ARENA_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerArenaCardAttachedPluspower)" ; e0
+DUELVARS_BENCH1_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench1CardAttachedPluspower)" ; e1
+DUELVARS_BENCH2_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench2CardAttachedPluspower)" ; e2
+DUELVARS_BENCH3_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench3CardAttachedPluspower)" ; e3
+DUELVARS_BENCH4_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench4CardAttachedPluspower)" ; e4
+DUELVARS_BENCH5_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench5CardAttachedPluspower)" ; e5
+DUELVARS_ARENA_CARD_SUBSTATUS1 EQUS "LOW(wPlayerArenaCardSubstatus1)" ; e7
+DUELVARS_ARENA_CARD_SUBSTATUS2 EQUS "LOW(wPlayerArenaCardSubstatus2)" ; e8
+DUELVARS_ARENA_CARD_CHANGED_WEAKNESS EQUS "LOW(wPlayerArenaCardChangedWeakness)" ; e9
+DUELVARS_ARENA_CARD_CHANGED_RESISTANCE EQUS "LOW(wPlayerArenaCardChangedResistance)" ; ea
+DUELVARS_ARENA_CARD_SUBSTATUS3 EQUS "LOW(wPlayerArenaCardSubstatus3)" ; eb
+DUELVARS_PRIZES EQUS "LOW(wPlayerPrizes)" ; ec
+DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE EQUS "LOW(wPlayerNumberOfCardsInDiscardPile)" ; ed
+DUELVARS_NUMBER_OF_CARDS_IN_HAND EQUS "LOW(wPlayerNumberOfCardsInHand)" ; ee
+DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA EQUS "LOW(wPlayerNumberOfPokemonInPlayArea)" ; ef
+DUELVARS_ARENA_CARD_STATUS EQUS "LOW(wPlayerArenaCardStatus)" ; f0
+DUELVARS_DUELIST_TYPE EQUS "LOW(wPlayerDuelistType)" ; f1
+DUELVARS_ARENA_CARD_DISABLED_MOVE_INDEX EQUS "LOW(wPlayerArenaCardDisabledMoveIndex)" ; f2
+DUELVARS_ARENA_CARD_LAST_TURN_DAMAGE EQUS "LOW(wPlayerArenaCardLastTurnDamage)" ; f3
+DUELVARS_ARENA_CARD_LAST_TURN_STATUS EQUS "LOW(wPlayerArenaCardLastTurnStatus)" ; f5
+DUELVARS_ARENA_CARD_LAST_TURN_SUBSTATUS2 EQUS "LOW(wPlayerArenaCardLastTurnSubstatus2)" ; f6
+DUELVARS_ARENA_CARD_LAST_TURN_CHANGE_WEAK EQUS "LOW(wPlayerArenaCardLastTurnChangeWeak)" ; f7
+DUELVARS_ARENA_CARD_LAST_TURN_EFFECT EQUS "LOW(wPlayerArenaCardLastTurnEffect)" ; f8
; card location constants (DUELVARS_CARD_LOCATIONS)
CARD_LOCATION_DECK EQU $00
@@ -153,6 +156,7 @@ SUBSTATUS2_AMNESIA EQU $04
SUBSTATUS2_TAIL_WAG EQU $05
SUBSTATUS2_LEER EQU $06
SUBSTATUS2_POUNCE EQU $07
+SUBSTATUS2_CONVERSION2 EQU $08
SUBSTATUS2_UNABLE_RETREAT EQU $09
SUBSTATUS2_BONE_ATTACK EQU $0b
SUBSTATUS2_GROWL EQU $12
@@ -160,22 +164,41 @@ SUBSTATUS2_GROWL EQU $12
SUBSTATUS3_THIS_TURN_DOUBLE_DAMAGE EQU 0
SUBSTATUS3_HEADACHE EQU 1
-; DUELVARS_ARENA_CARD_FLAGS_C2 constants
-CAN_EVOLVE_THIS_TURN_F EQU 7
-CAN_EVOLVE_THIS_TURN EQU 1 << CAN_EVOLVE_THIS_TURN_F
+; DUELVARS_ARENA_CARD_FLAGS constants
+USED_PKMN_POWER_THIS_TURN_F EQU 5
+USED_LEEK_SLAP_THIS_DUEL_F EQU 6
+CAN_EVOLVE_THIS_TURN_F EQU 7
+
+USED_PKMN_POWER_THIS_TURN EQU 1 << USED_PKMN_POWER_THIS_TURN_F
+USED_LEEK_SLAP_THIS_DUEL EQU 1 << USED_LEEK_SLAP_THIS_DUEL_F
+CAN_EVOLVE_THIS_TURN EQU 1 << CAN_EVOLVE_THIS_TURN_F
+
+; DUELVARS_ARENA_CARD_LAST_TURN_EFFECT constants
+ const_def
+ const LAST_TURN_EFFECT_NONE ; $00
+ const LAST_TURN_EFFECT_DISCARD_ENERGY ; $01
+ const LAST_TURN_EFFECT_AMNESIA ; $02
+
+; *_CHANGED_COLOR constants
+HAS_CHANGED_COLOR_F EQU 7
+HAS_CHANGED_COLOR EQU 1 << HAS_CHANGED_COLOR_F
+
+; flag in wDamage + 1 that indicates
+; whether damage is unaffected by Weakness/Resistance
+UNAFFECTED_BY_WEAKNESS_RESISTANCE_F EQU 7
; effect command constants (TryExecuteEffectCommandFunction)
; ordered by (roughly) execution time
-EFFECTCMDTYPE_INITIAL_EFFECT_1 EQU $01
-EFFECTCMDTYPE_INITIAL_EFFECT_2 EQU $02
-EFFECTCMDTYPE_DISCARD_ENERGY EQU $06
-EFFECTCMDTYPE_REQUIRE_SELECTION EQU $05
-EFFECTCMDTYPE_BEFORE_DAMAGE EQU $03
-EFFECTCMDTYPE_AFTER_DAMAGE EQU $04
-EFFECTCMDTYPE_SWITCH_DEFENDING_PKMN EQU $0a
-EFFECTCMDTYPE_PKMN_POWER_TRIGGER EQU $07
-EFFECTCMDTYPE_AI EQU $09
-EFFECTCMDTYPE_UNKNOWN_08 EQU $08
+EFFECTCMDTYPE_INITIAL_EFFECT_1 EQU $01
+EFFECTCMDTYPE_INITIAL_EFFECT_2 EQU $02
+EFFECTCMDTYPE_DISCARD_ENERGY EQU $06
+EFFECTCMDTYPE_REQUIRE_SELECTION EQU $05
+EFFECTCMDTYPE_BEFORE_DAMAGE EQU $03
+EFFECTCMDTYPE_AFTER_DAMAGE EQU $04
+EFFECTCMDTYPE_AI_SELECTION EQU $08
+EFFECTCMDTYPE_AI_SWITCH_DEFENDING_PKMN EQU $0a
+EFFECTCMDTYPE_PKMN_POWER_TRIGGER EQU $07
+EFFECTCMDTYPE_AI EQU $09
; wDamageEffectiveness constants
WEAKNESS EQU 1
@@ -210,7 +233,7 @@ NO_DAMAGE_OR_EFFECT_NSHIELD EQU $05
const OPPACTION_TOSS_COIN_A_TIMES ; $11
const OPPACTION_6B30 ; $12
const OPPACTION_NO_ACTION_13 ; $13
- const OPPACTION_6B3E ; $14
+ const OPPACTION_USE_METRONOME_ATTACK ; $14
const OPPACTION_6B15 ; $15
const OPPACTION_DUEL_MAIN_SCENE ; $16
@@ -234,9 +257,16 @@ EFFECT_FAILED_UNSUCCESSFUL EQU $02
; wAnimationQueue length
ANIMATION_QUEUE_LENGTH EQU 7
-PRIZES_1 EQU $01
-PRIZES_2 EQU $02
-PRIZES_3 EQU $03
-PRIZES_4 EQU $04
-PRIZES_5 EQU $05
-PRIZES_6 EQU $06
+PRIZES_1 EQU $01
+PRIZES_2 EQU $02
+PRIZES_3 EQU $03
+PRIZES_4 EQU $04
+PRIZES_5 EQU $05
+PRIZES_6 EQU $06
+
+; constants to use as input to LookForCardInDeck
+SEARCHEFFECT_CARD_ID EQU $0
+SEARCHEFFECT_NIDORAN EQU $1
+SEARCHEFFECT_BASIC_FIGHTING EQU $2
+SEARCHEFFECT_BASIC_ENERGY EQU $3
+SEARCHEFFECT_POKEMON EQU $4
diff --git a/src/constants/hardware_constants.asm b/src/constants/hardware_constants.asm
index 3b36a9d..6879ffd 100644
--- a/src/constants/hardware_constants.asm
+++ b/src/constants/hardware_constants.asm
@@ -101,7 +101,7 @@ rNR34 EQU $ff1e ; Channel 3 Frequency's higher data (R/W)
rNR41 EQU $ff20 ; Channel 4 Sound Length (R/W)
rNR42 EQU $ff21 ; Channel 4 Volume Envelope (R/W)
rNR43 EQU $ff22 ; Channel 4 Polynomial Counter (R/W)
-rNR44 EQU $ff23 ; Channel 4 Counter/consecutive; Inital (R/W)
+rNR44 EQU $ff23 ; Channel 4 Counter/consecutive; Initial (R/W)
rNR50 EQU $ff24 ; Channel control / ON-OFF / Volume (R/W)
rNR51 EQU $ff25 ; Selection of Sound output terminal (R/W)
diff --git a/src/data/booster_packs.asm b/src/data/booster_packs.asm
index 7d1090c..44a401f 100644
--- a/src/data/booster_packs.asm
+++ b/src/data/booster_packs.asm
@@ -12,7 +12,7 @@ booster_set: MACRO
ENDM
; For the energy or energy generation function, there are three options:
-; - Ponter to a function that generates energies (some generate one, some generate a full pack)
+; - Pointer to a function that generates energies (some generate one, some generate a full pack)
; - A single energy of a specific type
; - $0000 if no card in the pack is an energy
@@ -37,7 +37,7 @@ BoosterPack_ColosseumNeutral:: ; 1e4e4 (7:64e4)
BoosterPack_ColosseumGrass:: ; 1e4f0 (7:64f0)
booster_set COLOSSEUM ; booster pack set
- dw GRASS_ENERGY ; energy or energy generation function
+ dw GRASS_ENERGY ; energy or energy generation function
; Card Type Chances
db 48 ; Grass Type Chance
@@ -52,7 +52,7 @@ BoosterPack_ColosseumGrass:: ; 1e4f0 (7:64f0)
BoosterPack_ColosseumFire:: ; 1e4fc (7:64fc)
booster_set COLOSSEUM ; booster pack set
- dw FIRE_ENERGY ; energy or energy generation function
+ dw FIRE_ENERGY ; energy or energy generation function
; Card Type Chances
db 16 ; Grass Type Chance
diff --git a/src/data/cards.asm b/src/data/cards.asm
index e601f98..dca875a 100644
--- a/src/data/cards.asm
+++ b/src/data/cards.asm
@@ -858,12 +858,12 @@ NidoranFCard: ; 31134 (c:5134)
; move 1
energy GRASS, 1 ; energies
- tx FurySweepesName ; name
+ tx FurySwipesName ; name
tx TripleAttackX10Description ; description
dw NONE ; description (cont)
db 10 ; damage
db DAMAGE_X ; category
- dw NidoranFFurySweepesEffectCommands ; effect commands
+ dw NidoranFFurySwipesEffectCommands ; effect commands
db NONE ; flags 1
db NONE ; flags 2
db NONE ; flags 3
@@ -3320,12 +3320,12 @@ PsyduckCard: ; 31d64 (c:5d64)
; move 2
energy WATER, 1 ; energies
- tx FurySweepesName ; name
+ tx FurySwipesName ; name
tx TripleAttackX10Description ; description
dw NONE ; description (cont)
db 10 ; damage
db DAMAGE_X ; category
- dw PsyduckFurySweepesEffectCommands ; effect commands
+ dw PsyduckFurySwipesEffectCommands ; effect commands
db NONE ; flags 1
db NONE ; flags 2
db NONE ; flags 3
@@ -5972,12 +5972,12 @@ SandslashCard: ; 32a98 (c:6a98)
; move 2
energy FIGHTING, 2 ; energies
- tx FurySweepesName ; name
+ tx FurySwipesName ; name
tx TripleAttackX20Description ; description
dw NONE ; description (cont)
db 20 ; damage
db DAMAGE_X ; category
- dw SandslashFurySweepesEffectCommands ; effect commands
+ dw SandslashFurySwipesEffectCommands ; effect commands
db NONE ; flags 1
db NONE ; flags 2
db NONE ; flags 3
@@ -6162,12 +6162,12 @@ PrimeapeCard: ; 32b9c (c:6b9c)
; move 1
energy FIGHTING, 2 ; energies
- tx FurySweepesName ; name
+ tx FurySwipesName ; name
tx TripleAttackX20Description ; description
dw NONE ; description (cont)
db 20 ; damage
db DAMAGE_X ; category
- dw PrimeapeFurySweepesEffectCommands ; effect commands
+ dw PrimeapeFurySwipesEffectCommands ; effect commands
db NONE ; flags 1
db NONE ; flags 2
db NONE ; flags 3
diff --git a/src/data/effect_commands.asm b/src/data/effect_commands.asm
index 7360aff..f90fe80 100644
--- a/src/data/effect_commands.asm
+++ b/src/data/effect_commands.asm
@@ -11,13 +11,16 @@ EffectCommands: ; 186f7 (6:46f7)
; - EFFECTCMDTYPE_INITIAL_EFFECT_1: Executed right after move or trainer card is used. Bypasses Smokescreen and Sand Attack effects.
; - EFFECTCMDTYPE_INITIAL_EFFECT_2: Executed right after move, Pokemon Power, or trainer card is used.
; - EFFECTCMDTYPE_DISCARD_ENERGY: For moves or trainer cards that require putting one or more attached energy cards into the discard pile.
-; - EFFECTCMDTYPE_REQUIRE_SELECTION: For moves, Pokemon Powers, or trainer cards requring the user to select a card (from e.g. play area screen or card list).
+; - EFFECTCMDTYPE_REQUIRE_SELECTION: For moves, Pokemon Powers, or trainer cards requiring the user to select a card (from e.g. play area screen or card list).
; - EFFECTCMDTYPE_BEFORE_DAMAGE: Effect command of a move executed prior to the damage step. For trainer card or Pokemon Power, usually the main effect.
-; - EFFECTCMDTYPE_AFTER_DAMAGE: Effect command executed after the damage step
-; - EFFECTCMDTYPE_SWITCH_DEFENDING_PKMN: For moves that may result in the defending Pokemon being switched out
-; - EFFECTCMDTYPE_PKMN_POWER_TRIGGER: Pokemon Power effects that trigger the moment the Pokemon card is played
-; - EFFECTCMDTYPE_AI: Used for AI scoring
-; - EFFECTCMDTYPE_UNKNOWN_08: Unknown
+; - EFFECTCMDTYPE_AFTER_DAMAGE: Effect command executed after the damage step.
+; - EFFECTCMDTYPE_AI_SWITCH_DEFENDING_PKMN: For moves that may result in the defending Pokemon being switched out. Called only for AI-executed moves.
+; - EFFECTCMDTYPE_PKMN_POWER_TRIGGER: Pokemon Power effects that trigger the moment the Pokemon card is played.
+; - EFFECTCMDTYPE_AI: Used for AI scoring.
+; - EFFECTCMDTYPE_AI_SELECTION: When AI is required to select a card
+
+; Moves that have an EFFECTCMDTYPE_REQUIRE_SELECTION also must have either an EFFECTCMDTYPE_AI_SWITCH_DEFENDING_PKMN or an
+; EFFECTCMDTYPE_AI_SELECTION (for anything not involving switching the defending Pokemon), to handle selections involving the AI.
; Similar move effects of different Pokemon cards all point to a different command list,
; even though in some cases their commands and function pointers match.
@@ -44,7 +47,7 @@ EkansWrapEffectCommands:
ArbokTerrorStrikeEffectCommands:
dbw EFFECTCMDTYPE_AFTER_DAMAGE, TerrorStrike_SwitchDefendingPokemon
dbw EFFECTCMDTYPE_REQUIRE_SELECTION, TerrorStrike_50PercentSelectSwitchPokemon
- dbw EFFECTCMDTYPE_SWITCH_DEFENDING_PKMN, TerrorStrike_50PercentSelectSwitchPokemon
+ dbw EFFECTCMDTYPE_AI_SWITCH_DEFENDING_PKMN, TerrorStrike_50PercentSelectSwitchPokemon
db $00
ArbokPoisonFangEffectCommands:
@@ -58,10 +61,10 @@ WeepinbellPoisonPowderEffectCommands:
db $00
VictreebelLureEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $4740
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $476a
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $474b
- dbw EFFECTCMDTYPE_UNKNOWN_08, $4764
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, VictreebelLure_AssertPokemonInBench
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, VictreebelLure_SwitchDefendingPokemon
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, VictreebelLure_SelectSwitchPokemon
+ dbw EFFECTCMDTYPE_AI_SELECTION, VictreebelLure_GetBenchPokemonWithLowestHP
db $00
VictreebelAcidEffectCommands:
@@ -95,7 +98,7 @@ KakunaPoisonPowderEffectCommands:
db $00
GolbatLeechLifeEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $47bc
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, GolbatLeechLifeEffect
db $00
VenonatStunSporeEffectCommands:
@@ -103,7 +106,7 @@ VenonatStunSporeEffectCommands:
db $00
VenonatLeechLifeEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $47c6
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, VenonatLeechLifeEffect
db $00
ScytherSwordsDanceEffectCommands:
@@ -115,7 +118,7 @@ ZubatSupersonicEffectCommands:
db $00
ZubatLeechLifeEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $47e3
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, ZubatLeechLifeEffect
db $00
BeedrillTwineedleEffectCommands:
@@ -125,7 +128,7 @@ BeedrillTwineedleEffectCommands:
BeedrillPoisonStingEffectCommands:
dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Poison50PercentEffect
- dbw EFFECTCMDTYPE_AI, $480d
+ dbw EFFECTCMDTYPE_AI, BeedrillPoisonSting_AIEffect
db $00
ExeggcuteHypnosisEffectCommands:
@@ -133,7 +136,7 @@ ExeggcuteHypnosisEffectCommands:
db $00
ExeggcuteLeechSeedEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $4815
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, ExeggcuteLeechSeedEffect
db $00
KoffingFoulGasEffectCommands:
@@ -154,17 +157,17 @@ OddishStunSporeEffectCommands:
db $00
OddishSproutEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $484a
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $48cc
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $485a
- dbw EFFECTCMDTYPE_UNKNOWN_08, $48b7
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Sprout_CheckDeckAndPlayArea
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Sprout_PutInPlayAreaEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Sprout_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Sprout_AISelectEffect
db $00
ExeggutorTeleportEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $48ec
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $491a
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $48f7
- dbw EFFECTCMDTYPE_UNKNOWN_08, $490f
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Teleport_CheckBench
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Teleport_SwitchEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Teleport_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Teleport_AISelectEffect
db $00
ExeggutorBigEggsplosionEffectCommands:
@@ -174,7 +177,7 @@ ExeggutorBigEggsplosionEffectCommands:
NidokingThrashEffectCommands:
dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Thrash_ModifierEffect
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, Func_2c982
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Thrash_LowRecoilEffect
dbw EFFECTCMDTYPE_AI, Thrash_AIEffect
db $00
@@ -184,48 +187,48 @@ NidokingToxicEffectCommands:
db $00
NidoqueenBoyfriendsEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4998
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, BoyfriendsEffect
db $00
-NidoranFFurySweepesEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $49c6
- dbw EFFECTCMDTYPE_AI, $49be
+NidoranFFurySwipesEffectCommands:
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, NidoranFFurySwipes_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, NidoranFFurySwipes_AIEffect
db $00
NidoranFCallForFamilyEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $49db
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $4a6e
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $49eb
- dbw EFFECTCMDTYPE_UNKNOWN_08, $4a55
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, NidoranFCallForFamily_CheckDeckAndPlayArea
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, NidoranFCallForFamily_PutInPlayAreaEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, NidoranFCallForFamily_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, NidoranFCallForFamily_AISelectEffect
db $00
NidoranMHornHazardEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4a96
- dbw EFFECTCMDTYPE_AI, $4a8e
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, HornHazard_NoDamage50PercentEffect
+ dbw EFFECTCMDTYPE_AI, HornHazard_AIEffect
db $00
NidorinaSupersonicEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4aac
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, NidorinaSupersonicEffect
db $00
NidorinaDoubleKickEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4abb
- dbw EFFECTCMDTYPE_AI, $4ab3
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, NidorinaDoubleKick_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, NidorinaDoubleKick_AIEffect
db $00
NidorinoDoubleKickEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4adb
- dbw EFFECTCMDTYPE_AI, $4ad3
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, NidorinoDoubleKick_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, NidorinoDoubleKick_AIEffect
db $00
ButterfreeWhirlwindEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $4b09
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $4af3
- dbw EFFECTCMDTYPE_SWITCH_DEFENDING_PKMN, $4af3
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, ButterfreeWhirlwind_SwitchEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, ButterfreeWhirlwind_CheckBench
+ dbw EFFECTCMDTYPE_AI_SWITCH_DEFENDING_PKMN, ButterfreeWhirlwind_CheckBench
db $00
ButterfreeMegaDrainEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $4b0f
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, ButterfreeMegaDrainEffect
db $00
ParasSporeEffectCommands:
@@ -238,23 +241,23 @@ ParasectSporeEffectCommands:
WeedlePoisonStingEffectCommands:
dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Poison50PercentEffect
- dbw EFFECTCMDTYPE_AI, $4b27
+ dbw EFFECTCMDTYPE_AI, WeedlePoisonSting_AIEffect
db $00
IvysaurPoisonPowderEffectCommands:
dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PoisonEffect
- dbw EFFECTCMDTYPE_AI, $4b2f
+ dbw EFFECTCMDTYPE_AI, IvysaurPoisonPowder_AIEffect
db $00
BulbasaurLeechSeedEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $4b37
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, BulbasaurLeechSeedEffect
db $00
VenusaurEnergyTransEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $4b44
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4b77
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $4bfb
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $4b6f
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, EnergyTrans_CheckPlayArea
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, EnergyTrans_TransferEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, EnergyTrans_AIEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, EnergyTrans_PrintProcedure
db $00
GrimerNastyGooEffectCommands:
@@ -262,43 +265,43 @@ GrimerNastyGooEffectCommands:
db $00
GrimerMinimizeEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4c30
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, GrimerMinimizeEffect
db $00
MukToxicGasEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $4c36
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, ToxicGasEffect
db $00
MukSludgeEffectCommands:
dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Poison50PercentEffect
- dbw EFFECTCMDTYPE_AI, $4c38
+ dbw EFFECTCMDTYPE_AI, Sludge_AIEffect
db $00
BellsproutCallForFamilyEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $4c40
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $4cc2
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $4c50
- dbw EFFECTCMDTYPE_UNKNOWN_08, $4cad
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, BellsproutCallForFamily_CheckDeckAndPlayArea
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, BellsproutCallForFamily_PutInPlayAreaEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, BellsproutCallForFamily_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, BellsproutCallForFamily_AISelectEffect
db $00
WeezingSmogEffectCommands:
dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Poison50PercentEffect
- dbw EFFECTCMDTYPE_AI, $4ce2
+ dbw EFFECTCMDTYPE_AI, WeezingSmog_AIEffect
db $00
WeezingSelfdestructEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $4cea
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, WeezingSelfdestructEffect
db $00
VenomothShiftEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $4d09
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4d5d
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $4d21
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Shift_OncePerTurnCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Shift_ChangeColorEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Shift_PlayerSelectEffect
db $00
VenomothVenomPowderEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4d8c
- dbw EFFECTCMDTYPE_AI, $4d84
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, VenomPowder_PoisonConfusion50PercentEffect
+ dbw EFFECTCMDTYPE_AI, VenomPowder_AIEffect
db $00
TangelaBindEffectCommands:
@@ -307,17 +310,17 @@ TangelaBindEffectCommands:
TangelaPoisonPowderEffectCommands:
dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PoisonEffect
- dbw EFFECTCMDTYPE_AI, $4da0
+ dbw EFFECTCMDTYPE_AI, TangelaPoisonPowder_AIEffect
db $00
VileplumeHealEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $4da8
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4dc7
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Heal_OncePerTurnCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Heal_RemoveDamageEffect
db $00
VileplumePetalDanceEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4e2b
- dbw EFFECTCMDTYPE_AI, $4e23
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PetalDance_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, PetalDance_AIEffect
db $00
TangelaStunSporeEffectCommands:
@@ -326,48 +329,48 @@ TangelaStunSporeEffectCommands:
TangelaPoisonWhipEffectCommands:
dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PoisonEffect
- dbw EFFECTCMDTYPE_AI, $4e4b
+ dbw EFFECTCMDTYPE_AI, PoisonWhip_AIEffect
db $00
VenusaurSolarPowerEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $4e53
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4e82
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, SolarPower_CheckUse
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SolarPower_RemoveStatusEffect
db $00
VenusaurMegaDrainEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $4eb0
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, VenusaurMegaDrainEffect
db $00
OmastarWaterGunEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4f05
- dbw EFFECTCMDTYPE_AI, $4f05
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, OmastarWaterGunEffect
+ dbw EFFECTCMDTYPE_AI, OmastarWaterGunEffect
db $00
OmastarSpikeCannonEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4f12
- dbw EFFECTCMDTYPE_AI, $4f0a
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, OmastarSpikeCannon_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, OmastarSpikeCannon_AIEffect
db $00
OmanyteClairvoyanceEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $4f2a
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, ClairvoyanceEffect
db $00
OmanyteWaterGunEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4f2c
- dbw EFFECTCMDTYPE_AI, $4f2c
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, OmanyteWaterGunEffect
+ dbw EFFECTCMDTYPE_AI, OmanyteWaterGunEffect
db $00
WartortleWithdrawEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4f32
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, WartortleWithdrawEffect
db $00
BlastoiseRainDanceEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $4f46
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, RainDanceEffect
db $00
BlastoiseHydroPumpEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4f48
- dbw EFFECTCMDTYPE_AI, $4f48
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, HydroPumpEffect
+ dbw EFFECTCMDTYPE_AI, HydroPumpEffect
db $00
GyaradosBubblebeamEffectCommands:
@@ -375,29 +378,29 @@ GyaradosBubblebeamEffectCommands:
db $00
KinglerFlailEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $4f54
- dbw EFFECTCMDTYPE_AI, $4f4e
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, KinglerFlail_HPCheck
+ dbw EFFECTCMDTYPE_AI, KinglerFlail_AIEffect
db $00
KrabbyCallForFamilyEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $4f5d
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $4fdf
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $4f6d
- dbw EFFECTCMDTYPE_UNKNOWN_08, $4fca
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, KrabbyCallForFamily_CheckDeckAndPlayArea
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, KrabbyCallForFamily_PutInPlayAreaEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, KrabbyCallForFamily_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, KrabbyCallForFamily_AISelectEffect
db $00
MagikarpFlailEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5005
- dbw EFFECTCMDTYPE_AI, $4fff
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, MagikarpFlail_HPCheck
+ dbw EFFECTCMDTYPE_AI, MagikarpFlail_AIEffect
db $00
PsyduckHeadacheEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $500e
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, HeadacheEffect
db $00
-PsyduckFurySweepesEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $501e
- dbw EFFECTCMDTYPE_AI, $5016
+PsyduckFurySwipesEffectCommands:
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PsyduckFurySwipes_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, PsyduckFurySwipes_AIEffect
db $00
GolduckPsyshockEffectCommands:
@@ -405,36 +408,36 @@ GolduckPsyshockEffectCommands:
db $00
GolduckHyperBeamEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $506b
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $5033
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5065
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, GolduckHyperBeam_DiscardEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, GolduckHyperBeam_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, GolduckHyperBeam_AISelectEffect
db $00
SeadraWaterGunEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5085
- dbw EFFECTCMDTYPE_AI, $5085
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SeadraWaterGunEffect
+ dbw EFFECTCMDTYPE_AI, SeadraWaterGunEffect
db $00
SeadraAgilityEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $508b
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SeadraAgilityEffect
db $00
ShellderSupersonicEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $509d
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ShellderSupersonicEffect
db $00
ShellderHideInShellEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $50a4
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, HideInShellEffect
db $00
VaporeonQuickAttackEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $50c0
- dbw EFFECTCMDTYPE_AI, $50b8
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, VaporeonQuickAttack_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, VaporeonQuickAttack_AIEffect
db $00
VaporeonWaterGunEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $50d3
- dbw EFFECTCMDTYPE_AI, $50d3
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, VaporeonWaterGunEffect
+ dbw EFFECTCMDTYPE_AI, VaporeonWaterGunEffect
db $00
DewgongIceBeamEffectCommands:
@@ -442,11 +445,11 @@ DewgongIceBeamEffectCommands:
db $00
StarmieRecoverEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $50d9
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $50f0
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5114
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $510e
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5103
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, StarmieRecover_CheckEnergyHP
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, StarmieRecover_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, StarmieRecover_HealEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, StarmieRecover_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, StarmieRecover_AISelectEffect
db $00
StarmieStarFreezeEffectCommands:
@@ -458,57 +461,57 @@ SquirtleBubbleEffectCommands:
db $00
SquirtleWithdrawEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5120
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SquirtleWithdrawEffect
db $00
HorseaSmokescreenEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5134
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, HorseaSmokescreenEffect
db $00
TentacruelSupersonicEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $513a
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, TentacruelSupersonicEffect
db $00
TentacruelJellyfishStingEffectCommands:
dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PoisonEffect
- dbw EFFECTCMDTYPE_AI, $5141
+ dbw EFFECTCMDTYPE_AI, JellyfishSting_AIEffect
db $00
PoliwhirlAmnesiaEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5149
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $516f
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5179
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5173
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, PoliwhirlAmnesia_CheckAttacks
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, PoliwhirlAmnesia_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PoliwhirlAmnesia_DisableEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, PoliwhirlAmnesia_AISelectEffect
db $00
PoliwhirlDoubleslapEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $51c8
- dbw EFFECTCMDTYPE_AI, $51c0
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PoliwhirlDoubleslap_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, PoliwhirlDoubleslap_AIEffect
db $00
PoliwrathWaterGunEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $51e0
- dbw EFFECTCMDTYPE_AI, $51e0
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PoliwrathWaterGunEffect
+ dbw EFFECTCMDTYPE_AI, PoliwrathWaterGunEffect
db $00
PoliwrathWhirlpoolEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5214
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $51e6
- dbw EFFECTCMDTYPE_UNKNOWN_08, $520e
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Whirlpool_DiscardEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Whirlpool_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Whirlpool_AISelectEffect
db $00
PoliwagWaterGunEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5227
- dbw EFFECTCMDTYPE_AI, $5227
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PoliwagWaterGunEffect
+ dbw EFFECTCMDTYPE_AI, PoliwagWaterGunEffect
db $00
CloysterClampEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $522d
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ClampEffect
db $00
CloysterSpikeCannonEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $524e
- dbw EFFECTCMDTYPE_AI, $5246
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, CloysterSpikeCannon_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, CloysterSpikeCannon_AIEffect
db $00
ArticunoFreezeDryEffectCommands:
@@ -516,19 +519,19 @@ ArticunoFreezeDryEffectCommands:
db $00
ArticunoBlizzardEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5266
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $526f
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Blizzard_BenchDamage50PercentEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Blizzard_BenchDamageEffect
db $00
TentacoolCowardiceEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $528b
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $52c3
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $52ae
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Cowardice_Check
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Cowardice_RemoveFromPlayAreaEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Cowardice_PlayerSelectEffect
db $00
LaprasWaterGunEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $52eb
- dbw EFFECTCMDTYPE_AI, $52eb
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, LaprasWaterGunEffect
+ dbw EFFECTCMDTYPE_AI, LaprasWaterGunEffect
db $00
LaprasConfuseRayEffectCommands:
@@ -536,131 +539,131 @@ LaprasConfuseRayEffectCommands:
db $00
ArticunoQuickfreezeEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $52f1
- dbw EFFECTCMDTYPE_PKMN_POWER_TRIGGER, $52f3
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Quickfreeze_InitialEffect
+ dbw EFFECTCMDTYPE_PKMN_POWER_TRIGGER, Quickfreeze_Paralysis50PercentEffect
db $00
ArticunoIceBreathEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5329
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $532e
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, IceBreath_ZeroDamage
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, IceBreath_RandomPokemonDamageEffect
db $00
VaporeonFocusEnergyEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $533f
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, FocusEnergyEffect
db $00
ArcanineFlamethrowerEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5363
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $5371
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $5379
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5375
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, ArcanineFlamethrower_CheckEnergy
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, ArcanineFlamethrower_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, ArcanineFlamethrower_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, ArcanineFlamethrower_AISelectEffect
db $00
ArcanineTakeDownEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $537f
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, TakeDownEffect
db $00
ArcanineQuickAttackEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $538d
- dbw EFFECTCMDTYPE_AI, $5385
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ArcanineQuickAttack_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, ArcanineQuickAttack_AIEffect
db $00
ArcanineFlamesOfRageEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $53a0
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $53ae
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $53ef
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $53de
- dbw EFFECTCMDTYPE_UNKNOWN_08, $53d5
- dbw EFFECTCMDTYPE_AI, $53e9
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, FlamesOfRage_CheckEnergy
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, FlamesOfRage_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, FlamesOfRage_DamageBoostEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, FlamesOfRage_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, FlamesOfRage_AISelectEffect
+ dbw EFFECTCMDTYPE_AI, FlamesOfRage_AIEffect
db $00
RapidashStompEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5400
- dbw EFFECTCMDTYPE_AI, $53f8
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, RapidashStomp_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, RapidashStomp_AIEffect
db $00
RapidashAgilityEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5413
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, RapidashAgilityEffect
db $00
NinetailsLureEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5425
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $544f
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $5430
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5449
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, NinetailsLure_CheckBench
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, NinetailsLure_SwitchEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, NinetailsLure_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, NinetailsLure_AISelectEffect
db $00
NinetailsFireBlastEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5463
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $5471
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $5479
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5475
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, FireBlast_CheckEnergy
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, FireBlast_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, FireBlast_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, FireBlast_AISelectEffect
db $00
CharmanderEmberEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $547f
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $548d
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $5495
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5491
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Ember_CheckEnergy
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Ember_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, Ember_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Ember_AISelectEffect
db $00
MoltresWildfireEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $549b
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $54a9
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $54f4
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $54e1
- dbw EFFECTCMDTYPE_UNKNOWN_08, $54dd
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Wildfire_CheckEnergy
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Wildfire_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Wildfire_DiscardDeckEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, Wildfire_DiscardEnergyEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Wildfire_AISelectEffect
db $00
Moltres1DiveBombEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $552b
- dbw EFFECTCMDTYPE_AI, $5523
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Moltres1DiveBomb_Success50PercentEffect
+ dbw EFFECTCMDTYPE_AI, Moltres1DiveBomb_AIEffect
db $00
FlareonQuickAttackEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5549
- dbw EFFECTCMDTYPE_AI, $5541
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, FlareonQuickAttack_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, FlareonQuickAttack_AIEffect
db $00
FlareonFlamethrowerEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $555c
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $556a
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $5572
- dbw EFFECTCMDTYPE_UNKNOWN_08, $556e
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, FlareonFlamethrower_CheckEnergy
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, FlareonFlamethrower_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, FlareonFlamethrower_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, FlareonFlamethrower_AISelectEffect
db $00
MagmarFlamethrowerEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5578
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $5586
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $558e
- dbw EFFECTCMDTYPE_UNKNOWN_08, $558a
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, MagmarFlamethrower_CheckEnergy
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, MagmarFlamethrower_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, MagmarFlamethrower_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, MagmarFlamethrower_AISelectEffect
db $00
MagmarSmokescreenEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5594
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, MagmarSmokescreenEffect
db $00
MagmarSmogEffectCommands:
dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Poison50PercentEffect
- dbw EFFECTCMDTYPE_AI, $559a
+ dbw EFFECTCMDTYPE_AI, MagmarSmog_AIEffect
db $00
CharmeleonFlamethrowerEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $55a2
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $55b0
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $55b8
- dbw EFFECTCMDTYPE_UNKNOWN_08, $55b4
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, CharmeleonFlamethrower_CheckEnergy
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, CharmeleonFlamethrower_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, CharmeleonFlamethrower_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, CharmeleonFlamethrower_AISelectEffect
db $00
CharizardEnergyBurnEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $55be
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, EnergyBurnEffect
db $00
CharizardFireSpinEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $55c0
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $55cd
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $5614
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5606
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, FireSpin_CheckEnergy
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, FireSpin_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, FireSpin_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, FireSpin_AISelectEffect
db $00
VulpixConfuseRayEffectCommands:
@@ -668,27 +671,27 @@ VulpixConfuseRayEffectCommands:
db $00
FlareonRageEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $563e
- dbw EFFECTCMDTYPE_AI, $5638
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, FlareonRage_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, FlareonRage_AIEffect
db $00
NinetailsMixUpEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5647
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, MixUpEffect
db $00
NinetailsDancingEmbersEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $56ab
- dbw EFFECTCMDTYPE_AI, $56a3
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, DancingEmbers_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, DancingEmbers_AIEffect
db $00
MoltresFiregiverEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $56c0
- dbw EFFECTCMDTYPE_PKMN_POWER_TRIGGER, $56c2
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Firegiver_InitialEffect
+ dbw EFFECTCMDTYPE_PKMN_POWER_TRIGGER, Firegiver_AddToHandEffect
db $00
Moltres2DiveBombEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5776
- dbw EFFECTCMDTYPE_AI, $576e
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Moltres2DiveBomb_Success50PercentEffect
+ dbw EFFECTCMDTYPE_AI, Moltres2DiveBomb_AIEffect
db $00
AbraPsyshockEffectCommands:
@@ -696,27 +699,27 @@ AbraPsyshockEffectCommands:
db $00
GengarCurseEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $57fc
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $58bb
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $5834
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Curse_CheckDamageAndBench
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Curse_TransferDamageEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Curse_PlayerSelectEffect
db $00
GengarDarkMindEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $593c
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $5903
- dbw EFFECTCMDTYPE_UNKNOWN_08, $592a
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, GengarDarkMind_DamageBenchEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, GengarDarkMind_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, GengarDarkMind_AISelectEffect
db $00
GastlySleepingGasEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $594f
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SleepingGasEffect
db $00
GastlyDestinyBondEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5956
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $5964
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5987
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $5981
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5976
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, DestinyBond_CheckEnergy
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, DestinyBond_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, DestinyBond_DestinyBondEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, DestinyBond_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, DestinyBond_AISelectEffect
db $00
GastlyLickEffectCommands:
@@ -724,10 +727,10 @@ GastlyLickEffectCommands:
db $00
GastlyEnergyConversionEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $598d
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $59b4
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $5994
- dbw EFFECTCMDTYPE_UNKNOWN_08, $599b
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, EnergyConversion_CheckEnergy
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, EnergyConversion_AddToHandEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, EnergyConversion_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, EnergyConversion_AISelectEffect
db $00
HaunterHypnosisEffectCommands:
@@ -735,11 +738,11 @@ HaunterHypnosisEffectCommands:
db $00
HaunterDreamEaterEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $59d6
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, DreamEaterEffect
db $00
HaunterTransparencyEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $59e5
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, TransparencyEffect
db $00
HaunterNightmareEffectCommands:
@@ -747,16 +750,16 @@ HaunterNightmareEffectCommands:
db $00
HypnoProphecyEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $59e7
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5a41
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $5a00
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5a3c
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Prophecy_CheckDeck
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Prophecy_ReorderDeckEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Prophecy_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Prophecy_AISelectEffect
db $00
HypnoDarkMindEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5b64
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $5b2b
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5b52
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, HypnoDarkMind_DamageBenchEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, HypnoDarkMind_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, HypnoDarkMind_AISelectEffect
db $00
DrowzeeConfuseRayEffectCommands:
@@ -764,18 +767,18 @@ DrowzeeConfuseRayEffectCommands:
db $00
MrMimeInvisibleWallEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5b77
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, InvisibleWallEffect
db $00
MrMimeMeditateEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5b7f
- dbw EFFECTCMDTYPE_AI, $5b79
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, MrMimeMeditate_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, MrMimeMeditate_AIEffect
db $00
AlakazamDamageSwapEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $5b8e
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5ba2
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5c27
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, DamageSwap_CheckDamage
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, DamageSwap_SelectAndSwapEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, DamageSwap_SwapEffect
db $00
AlakazamConfuseRayEffectCommands:
@@ -783,19 +786,19 @@ AlakazamConfuseRayEffectCommands:
db $00
MewPsywaveEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5c49
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PsywaveEffect
db $00
MewDevolutionBeamEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5c53
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $5c64
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5cb6
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5cbb
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5c9e
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, DevolutionBeam_CheckPlayArea
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, DevolutionBeam_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, DevolutionBeam_LoadAnimation
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, DevolutionBeam_DevolveEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, DevolutionBeam_AISelectEffect
db $00
MewNeutralizingShieldEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5d79
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, NeutralizingShieldEffect
db $00
MewPsyshockEffectCommands:
@@ -803,36 +806,36 @@ MewPsyshockEffectCommands:
db $00
MewtwoPsychicEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5d81
- dbw EFFECTCMDTYPE_AI, $5d7b
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Psychic_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, Psychic_AIEffect
db $00
MewtwoBarrierEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5d8e
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $5d9c
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5dbf
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $5db9
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5dae
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Barrier_CheckEnergy
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Barrier_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Barrier_BarrierEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, Barrier_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Barrier_AISelectEffect
db $00
Mewtwo3EnergyAbsorptionEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5dc5
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5dec
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $5dcc
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5dd3
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Mewtwo3EnergyAbsorption_CheckDiscardPile
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Mewtwo3EnergyAbsorption_AddToHandEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Mewtwo3EnergyAbsorption_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Mewtwo3EnergyAbsorption_AISelectEffect
db $00
Mewtwo2EnergyAbsorptionEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5dff
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5e26
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $5e06
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5e0d
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Mewtwo2EnergyAbsorption_CheckDiscardPile
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Mewtwo2EnergyAbsorption_AddToHandEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Mewtwo2EnergyAbsorption_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Mewtwo2EnergyAbsorption_AISelectEffect
db $00
SlowbroStrangeBehaviorEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $5e39
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5e5b
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5eb3
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, StrangeBehavior_CheckDamage
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, StrangeBehavior_SelectAndSwapEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, StrangeBehavior_SwapEffect
db $00
SlowbroPsyshockEffectCommands:
@@ -840,165 +843,165 @@ SlowbroPsyshockEffectCommands:
db $00
SlowpokeSpacingOutEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5ed5
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5ee0
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5ef1
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, SpacingOut_CheckDamage
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SpacingOut_Success50PercentEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, SpacingOut_HealEffect
db $00
SlowpokeScavengeEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5f05
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $5f1a
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5f5f
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $5f46
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $5f40
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5f2d
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Scavenge_CheckDiscardPile
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Scavenge_PlayerSelectEnergyEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Scavenge_AddToHandEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Scavenge_PlayerSelectTrainerEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, Scavenge_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Scavenge_AISelectEffect
db $00
SlowpokeAmnesiaEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5f74
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $5f7b
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5f85
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5f7f
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, SlowpokeAmnesia_CheckAttacks
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, SlowpokeAmnesia_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SlowpokeAmnesia_DisableEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, SlowpokeAmnesia_AISelectEffect
db $00
KadabraRecoverEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $5f89
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $5fa0
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $5fc3
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $5fbd
- dbw EFFECTCMDTYPE_UNKNOWN_08, $5fb2
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, KadabraRecover_CheckEnergyHP
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, KadabraRecover_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, KadabraRecover_HealEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, KadabraRecover_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, KadabraRecover_AISelectEffect
db $00
JynxDoubleslapEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5fd7
- dbw EFFECTCMDTYPE_AI, $5fcf
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, JynxDoubleslap_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, JynxDoubleslap_AIEffect
db $00
JynxMeditateEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $5ff2
- dbw EFFECTCMDTYPE_AI, $5fec
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, JynxMeditate_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, JynxMeditate_AIEffect
db $00
MewMysteryAttackEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6009
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $603e
- dbw EFFECTCMDTYPE_AI, $6001
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, MysteryAttack_RandomEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, MysteryAttack_RecoverEffect
+ dbw EFFECTCMDTYPE_AI, MysteryAttack_AIEffect
db $00
GeodudeStoneBarrageEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6052
- dbw EFFECTCMDTYPE_AI, $604a
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, StoneBarrage_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, StoneBarrage_AIEffect
db $00
OnixHardenEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6075
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, OnixHardenEffect
db $00
-PrimeapeFurySweepesEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6083
- dbw EFFECTCMDTYPE_AI, $607b
+PrimeapeFurySwipesEffectCommands:
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PrimeapeFurySwipes_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, PrimeapeFurySwipes_AIEffect
db $00
PrimeapeTantrumEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6099
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, TantrumEffect
db $00
MachampStrikesBackEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $60af
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, StrikesBackEffect
db $00
KabutoKabutoArmorEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $60b1
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, KabutoArmorEffect
db $00
KabutopsAbsorbEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $60b3
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, AbsorbEffect
db $00
CuboneSnivelEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $60cb
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SnivelEffect
db $00
CuboneRageEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $60d7
- dbw EFFECTCMDTYPE_AI, $60d1
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, CuboneRage_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, CuboneRage_AIEffect
db $00
MarowakBonemerangEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $60e8
- dbw EFFECTCMDTYPE_AI, $60e0
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Bonemerang_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, Bonemerang_AIEffect
db $00
MarowakCallforFriendEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6100
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6194
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $6110
- dbw EFFECTCMDTYPE_UNKNOWN_08, $6177
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, MarowakCallForFamily_CheckDeckAndPlayArea
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, MarowakCallForFamily_PutInPlayAreaEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, MarowakCallForFamily_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, MarowakCallForFamily_AISelectEffect
db $00
MachokeKarateChopEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $61ba
- dbw EFFECTCMDTYPE_AI, $61b4
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, KarateChop_DamageSubtractionEffect
+ dbw EFFECTCMDTYPE_AI, KarateChop_AIEffect
db $00
MachokeSubmissionEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $61d1
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, SubmissionEffect
db $00
GolemSelfdestructEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $61d7
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, GolemSelfdestructEffect
db $00
GravelerHardenEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $61f6
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, GravelerHardenEffect
db $00
RhydonRamEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6212
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $61fc
- dbw EFFECTCMDTYPE_SWITCH_DEFENDING_PKMN, $61fc
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Ram_RecoilSwitchEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Ram_SelectSwitchEffect
+ dbw EFFECTCMDTYPE_AI_SWITCH_DEFENDING_PKMN, Ram_SelectSwitchEffect
db $00
RhyhornLeerEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $621d
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, LeerEffect
db $00
HitmonleeStretchKickEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6231
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $625b
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $623c
- dbw EFFECTCMDTYPE_UNKNOWN_08, $6255
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, StretchKick_CheckBench
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, StretchKick_BenchDamageEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, StretchKick_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, StretchKick_AISelectEffect
db $00
SandshrewSandAttackEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $626b
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SandAttackEffect
db $00
-SandslashFurySweepesEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6279
- dbw EFFECTCMDTYPE_AI, $6271
+SandslashFurySwipesEffectCommands:
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SandslashFurySwipes_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, SandslashFurySwipes_AIEffect
db $00
DugtrioEarthquakeEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $628f
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, EarthquakeEffect
db $00
AerodactylPrehistoricPowerEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $629a
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, PrehistoricPowerEffect
db $00
MankeyPeekEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $629c
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $62b4
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Peek_OncePerTurnCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Peek_SelectEffect
db $00
MarowakBoneAttackEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $630f
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, BoneAttackEffect
db $00
MarowakWailEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $631c
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6335
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Wail_BenchCheck
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Wail_FillBenchEffect
db $00
ElectabuzzThundershockEffectCommands:
@@ -1006,18 +1009,18 @@ ElectabuzzThundershockEffectCommands:
db $00
ElectabuzzThunderpunchEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $63a1
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $63b0
- dbw EFFECTCMDTYPE_AI, $6399
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Thunderpunch_ModifierEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Thunderpunch_RecoilEffect
+ dbw EFFECTCMDTYPE_AI, Thunderpunch_AIEffect
db $00
ElectabuzzLightScreenEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $63ba
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, LightScreenEffect
db $00
ElectabuzzQuickAttackEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $63c8
- dbw EFFECTCMDTYPE_AI, $63c0
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ElectabuzzQuickAttack_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, ElectabuzzQuickAttack_AIEffect
db $00
MagnemiteThunderWaveEffectCommands:
@@ -1025,30 +1028,30 @@ MagnemiteThunderWaveEffectCommands:
db $00
MagnemiteSelfdestructEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $63db
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, MagnemiteSelfdestructEffect
db $00
ZapdosThunderEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $63fa
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6409
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ZapdosThunder_Recoil50PercentEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, ZapdosThunder_RecoilEffect
db $00
ZapdosThunderboltEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6419
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ThunderboltEffect
db $00
ZapdosThunderstormEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6429
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, ThunderstormEffect
db $00
JolteonQuickAttackEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $64c3
- dbw EFFECTCMDTYPE_AI, $64bb
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, JolteonQuickAttack_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, JolteonQuickAttack_AIEffect
db $00
JolteonPinMissileEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $64de
- dbw EFFECTCMDTYPE_AI, $64d6
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PinMissile_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, PinMissile_AIEffect
db $00
FlyingPikachuThundershockEffectCommands:
@@ -1056,23 +1059,23 @@ FlyingPikachuThundershockEffectCommands:
db $00
FlyingPikachuFlyEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $64fc
- dbw EFFECTCMDTYPE_AI, $64f4
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Fly_Success50PercentEffect
+ dbw EFFECTCMDTYPE_AI, Fly_AIEffect
db $00
PikachuThunderJoltEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $651a
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6529
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ThunderJolt_Recoil50PercentEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, ThunderJolt_RecoilEffect
db $00
PikachuSparkEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6574
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $6539
- dbw EFFECTCMDTYPE_UNKNOWN_08, $6562
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Spark_BenchDamageEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Spark_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Spark_AISelectEffect
db $00
Pikachu3GrowlEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6589
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Pikachu3GrowlEffect
db $00
Pikachu3ThundershockEffectCommands:
@@ -1080,7 +1083,7 @@ Pikachu3ThundershockEffectCommands:
db $00
Pikachu4GrowlEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $658f
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Pikachu4GrowlEffect
db $00
Pikachu4ThundershockEffectCommands:
@@ -1088,22 +1091,22 @@ Pikachu4ThundershockEffectCommands:
db $00
ElectrodeChainLightningEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6595
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, ChainLightningEffect
db $00
RaichuAgilityEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $65dc
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, RaichuAgilityEffect
db $00
RaichuThunderEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $65ee
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $65fd
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, RaichuThunder_Recoil50PercentEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, RaichuThunder_RecoilEffect
db $00
RaichuGigashockEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $671f
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $660d
- dbw EFFECTCMDTYPE_UNKNOWN_08, $66c3
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Gigashock_BenchDamageEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Gigashock_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Gigashock_AISelectEffect
db $00
MagnetonThunderWaveEffectCommands:
@@ -1111,48 +1114,48 @@ MagnetonThunderWaveEffectCommands:
db $00
Magneton1SelfdestructEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6739
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Magneton1SelfdestructEffect
db $00
MagnetonSonicboomEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6758
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $675e
- dbw EFFECTCMDTYPE_AI, $6758
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, MagnetonSonicboom_UnaffectedByColorEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, MagnetonSonicboom_NullEffect
+ dbw EFFECTCMDTYPE_AI, MagnetonSonicboom_UnaffectedByColorEffect
db $00
Magneton2SelfdestructEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $675f
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Magneton2SelfdestructEffect
db $00
ZapdosPealOfThunderEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $677e
- dbw EFFECTCMDTYPE_PKMN_POWER_TRIGGER, $6780
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, PealOfThunder_InitialEffect
+ dbw EFFECTCMDTYPE_PKMN_POWER_TRIGGER, PealOfThunder_RandomlyDamageEffect
db $00
ZapdosBigThunderEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $67cb
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, BigThunderEffect
db $00
MagnemiteMagneticStormEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $67d5
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, MagneticStormEffect
db $00
ElectrodeSonicboomEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6870
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6876
- dbw EFFECTCMDTYPE_AI, $6870
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ElectrodeSonicboom_UnaffectedByColorEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, ElectrodeSonicboom_NullEffect
+ dbw EFFECTCMDTYPE_AI, ElectrodeSonicboom_UnaffectedByColorEffect
db $00
ElectrodeEnergySpikeEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6877
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $68f6
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $687b
- dbw EFFECTCMDTYPE_UNKNOWN_08, $68f1
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, EnergySpike_DeckCheck
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, EnergySpike_AttachEnergyEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, EnergySpike_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, EnergySpike_AISelectEffect
db $00
JolteonDoubleKickEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6938
- dbw EFFECTCMDTYPE_AI, $6930
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, JolteonDoubleKick_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, JolteonDoubleKick_AIEffect
db $00
JolteonStunNeedleEffectCommands:
@@ -1160,40 +1163,40 @@ JolteonStunNeedleEffectCommands:
db $00
EeveeTailWagEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $694e
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, TailWagEffect
db $00
EeveeQuickAttackEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $696a
- dbw EFFECTCMDTYPE_AI, $6962
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, EeveeQuickAttack_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, EeveeQuickAttack_AIEffect
db $00
SpearowMirrorMoveEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $697f
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $6981
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6987
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6989
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $6983
- dbw EFFECTCMDTYPE_UNKNOWN_08, $6985
- dbw EFFECTCMDTYPE_AI, $697d
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, SpearowMirrorMove_InitialEffect1
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, SpearowMirrorMove_InitialEffect2
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SpearowMirrorMove_BeforeDamage
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, SpearowMirrorMove_AfterDamage
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, SpearowMirrorMove_PlayerSelection
+ dbw EFFECTCMDTYPE_AI_SELECTION, SpearowMirrorMove_AISelection
+ dbw EFFECTCMDTYPE_AI, SpearowMirrorMove_AIEffect
db $00
FearowAgilityEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6ab8
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, FearowAgilityEffect
db $00
DragoniteStepInEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $6aca
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6ae8
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, StepIn_BenchCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, StepIn_SwitchEffect
db $00
Dragonite2SlamEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6afe
- dbw EFFECTCMDTYPE_AI, $6af6
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Dragonite2Slam_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, Dragonite2Slam_AIEffect
db $00
SnorlaxThickSkinnedEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6b15
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, ThickSkinnedEffect
db $00
SnorlaxBodySlamEffectCommands:
@@ -1201,98 +1204,98 @@ SnorlaxBodySlamEffectCommands:
db $00
FarfetchdLeekSlapEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6b1f
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6b34
- dbw EFFECTCMDTYPE_DISCARD_ENERGY, $6b2c
- dbw EFFECTCMDTYPE_AI, $6b17
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, LeekSlap_OncePerDuelCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, LeekSlap_NoDamage50PercentEffect
+ dbw EFFECTCMDTYPE_DISCARD_ENERGY, LeekSlap_SetUsedThisDuelFlag
+ dbw EFFECTCMDTYPE_AI, LeekSlap_AIEffect
db $00
KangaskhanFetchEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6b40
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, FetchEffect
db $00
KangaskhanCometPunchEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6b65
- dbw EFFECTCMDTYPE_AI, $6b5d
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, CometPunch_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, CometPunch_AIEffect
db $00
TaurosStompEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6b83
- dbw EFFECTCMDTYPE_AI, $6b7b
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, TaurosStomp_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, TaurosStomp_AIEffect
db $00
TaurosRampageEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6ba1
- dbw EFFECTCMDTYPE_AI, $6b96
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Rampage_Confusion50PercentEffect
+ dbw EFFECTCMDTYPE_AI, Rampage_AIEffect
db $00
DoduoFuryAttackEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6bc2
- dbw EFFECTCMDTYPE_AI, $6bba
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, FuryAttack_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, FuryAttack_AIEffect
db $00
DodrioRetreatAidEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6bd7
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, RetreatAidEffect
db $00
DodrioRageEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6bdf
- dbw EFFECTCMDTYPE_AI, $6bd9
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, DodrioRage_DamageBoostEffect
+ dbw EFFECTCMDTYPE_AI, DodrioRage_AIEffect
db $00
MeowthPayDayEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6be8
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, PayDayEffect
db $00
DragonairSlamEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6c14
- dbw EFFECTCMDTYPE_AI, $6c0c
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, DragonairSlam_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, DragonairSlam_AIEffect
db $00
DragonairHyperBeamEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6c35
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $6c2c
- dbw EFFECTCMDTYPE_UNKNOWN_08, $6c2f
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, DragonairHyperBeam_DiscardEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, DragonairHyperBeam_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, DragonairHyperBeam_AISelectEffect
db $00
ClefableMetronomeEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6c77
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $6c82
- dbw EFFECTCMDTYPE_UNKNOWN_08, $6c7e
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, ClefableMetronome_CheckAttacks
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, ClefableMetronome_UseAttackEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, ClefableMetronome_AISelectEffect
db $00
ClefableMinimizeEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6c88
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ClefableMinimizeEffect
db $00
PidgeotHurricaneEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6c8e
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, HurricaneEffect
db $00
PidgeottoWhirlwindEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6ce9
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $6cd3
- dbw EFFECTCMDTYPE_SWITCH_DEFENDING_PKMN, $6cd3
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, PidgeottoWhirlwind_SwitchEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, PidgeottoWhirlwind_SelectEffect
+ dbw EFFECTCMDTYPE_AI_SWITCH_DEFENDING_PKMN, PidgeottoWhirlwind_SelectEffect
db $00
PidgeottoMirrorMoveEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6cf2
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $6cf5
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6cfe
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6d01
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $6cf8
- dbw EFFECTCMDTYPE_UNKNOWN_08, $6cfb
- dbw EFFECTCMDTYPE_AI, $6cef
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, PidgeottoMirrorMove_InitialEffect1
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, PidgeottoMirrorMove_InitialEffect2
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PidgeottoMirrorMove_BeforeDamage
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, PidgeottoMirrorMove_AfterDamage
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, PidgeottoMirrorMove_PlayerSelection
+ dbw EFFECTCMDTYPE_AI_SELECTION, PidgeottoMirrorMove_AISelection
+ dbw EFFECTCMDTYPE_AI, PidgeottoMirrorMove_AIEffect
db $00
ClefairySingEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6d04
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SingEffect
db $00
ClefairyMetronomeEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6d0b
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $6d16
- dbw EFFECTCMDTYPE_UNKNOWN_08, $6d12
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, ClefairyMetronome_CheckAttacks
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, ClefairyMetronome_UseAttackEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, ClefairyMetronome_AISelectEffect
db $00
WigglytuffLullabyEffectCommands:
@@ -1300,8 +1303,8 @@ WigglytuffLullabyEffectCommands:
db $00
WigglytuffDoTheWaveEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6d87
- dbw EFFECTCMDTYPE_AI, $6d87
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, DoTheWaveEffect
+ dbw EFFECTCMDTYPE_AI, DoTheWaveEffect
db $00
JigglypuffLullabyEffectCommands:
@@ -1309,16 +1312,16 @@ JigglypuffLullabyEffectCommands:
db $00
JigglypuffFirstAidEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6d94
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6d9f
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, FirstAid_DamageCheck
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, FirstAid_HealEffect
db $00
JigglypuffDoubleEdgeEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6da6
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, JigglypuffDoubleEdgeEffect
db $00
PersianPounceEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6dac
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PounceEffect
db $00
LickitungTongueWrapEffectCommands:
@@ -1326,82 +1329,82 @@ LickitungTongueWrapEffectCommands:
db $00
LickitungSupersonicEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6db2
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, LickitungSupersonicEffect
db $00
PidgeyWhirlwindEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6dcf
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $6db9
- dbw EFFECTCMDTYPE_SWITCH_DEFENDING_PKMN, $6db9
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, PidgeyWhirlwind_SwitchEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, PidgeyWhirlwind_SelectEffect
+ dbw EFFECTCMDTYPE_AI_SWITCH_DEFENDING_PKMN, PidgeyWhirlwind_SelectEffect
db $00
PorygonConversion1EffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6dd5
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $6ded
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6dfb
- dbw EFFECTCMDTYPE_UNKNOWN_08, $6df7
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Conversion1_WeaknessCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Conversion1_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Conversion1_ChangeWeaknessEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Conversion1_AISelectEffect
db $00
PorygonConversion2EffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6e1f
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $6e31
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6e5e
- dbw EFFECTCMDTYPE_UNKNOWN_08, $6e3c
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Conversion2_ResistanceCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Conversion2_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Conversion2_ChangeResistanceEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, Conversion2_AISelectEffect
db $00
ChanseyScrunchEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6ee7
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ScrunchEffect
db $00
ChanseyDoubleEdgeEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6efb
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, ChanseyDoubleEdgeEffect
db $00
RaticateSuperFangEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6f07
- dbw EFFECTCMDTYPE_AI, $6f01
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SuperFang_HalfHPEffect
+ dbw EFFECTCMDTYPE_AI, SuperFang_AIEffect
db $00
TrainerCardAsPokemonEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $6f18
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6f3c
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $6f27
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, TrainerCardAsPokemon_BenchCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, TrainerCardAsPokemon_DiscardEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, TrainerCardAsPokemon_PlayerSelectSwitch
db $00
DragoniteHealingWindEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $6f51
- dbw EFFECTCMDTYPE_PKMN_POWER_TRIGGER, $6f53
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, HealingWind_InitialEffect
+ dbw EFFECTCMDTYPE_PKMN_POWER_TRIGGER, HealingWind_PlayAreaHealEffect
db $00
Dragonite1SlamEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $6fa4
- dbw EFFECTCMDTYPE_AI, $6f9c
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Dragonite1Slam_MultiplierEffect
+ dbw EFFECTCMDTYPE_AI, Dragonite1Slam_AIEffect
db $00
MeowthCatPunchEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6fe0
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, CatPunchEffect
db $00
DittoMorphEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $6ff6
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, MorphEffect
db $00
PidgeotSlicingWindEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $70bf
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, SlicingWindEffect
db $00
PidgeotGaleEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $70d0
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $70d6
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Gale_LoadAnimation
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, Gale_SwitchEffect
db $00
JigglypuffFriendshipSongEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $710d
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $7119
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, FriendshipSong_BenchCheck
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, FriendshipSong_AddToBench50PercentEffect
db $00
JigglypuffExpandEffectCommands:
- dbw EFFECTCMDTYPE_AFTER_DAMAGE, $7153
+ dbw EFFECTCMDTYPE_AFTER_DAMAGE, ExpandEffect
db $00
DoubleColorlessEnergyEffectCommands:
@@ -1426,68 +1429,68 @@ GrassEnergyEffectCommands:
db $00
SuperPotionEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7159
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $7167
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $71b5
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, SuperPotion_DamageEnergyCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, SuperPotion_PlayerSelectEffect
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, SuperPotion_HealEffect
db $00
ImakuniEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7216
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ImakuniEffect
db $00
EnergyRemovalEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7252
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $725f
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7273
- dbw EFFECTCMDTYPE_UNKNOWN_08, $726f
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, EnergyRemoval_EnergyCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, EnergyRemoval_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, EnergyRemoval_DiscardEffect
+ dbw EFFECTCMDTYPE_AI_SELECTION, EnergyRemoval_AISelection
db $00
EnergyRetrievalEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $728e
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $72a0
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $72f8
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $72b9
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, EnergyRetrieval_HandEnergyCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, EnergyRetrieval_PlayerHandSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, EnergyRetrieval_DiscardAndAddToHandEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, EnergyRetrieval_PlayerDiscardPileSelection
db $00
EnergySearchEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $731c
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7372
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $7328
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, EnergySearch_DeckCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, EnergySearch_AddToHandEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, EnergySearch_PlayerSelection
db $00
ProfessorOakEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $73a1
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ProfessorOakEffect
db $00
PotionEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $73ca
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $73d1
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $73ef
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Potion_DamageCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Potion_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Potion_HealEffect
db $00
GamblerEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $73f9
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, GamblerEffect
db $00
ItemFinderEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $743b
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $744a
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7463
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, ItemFinder_HandDiscardPileCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, ItemFinder_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ItemFinder_DiscardAddToHandEffect
db $00
DefenderEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $7488
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7499
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Defender_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Defender_AttachDefenderEffect
db $00
MysteriousFossilEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $74b3
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $74bf
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, MysteriousFossil_BenchCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, MysteriousFossil_PlaceInPlayAreaEffect
db $00
FullHealEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $74c5
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $74d1
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, FullHeal_StatusCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, FullHeal_ClearStatusEffect
db $00
ImposterProfessorOakEffectCommands:
@@ -1495,105 +1498,105 @@ ImposterProfessorOakEffectCommands:
db $00
ComputerSearchEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7513
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $752a
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7545
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $752e
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, ComputerSearch_HandDeckCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, ComputerSearch_PlayerDiscardHandSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ComputerSearch_DiscardAddToHandEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, ComputerSearch_PlayerDeckSelection
db $00
ClefairyDollEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7561
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $756d
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, ClefairyDoll_BenchCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ClefairyDoll_PlaceInPlayAreaEffect
db $00
MrFujiEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7573
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $757e
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $758f
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, MrFuji_BenchCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, MrFuji_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, MrFuji_ReturnToDeckEffect
db $00
PlusPowerEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $75e0
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PlusPowerEffect
db $00
SwitchEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $75ee
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $75f9
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $760a
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Switch_BenchCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Switch_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Switch_SwitchEffect
db $00
PokemonCenterEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7611
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7618
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, PokemonCenter_DamageCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PokemonCenter_HealDiscardEnergyEffect
db $00
PokemonFluteEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7659
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $7672
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $768f
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, PokemonFlute_BenchCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, PokemonFlute_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PokemonFlute_PlaceInPlayAreaText
db $00
PokemonBreederEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $76b3
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $76c1
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $76f4
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, PokemonBreeder_HandPlayAreaCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, PokemonBreeder_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PokemonBreeder_EvolveEffect
db $00
ScoopUpEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7795
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $77a0
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $77c3
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, ScoopUp_BenchCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, ScoopUp_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, ScoopUp_ReturnToHandEffect
db $00
PokemonTraderEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7826
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $7838
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $788d
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $7853
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, PokemonTrader_HandDeckCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, PokemonTrader_PlayerHandSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PokemonTrader_TradeCardsEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, PokemonTrader_PlayerDeckSelection
db $00
PokedexEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $78e1
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $79aa
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $78ed
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Pokedex_DeckCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Pokedex_OrderDeckCardsEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Pokedex_PlayerSelection
db $00
BillEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $79c4
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, BillEffect
db $00
LassEffectCommands:
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $79e3
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, LassEffect
db $00
MaintenanceEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7a70
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $7a7b
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7a85
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Maintenance_HandCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Maintenance_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Maintenance_ReturnToDeckAndDrawEffect
db $00
PokeBallEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7aad
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7b15
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $7ab9
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, PokeBall_DeckCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, PokeBall_AddToHandEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, PokeBall_PlayerSelection
db $00
RecycleEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7b36
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7b68
- dbw EFFECTCMDTYPE_REQUIRE_SELECTION, $7b41
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Recycle_DiscardPileCheck
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Recycle_AddToHandEffect
+ dbw EFFECTCMDTYPE_REQUIRE_SELECTION, Recycle_PlayerSelection
db $00
ReviveEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7b80
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $7b93
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7bb0
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, Revive_BenchCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, Revive_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, Revive_PlaceInPlayAreaEffect
db $00
DevolutionSprayEffectCommands:
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, $7c0b
- dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, $7c24
- dbw EFFECTCMDTYPE_BEFORE_DAMAGE, $7c99
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_1, DevolutionSpray_PlayAreaEvolutionCheck
+ dbw EFFECTCMDTYPE_INITIAL_EFFECT_2, DevolutionSpray_PlayerSelection
+ dbw EFFECTCMDTYPE_BEFORE_DAMAGE, DevolutionSpray_DevolutionEffect
db $00
SuperEnergyRemovalEffectCommands:
diff --git a/src/data/map_headers.asm b/src/data/map_headers.asm
index 7f57a06..06a2e20 100644
--- a/src/data/map_headers.asm
+++ b/src/data/map_headers.asm
@@ -1,37 +1,37 @@
; TODO: figure out the rest of the data for each map
; related to the table at 20:4e5d
MapHeaders: ; 1c374 (7:4374)
- db $00,$01,$00,$01,$01,MUSIC_OVERWORLD ; OVERWORLD_MAP
- db $02,$03,$00,$02,$02,MUSIC_OVERWORLD ; MASON_LABORATORY
- db $06,$07,$00,$02,$02,MUSIC_OVERWORLD ; DECK_MACHINE_ROOM
- db $0A,$0B,$00,$03,$03,MUSIC_OVERWORLD ; ISHIHARAS_HOUSE
- db $0C,$0D,$00,$03,$04,MUSIC_OVERWORLD ; FIGHTING_CLUB_ENTRANCE
- db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; FIGHTING_CLUB_LOBBY
- db $20,$21,$00,$04,$0D,MUSIC_CLUB_3 ; FIGHTING_CLUB
- db $0E,$0F,$00,$03,$05,MUSIC_OVERWORLD ; ROCK_CLUB_ENTRANCE
- db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; ROCK_CLUB_LOBBY
- db $22,$23,$00,$04,$0E,MUSIC_CLUB_2 ; ROCK_CLUB
- db $10,$11,$00,$03,$06,MUSIC_OVERWORLD ; WATER_CLUB_ENTRANCE
- db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; WATER_CLUB_LOBBY
- db $24,$25,$00,$02,$0F,MUSIC_CLUB_2 ; WATER_CLUB
- db $12,$13,$00,$03,$07,MUSIC_OVERWORLD ; LIGHTNING_CLUB_ENTRANCE
- db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; LIGHTNING_CLUB_LOBBY
- db $26,$27,$00,$05,$10,MUSIC_CLUB_1 ; LIGHTNING_CLUB
- db $14,$15,$00,$03,$08,MUSIC_OVERWORLD ; GRASS_CLUB_ENTRANCE
- db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; GRASS_CLUB_LOBBY
- db $28,$29,$00,$06,$11,MUSIC_CLUB_1 ; GRASS_CLUB
- db $16,$17,$00,$03,$09,MUSIC_OVERWORLD ; PSYCHIC_CLUB_ENTRANCE
- db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; PSYCHIC_CLUB_LOBBY
- db $2A,$2B,$00,$07,$12,MUSIC_CLUB_2 ; PSYCHIC_CLUB
- db $18,$19,$00,$03,$0A,MUSIC_OVERWORLD ; SCIENCE_CLUB_ENTRANCE
- db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; SCIENCE_CLUB_LOBBY
- db $2C,$2D,$00,$06,$13,MUSIC_CLUB_3 ; SCIENCE_CLUB
- db $1A,$1B,$00,$03,$0B,MUSIC_OVERWORLD ; FIRE_CLUB_ENTRANCE
- db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; FIRE_CLUB_LOBBY
- db $2E,$2F,$00,$08,$14,MUSIC_CLUB_3 ; FIRE_CLUB
- db $1C,$1D,$00,$03,$04,MUSIC_OVERWORLD ; CHALLENGE_HALL_ENTRANCE
- db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; CHALLENGE_HALL_LOBBY
- db $30,$31,$00,$09,$15,MUSIC_OVERWORLD ; CHALLENGE_HALL
- db $32,$33,$00,$0A,$16,MUSIC_OVERWORLD ; POKEMON_DOME_ENTRANCE
- db $36,$37,$00,$0A,$17,MUSIC_POKEMON_DOME ; POKEMON_DOME
+ db $00,$01,$00,$01,$01,MUSIC_OVERWORLD ; OVERWORLD_MAP
+ db $02,$03,$00,$02,$02,MUSIC_OVERWORLD ; MASON_LABORATORY
+ db $06,$07,$00,$02,$02,MUSIC_OVERWORLD ; DECK_MACHINE_ROOM
+ db $0A,$0B,$00,$03,$03,MUSIC_OVERWORLD ; ISHIHARAS_HOUSE
+ db $0C,$0D,$00,$03,$04,MUSIC_OVERWORLD ; FIGHTING_CLUB_ENTRANCE
+ db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; FIGHTING_CLUB_LOBBY
+ db $20,$21,$00,$04,$0D,MUSIC_CLUB_3 ; FIGHTING_CLUB
+ db $0E,$0F,$00,$03,$05,MUSIC_OVERWORLD ; ROCK_CLUB_ENTRANCE
+ db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; ROCK_CLUB_LOBBY
+ db $22,$23,$00,$04,$0E,MUSIC_CLUB_2 ; ROCK_CLUB
+ db $10,$11,$00,$03,$06,MUSIC_OVERWORLD ; WATER_CLUB_ENTRANCE
+ db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; WATER_CLUB_LOBBY
+ db $24,$25,$00,$02,$0F,MUSIC_CLUB_2 ; WATER_CLUB
+ db $12,$13,$00,$03,$07,MUSIC_OVERWORLD ; LIGHTNING_CLUB_ENTRANCE
+ db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; LIGHTNING_CLUB_LOBBY
+ db $26,$27,$00,$05,$10,MUSIC_CLUB_1 ; LIGHTNING_CLUB
+ db $14,$15,$00,$03,$08,MUSIC_OVERWORLD ; GRASS_CLUB_ENTRANCE
+ db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; GRASS_CLUB_LOBBY
+ db $28,$29,$00,$06,$11,MUSIC_CLUB_1 ; GRASS_CLUB
+ db $16,$17,$00,$03,$09,MUSIC_OVERWORLD ; PSYCHIC_CLUB_ENTRANCE
+ db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; PSYCHIC_CLUB_LOBBY
+ db $2A,$2B,$00,$07,$12,MUSIC_CLUB_2 ; PSYCHIC_CLUB
+ db $18,$19,$00,$03,$0A,MUSIC_OVERWORLD ; SCIENCE_CLUB_ENTRANCE
+ db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; SCIENCE_CLUB_LOBBY
+ db $2C,$2D,$00,$06,$13,MUSIC_CLUB_3 ; SCIENCE_CLUB
+ db $1A,$1B,$00,$03,$0B,MUSIC_OVERWORLD ; FIRE_CLUB_ENTRANCE
+ db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; FIRE_CLUB_LOBBY
+ db $2E,$2F,$00,$08,$14,MUSIC_CLUB_3 ; FIRE_CLUB
+ db $1C,$1D,$00,$03,$04,MUSIC_OVERWORLD ; CHALLENGE_HALL_ENTRANCE
+ db $1E,$1F,$00,$03,$0C,MUSIC_OVERWORLD ; CHALLENGE_HALL_LOBBY
+ db $30,$31,$00,$09,$15,MUSIC_OVERWORLD ; CHALLENGE_HALL
+ db $32,$33,$00,$0A,$16,MUSIC_OVERWORLD ; POKEMON_DOME_ENTRANCE
+ db $36,$37,$00,$0A,$17,MUSIC_POKEMON_DOME ; POKEMON_DOME
db $3A,$3B,$00,$0A,$18,MUSIC_HALL_OF_HONOR ; HALL_OF_HONOR
diff --git a/src/data/map_objects.asm b/src/data/map_objects.asm
index 4749a19..069b12d 100644
--- a/src/data/map_objects.asm
+++ b/src/data/map_objects.asm
@@ -538,7 +538,6 @@ PokemonDomeEntranceObjects: ; 13e5e (3:7e5e)
tx Text0500
tx Text04ff
-
db NORTH, 2, 8
dw PrintInteractableObjectText
tx Text0502
diff --git a/src/data/move_animations.asm b/src/data/move_animations.asm
index f774afa..222a6d7 100644
--- a/src/data/move_animations.asm
+++ b/src/data/move_animations.asm
@@ -167,7 +167,7 @@ PointerTable_MoveAnimation:
dw MoveAnimation_5673
dw MoveAnimation_5673
-MoveAnimation_52c6: ; (6:52c6)
+MoveAnimation_52c6: ; (6:52c6)
anim_player ANIM_SPELL_MOVE
anim_opponent ANIM_GET_HIT
anim_normal ANIM_SHAKE1
@@ -391,7 +391,7 @@ MoveAnimation_53eb:
MoveAnimation_53f6:
anim_player ANIM_SPELL_MOVE
- anim_opponent ANIM_FURY_SWEEPES
+ anim_opponent ANIM_FURY_SWIPES
anim_opponent ANIM_GET_HIT
anim_normal ANIM_SHAKE1
anim_opponent ANIM_SHOW_DAMAGE
diff --git a/src/engine/bank01.asm b/src/engine/bank01.asm
index c4a6b27..a7184a6 100644
--- a/src/engine/bank01.asm
+++ b/src/engine/bank01.asm
@@ -187,7 +187,7 @@ MainDuelLoop: ; 40ee (1:40ee)
cp TURN_PLAYER_WON
jr z, .active_duelist_won_battle
cp TURN_PLAYER_LOST
- jr z, .active_duelist_lost_batte
+ jr z, .active_duelist_lost_battle
ld a, $5f
ld c, MUSIC_DARK_DIDDLY
ldtx hl, DuelWasADrawText
@@ -205,7 +205,7 @@ MainDuelLoop: ; 40ee (1:40ee)
ldtx hl, WonDuelText
jr .handle_duel_finished
-.active_duelist_lost_batte
+.active_duelist_lost_battle
ldh a, [hWhoseTurn]
cp PLAYER_TURN
jr nz, .player_won_battle
@@ -778,8 +778,8 @@ PlayPokemonCard: ; 44db (1:44db)
ldh [hTemp_ffa0], a
ldh a, [hTempPlayAreaLocation_ff9d]
ldh [hTempPlayAreaLocation_ffa1], a
- call EvolvePokemonCard
- jr c, .try_evolve_loop ; jump if evolution wasn't successsful somehow
+ call EvolvePokemonCardIfPossible
+ jr c, .try_evolve_loop ; jump if evolution wasn't successful somehow
ld a, OPPACTION_EVOLVE_PKMN
call SetOppAction_SerialSendDuelData
call PrintPlayAreaCardList_EnableLCD
@@ -1019,7 +1019,7 @@ HandleEnergyDiscardMenuInput: ; 46b7 (1:46b7)
scf
ret
-EnergyDiscardCardListParameters:
+EnergyDiscardCardListParameters: ; 46f3 (1:46f3)
db 1, 5 ; cursor x, cursor y
db 4 ; item x
db 14 ; maximum length, in tiles, occupied by the name and level string of each card in the list
@@ -1161,7 +1161,7 @@ OpenMovePage: ; 478b (1:478b)
jr z, .loop
ret
-AttackMenuParameters:
+AttackMenuParameters: ; 47e4 (1:47e4)
db 1, 13 ; cursor x, cursor y
db 2 ; y displacement between items
db 2 ; number of items
@@ -1438,10 +1438,17 @@ CheckIfActiveCardParalyzedOrAsleep: ; 4918 (1:4918)
scf
ret
-; display the animation of the turn duelist drawing a card at the beginning of the turn
+; display the animation of the turn duelist drawing one card at the beginning of the turn
; if there isn't any card left in the deck, let the player know with a text message
DisplayDrawOneCardScreen: ; 4933 (1:4933)
ld a, 1
+; fallthrough
+
+; display the animation of the turn duelist drawing number of cards that is in a.
+; if there isn't any card left in the deck, let the player know with a text message.
+; input:
+; - a = number of cards to draw
+DisplayDrawNCardsScreen: ; 4935 (1:4935)
push hl
push de
push bc
@@ -1547,14 +1554,14 @@ PrintDeckAndHandIconsAndNumberOfCards: ; 49ca (1:49ca)
; prints, for each duelist, the number of cards in the hand, and the number
; of cards in the deck, according to their placement in the draw card(s) screen.
; input: wNumCardsBeingDrawn = number of cards being drawn (in order to add
-; them to the hand cards and substract them from the deck cards).
+; them to the hand cards and subtract them from the deck cards).
PrintNumberOfHandAndDeckCards: ; 49ed (1:49ed)
ldh a, [hWhoseTurn]
cp PLAYER_TURN
jr nz, PrintOpponentNumberOfHandAndDeckCards
; fallthrough
-PrintPlayerNumberOfHandAndDeckCards:
+PrintPlayerNumberOfHandAndDeckCards: ; 49f3 (1:49f3)
ld a, [wPlayerNumberOfCardsInHand]
ld hl, wNumCardsBeingDrawn
add [hl]
@@ -1572,7 +1579,7 @@ PrintPlayerNumberOfHandAndDeckCards:
lb bc, 10, 10
jp WriteTwoDigitNumberInTxSymbolFormat
-PrintOpponentNumberOfHandAndDeckCards:
+PrintOpponentNumberOfHandAndDeckCards: ; 4a14 (1:4a14)
ld a, [wOpponentNumberOfCardsInHand]
ld hl, wNumCardsBeingDrawn
add [hl]
@@ -1590,7 +1597,7 @@ PrintOpponentNumberOfHandAndDeckCards:
lb bc, 11, 3
jp WriteTwoDigitNumberInTxSymbolFormat
-DeckAndHandIconsTileData:
+DeckAndHandIconsTileData: ; 4a35 (1:4a35)
; x, y, tiles[], 0
db 4, 3, SYM_CROSS, 0 ; x for opponent's hand
db 10, 3, SYM_CROSS, 0 ; x for opponent's deck
@@ -1606,7 +1613,7 @@ DeckAndHandIconsTileData:
db 13, 10, $fa, $fb, 0 ; player's hand icon
db $ff
-DeckAndHandIconsCGBPalData:
+DeckAndHandIconsCGBPalData: ; 4a6e (1:4a6e)
; x, y, pals[], 0
db 8, 2, $02, $02, 0
db 8, 3, $02, $02, 0
@@ -1941,7 +1948,7 @@ ChooseInitialArenaAndBenchPokemon: ; 4cd5 (1:4cd5)
; link opponent's turn
.exchange_duelvars
- ldtx hl, TransmitingDataText
+ ldtx hl, TransmittingDataText
call DrawWideTextBox_PrintText
call ExchangeRNG
ld hl, wPlayerDuelVariables
@@ -2134,7 +2141,7 @@ DisplayNoBasicPokemonInHandScreen: ; 4e06 (1:4e06)
call WaitForWideTextBoxInput
ret
-NoBasicPokemonCardListParameters:
+NoBasicPokemonCardListParameters: ; 4e37 (1:4e37)
db 1, 3 ; cursor x, cursor y
db 4 ; item x
db 14 ; maximum length, in tiles, occupied by the name and level string of each card in the list
@@ -2268,11 +2275,11 @@ Func_4e98: ; 4e98 (1:4e98)
Func_4f2d: ; 4f2d (1:4f2d)
ld a, [wDuelDisplayedScreen]
cp SHUFFLE_DECK
- jr z, .asm_4f3d
+ jr z, .skip_draw_scene
call ZeroObjectPositionsAndToggleOAMCopy
call EmptyScreen
call DrawDuelistPortraitsAndNames
-.asm_4f3d
+.skip_draw_scene
ld a, SHUFFLE_DECK
ld [wDuelDisplayedScreen], a
ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
@@ -2573,7 +2580,7 @@ DrawDuelHUD: ; 5093 (1:5093)
.done
ret
-; draws an horizonal line that separates the arena side of each duelist
+; draws an horizontal line that separates the arena side of each duelist
; also colorizes the line on CGB
DrawDuelHorizontalSeparator: ; 516f (1:516f)
ld hl, DuelHorizontalSeparatorTileData
@@ -3061,7 +3068,7 @@ PracticeDuelVerify_Turn7Or8: ; 54b7 (1:54b7)
jr nz, ReturnWrongAction
ret
-ReturnWrongAction:
+ReturnWrongAction: ; 54c6 (1:54c6)
scf
ret
@@ -3204,7 +3211,7 @@ Func_5591: ; 5591 (1:5591)
; Discard Pile card list, including a bottom-right image of the current card.
; since this loads the text for the Hand card list screen, SetDiscardPileScreenTexts
; is called after this if the screen corresponds to a Discard Pile list.
-; the dimensions of text box where the card list is printed are 20x13, in order to accomodate
+; the dimensions of text box where the card list is printed are 20x13, in order to accommodate
; another text box below it (wCardListInfoBoxText) as well as the image of the selected card.
InitAndDrawCardListScreenLayout: ; 559a (1:559a)
xor a
@@ -3230,7 +3237,7 @@ InitAndDrawCardListScreenLayout: ; 559a (1:559a)
; same as InitAndDrawCardListScreenLayout, except that variables like wSelectedDuelSubMenuItem,
; wNoItemSelectionMenuKeys, wCardListInfoBoxText, wCardListHeaderText, etc already set by caller.
-DrawCardListScreenLayout:
+DrawCardListScreenLayout: ; 55be (1:55be)
call ZeroObjectPositionsAndToggleOAMCopy
call EmptyScreen
call LoadSymbolsFont
@@ -3439,7 +3446,7 @@ CardListItemSelectionMenu: ; 56c2 (1:56c2)
ret
ItemSelectionMenuParameters: ; 5708 (1:5708)
- db 1, 14 ; corsor x, cursor y
+ db 1, 14 ; cursor x, cursor y
db 2 ; y displacement between items
db 2 ; number of items
db SYM_CURSOR_R ; cursor tile number
@@ -3481,7 +3488,7 @@ CardListFunction: ; 5719 (1:5719)
Func_5735: ; 5735 (1:5735)
ld hl, wcbd8
- ld de, Func_574a
+ ld de, PrintSortNumberInCardList
ld [hl], e
inc hl
ld [hl], d
@@ -3493,7 +3500,11 @@ Func_5744: ; 5744 (1:5744)
ld hl, wcbd8
jp CallIndirect
-Func_574a: ; 574a (1:574a)
+; goes through list in wDuelTempList + 10
+; and prints the number stored in each entry
+; beside the corresponding card in screen.
+; used in lists for reordering cards in the Deck.
+PrintSortNumberInCardList: ; 574a (1:574a)
lb bc, 1, 2
ld hl, wDuelTempList + 10
.next
@@ -3502,7 +3513,7 @@ Func_574a: ; 574a (1:574a)
jr z, .done
or a ; SYM_SPACE
jr z, .space
- add SYM_0
+ add SYM_0 ; load number symbol
.space
call WriteByteToBGMap0
; move two lines down
@@ -3606,7 +3617,10 @@ DisplayCardPageOnLeftOrRightPressed: ; 57cd (1:57cd)
call c, DisplayCardPage
ret
-Func_57df: ; 57df (1:57df)
+; draws text box that covers the whole screen
+; and prints the text ID in hl, then
+; waits for Player input.
+DrawWholeScreenTextBox: ; 57df (1:57df)
push hl
call EmptyScreen
lb de, 0, 0
@@ -3778,7 +3792,7 @@ GoToFirstOrNextCardPage: ; 58e2 (1:58e2)
; stay in this page if it exists, or skip to previous page if it doesn't
or a
ret nz
- ; non-existant page: skip to next
+ ; non-existent page: skip to next
jr .advance_page
.set_card_page
ld [wCardPageNumber], a
@@ -3795,7 +3809,7 @@ GoToPreviousCardPage: ; 5911 (1:5911)
; stay in this page if it exists, or skip to previous page if it doesn't
or a
ret nz
- ; non-existant page: skip to previous
+ ; non-existent page: skip to previous
jr GoToPreviousCardPage
.set_card_page
ld [wCardPageNumber], a
@@ -3814,7 +3828,7 @@ GoToPreviousCardPage: ; 5911 (1:5911)
; return with the equivalent to one of these three actions:
; stay in card page trying to switch to (nc, nz)
; change to card page returned in a if D_LEFT/D_RIGHT pressed, or exit if A_BUTTON/START pressed (c)
- ; non-existant page, so skip to next/previous (nc, z)
+ ; non-existent page, so skip to next/previous (nc, z)
SwitchCardPage: ; 5930 (1:5930)
ld hl, CardPageSwitchPointerTable
jp JumpToFunctionInTable
@@ -5170,7 +5184,7 @@ Func_6137: ; 6137 (1:6137)
call EraseCursor
; fallthrough
-Func_615c:
+Func_615c: ; 615c (1:615c)
ld a, [wCurrentDuelMenuItem]
ld d, a
add a
@@ -5194,7 +5208,7 @@ Func_616e: ; 616e (1:616e)
call EnableLCD
; fallthrough
-Func_6186:
+Func_6186: ; 6186 (1:6186)
ld hl, wCurPlayAreaSlot
ldh a, [hTempPlayAreaLocation_ff9d]
ld [hli], a
@@ -5813,10 +5827,10 @@ TwoByteNumberToTxSymbol_TrimLeadingZeros_Bank1: ; 65d1 (1:65d1)
.get_digit
ld a, SYM_0 - 1
-.substract_loop
+.subtract_loop
inc a
add hl, bc
- jr c, .substract_loop
+ jr c, .subtract_loop
ld [de], a
inc de
ld a, l
@@ -6404,7 +6418,7 @@ OppActionTable: ; 695e (1:695e)
dw OppAction_TossCoinATimes
dw OppAction_6b30
dw OppAction_NoAction
- dw OppAction_6b3e
+ dw OppAction_UseMetronomeAttack
dw OppAction_6b15
dw OppAction_DrawDuelMainScene
@@ -6447,7 +6461,7 @@ OppAction_EvolvePokemonCard: ; 69c5 (1:69c5)
ldh [hTempCardIndex_ff98], a
call LoadCardDataToBuffer1_FromDeckIndex
call DrawLargePictureOfCard
- call EvolvePokemonCard
+ call EvolvePokemonCardIfPossible
call PrintPokemonEvolvedIntoPokemon
call Func_161e
call DrawDuelMainScene
@@ -6656,7 +6670,7 @@ OppAction_6b30: ; 6b30 (1:6b30)
ldh [hWhoseTurn], a
ret
-OppAction_6b3e: ; 6b3e (1:6b3e)
+OppAction_UseMetronomeAttack: ; 6b3e (1:6b3e)
call DrawDuelMainScene
ld a, DUELVARS_ARENA_CARD_STATUS
call GetTurnDuelistVariable
@@ -6682,7 +6696,7 @@ OppAction_6b3e: ; 6b3e (1:6b3e)
call Func_16f6
pop bc
ld a, c
- ld [wccf0], a
+ ld [wMetronomeEnergyCost], a
ret
OppAction_NoAction: ; 6b7d (1:6b7d)
@@ -6945,7 +6959,6 @@ Func_6cfa: ; 6cfa (1:6cfa)
pop hl
call WaitForWideTextBoxInput
ret
-; 0x6d3f
Func_6d3f: ; 6d3f (1:6d3f)
or a
@@ -6974,7 +6987,7 @@ Func_6d3f: ; 6d3f (1:6d3f)
ld d, $00
ld a, DUELVARS_ARENA_CARD_HP
call GetTurnDuelistVariable
- call SubstractHP
+ call SubtractHP
push hl
ld a, $8c
call Func_6cab
@@ -6985,7 +6998,6 @@ Func_6d3f: ; 6d3f (1:6d3f)
pop af
pop hl
ret
-; 0x6d84
; given the deck index of a turn holder's card in register a,
; and a pointer in hl to the wLoadedCard* buffer where the card data is loaded,
@@ -7386,9 +7398,9 @@ Func_6ff7: ; 6ff7 (1:6ff7)
ret
; print one of the "There was no effect from" texts depending
-; on the value at wNoEffectFromStatus (NO_STATUS or a status condition constant)
+; on the value at wNoEffectFromWhichStatus (NO_STATUS or a status condition constant)
PrintThereWasNoEffectFromStatusText: ; 700a (1:700a)
- ld a, [wNoEffectFromStatus]
+ ld a, [wNoEffectFromWhichStatus]
or a
jr nz, .status
ld hl, wLoadedMoveName
@@ -7490,7 +7502,8 @@ GetCardOneStageBelow: ; 7045 (1:7045)
ld hl, wAllStagesIndices ; pointing to basic
cp STAGE1
jr z, .done
- cp STAGE2 + 1 ; unnecessary check?
+ ; if stage1 was skipped, hl should point to Basic stage card
+ cp STAGE2_WITHOUT_STAGE1
jr z, .done
inc hl ; pointing to stage 1
.done
@@ -7548,7 +7561,7 @@ SetAllPlayAreaPokemonCanEvolve: ; 70f6 (1:70f6)
ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
call GetTurnDuelistVariable
ld c, a
- ld l, DUELVARS_ARENA_CARD_FLAGS_C2
+ ld l, DUELVARS_ARENA_CARD_FLAGS
.next_pkmn_loop
res 5, [hl]
set CAN_EVOLVE_THIS_TURN_F, [hl]
@@ -7894,12 +7907,154 @@ _TossCoin: ; 71ad (1:71ad)
ret
; 0x72ff
- INCROM $72ff, $7354
+Func_72ff: ; 72ff (1:72ff)
+ ldh [hff96], a
+ ld a, [wDuelType]
+ cp DUELTYPE_LINK
+ ret nz
+ ldh a, [hff96]
+ call SerialSendByte
+ call Func_7344
+ ret
+; 0x7310
+
+Func_7310: ; 7310 (1:7310)
+ ldh [hff96], a
+ ld a, [wDuelType]
+ cp DUELTYPE_LINK
+ jr z, .asm_7338
+.asm_7319
+ call DoFrame
+ call CheckAnyAnimationPlaying
+ jr c, .asm_7319
+ ldh a, [hff96]
+ ret
+ ldh [hff96], a
+ ld a, [wDuelType]
+ cp DUELTYPE_LINK
+ jr z, .asm_7338
+ ld a, 30
+.asm_732f
+ call DoFrame
+ dec a
+ jr nz, .asm_732f
+ ldh a, [hff96]
+ ret
+.asm_7338
+ call DoFrame
+ call SerialRecvByte
+ jr c, .asm_7338
+ call Func_7344
+ ret
+; 0x7344
+
+Func_7344: ; 7344 (1:7344)
+ push af
+ ld a, [wSerialFlags]
+ or a
+ jr nz, .asm_734d
+ pop af
+ ret
+.asm_734d
+ call Func_3b31
+ call DuelTransmissionError
+ ret
+; 0x7354
BuildVersion: ; 7354 (1:7354)
db "VER 12/20 09:36", TX_END
- INCROM $7364, $7415
+Func_7364: ; 7364 (1:7364)
+ xor a
+ ld [wTileMapFill], a
+ call ZeroObjectPositionsAndToggleOAMCopy
+ call EmptyScreen
+ call LoadSymbolsFont
+ lb de, $38, $9f
+ call SetupText
+ call DrawWideTextBox
+ call EnableLCD
+ xor a
+ ld [wOpponentDeckID], a
+ call Func_73d8
+.asm_7384
+ call DoFrame
+ ldh a, [hDPadHeld]
+ or a
+ jr z, .asm_7384
+ ld b, a
+ and A_BUTTON | START
+ jr nz, .asm_73cd
+ bit B_BUTTON_F, b
+ jr nz, .asm_73cb
+ ld a, [wOpponentDeckID]
+ bit D_RIGHT_F, b
+ jr z, .asm_73a2
+ inc a
+ cp $35
+ jr c, .asm_73a2
+ xor a
+.asm_73a2
+ bit D_LEFT_F, b
+ jr z, .asm_73ae
+ or a
+ jr nz, .asm_73ad
+ ld a, IMAKUNI_DECK_ID
+ jr .asm_73ae
+.asm_73ad
+ dec a
+.asm_73ae
+ bit D_UP_F, b
+ jr z, .asm_73b9
+ add $0a
+ cp $35
+ jr c, .asm_73b9
+ xor a
+.asm_73b9
+ bit D_DOWN_F, b
+ jr z, .asm_73c3
+ sub $0a
+ jr nc, .asm_73c3
+ ld a, IMAKUNI_DECK_ID
+.asm_73c3
+ ld [wOpponentDeckID], a
+ call Func_73d8
+ jr .asm_7384
+.asm_73cb
+ scf
+ ret
+.asm_73cd
+ ld a, [wOpponentDeckID]
+ ld [wcc19], a
+ call Func_3ae8
+ or a
+ ret
+; 0x73d8
+
+Func_73d8: ; 73d8 (1:73d8)
+ ld a, [wOpponentDeckID]
+ ld [wcc19], a
+ call Func_3ae8
+ jr c, .asm_73ec
+ xor a
+ ld [wOpponentPortrait], a
+ ld hl, wOpponentName
+ ld [hli], a
+ ld [hl], a
+.asm_73ec
+ ld hl, $7408
+ call PlaceTextItems
+ call DrawDuelistPortraitsAndNames
+ ld a, [wOpponentDeckID]
+ lb bc, 5, 16
+ call WriteTwoByteNumberInTxSymbolFormat
+ ld a, [wcc18]
+ lb bc, 15, 10
+ call WriteTwoByteNumberInTxSymbolFormat
+ ret
+; 0x7408
+
+ INCROM $7408, $7415
Func_7415: ; 7415 (1:7415)
xor a
@@ -7965,7 +8120,7 @@ PlayAttackAnimation_DealAttackDamageSimple: ; 7469 (1:7469)
call WaitMoveAnimation
pop de
pop hl
- call SubstractHP
+ call SubtractHP
ld a, [wDuelDisplayedScreen]
cp DUEL_MAIN_SCENE
ret nz
@@ -8042,7 +8197,6 @@ PlayMoveAnimation: ; 7494 (1:7494)
Func_7571: ; 7571 (1:7571)
farcall Func_19c20
ret
-; 0x7576
Func_7576: ; 7576 (1:7576)
farcall Func_1991f
@@ -8054,7 +8208,6 @@ Func_7576: ; 7576 (1:7576)
Func_758f: ; 758f (1:758f)
farcall Func_1a4cf
ret
-; 0x7594
Func_7594: ; 7594 (1:7594)
farcall Func_1a61f
diff --git a/src/engine/bank02.asm b/src/engine/bank02.asm
index eefd707..1e6179b 100644
--- a/src/engine/bank02.asm
+++ b/src/engine/bank02.asm
@@ -105,7 +105,7 @@ OpenYourOrOppPlayAreaScreen_TurnHolderPlayArea: ; 809e (2:409e)
ldh [hWhoseTurn], a
ret
-OpenYourOrOppPlayAreaScreen_NonTurnHolderPlayArea:
+OpenYourOrOppPlayAreaScreen_NonTurnHolderPlayArea: ; 80a8 (2:40a8)
ldh a, [hWhoseTurn]
push af
bank1call OpenNonTurnHolderPlayAreaScreen
@@ -113,7 +113,7 @@ OpenYourOrOppPlayAreaScreen_NonTurnHolderPlayArea:
ldh [hWhoseTurn], a
ret
-OpenYourOrOppPlayAreaScreen_TurnHolderHand:
+OpenYourOrOppPlayAreaScreen_TurnHolderHand: ; 80b2 (2:40b2)
ldh a, [hWhoseTurn]
push af
bank1call OpenTurnHolderHandScreen_Simple
@@ -121,7 +121,7 @@ OpenYourOrOppPlayAreaScreen_TurnHolderHand:
ldh [hWhoseTurn], a
ret
-OpenYourOrOppPlayAreaScreen_NonTurnHolderHand:
+OpenYourOrOppPlayAreaScreen_NonTurnHolderHand: ; 80bc (2:40bc)
ldh a, [hWhoseTurn]
push af
bank1call OpenNonTurnHolderHandScreen_Simple
@@ -129,7 +129,7 @@ OpenYourOrOppPlayAreaScreen_NonTurnHolderHand:
ldh [hWhoseTurn], a
ret
-OpenYourOrOppPlayAreaScreen_TurnHolderDiscardPile:
+OpenYourOrOppPlayAreaScreen_TurnHolderDiscardPile: ; 80c6 (2:40c6)
ldh a, [hWhoseTurn]
push af
bank1call OpenTurnHolderDiscardPileScreen
@@ -137,7 +137,7 @@ OpenYourOrOppPlayAreaScreen_TurnHolderDiscardPile:
ldh [hWhoseTurn], a
ret
-OpenYourOrOppPlayAreaScreen_NonTurnHolderDiscardPile:
+OpenYourOrOppPlayAreaScreen_NonTurnHolderDiscardPile: ; 80d0 (2:40d0)
ldh a, [hWhoseTurn]
push af
bank1call OpenNonTurnHolderDiscardPileScreen
@@ -191,7 +191,6 @@ DuelCheckMenu_OppPlayArea: ; 80da (2:40da)
call DrawYourOrOppPlayArea_DrawArrows
call DrawWideTextBox
-
; reset cursor blink
xor a
ld [wCheckMenuCursorBlinkCounter], a
@@ -234,25 +233,25 @@ DuelCheckMenu_OppPlayArea: ; 80da (2:40da)
dw OpenYourOrOppPlayAreaScreen_NonTurnHolderHand
dw OpenYourOrOppPlayAreaScreen_NonTurnHolderDiscardPile
-CheckMenuData: ; (2:4158)
+CheckMenuData: ; 8158 (2:4158)
textitem 2, 14, InPlayAreaText
textitem 2, 16, YourPlayAreaText
textitem 12, 14, GlossaryText
textitem 12, 16, OppPlayAreaText
db $ff
-YourPlayAreaMenuData: ; (2:4169)
+YourPlayAreaMenuData: ; 8169 (2:4169)
textitem 2, 14, YourPokemonText
textitem 12, 14, YourHandText
textitem 2, 16, YourDiscardPileText2
db $ff
-OppPlayAreaMenuData: ; (2:4176)
+OppPlayAreaMenuData: ; 8176 (2:4176)
textitem 2, 14, OpponentsPokemonText
textitem 2, 16, OpponentsDiscardPileText2
db $ff
-OppPlayAreaMenuData_WithClairvoyance: ; (2:4176)
+OppPlayAreaMenuData_WithClairvoyance: ; 8176 (2:4176)
textitem 2, 14, OpponentsPokemonText
textitem 12, 14, OpponentsHandText
textitem 2, 16, OpponentsDiscardPileText2
@@ -1288,7 +1287,7 @@ HandleCheckMenuInput_YourOrOppPlayArea: ; 86ac (2:46ac)
call EraseCheckMenuCursor_YourOrOppPlayArea
pop de
-;update x and y cursor positions
+; update x and y cursor positions
ld a, d
ld [wCheckMenuCursorXPosition], a
ld a, e
@@ -1513,7 +1512,7 @@ Func_8819: ; 8819 (2:4819)
call GetTurnDuelistVariable
jr Func_8855
-Func_883c:
+Func_883c: ; 883c (2:483c)
call CreateHandCardList
ret c
ld hl, wDuelTempList
@@ -1521,7 +1520,7 @@ Func_883c:
ld a, [hl]
jr Func_8855
-Func_8849:
+Func_8849: ; 8849 (2:4849)
call CreateDeckCardList
ret c
ld a, %01111111
@@ -1534,7 +1533,7 @@ Func_8849:
; output:
; a = ce5c
; with upper bit set if turn was swapped
-Func_8855:
+Func_8855: ; 8855 (2:4855)
ld b, a
ld a, [$ce5c]
or a
@@ -2308,7 +2307,7 @@ HandleCheckMenuInput: ; 9065 (2:5065)
call EraseCheckMenuCursor
pop de
-;update x and y cursor positions
+; update x and y cursor positions
ld a, d
ld [wCheckMenuCursorXPosition], a
ld a, e
@@ -2360,7 +2359,7 @@ EraseCheckMenuCursor: ; 90d8 (2:50d8)
; draws in the cursor position
; input:
; a = tile byte to draw
-DrawCheckMenuCursor:
+DrawCheckMenuCursor: ; 90da (2:50da)
ld e, a
ld a, 10
ld l, a
diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm
index b4561f3..f696096 100644..100755
--- a/src/engine/bank03.asm
+++ b/src/engine/bank03.asm
@@ -2712,27 +2712,61 @@ Func_d244: ; d244 (3:5244)
farcall Func_80ba4
jp IncreaseScriptPointerBy2
-Func_d24c: ; d24c (3:524c)
- ld hl, $525e
+ScriptCommand_ChooseDeckToDuelAgainstMultichoice: ; d24c (3:524c)
+ ld hl, .multichoice_menu_args
xor a
- call Func_d28c
- ld a, [wd695]
+ call ShowMultichoiceTextbox
+ ld a, [wMultichoiceTextboxResult_ChooseDeckToDuelAgainst]
ld c, a
set_flag_value EVENT_FLAG_76
jp IncreaseScriptPointerBy1
- INCROM $d25e, $d271
+.multichoice_menu_args ; d25e
+ dw $0000 ; NPC title for textbox under menu
+ tx Text03f9 ; text for textbox under menu
+ dw MultichoiceTextbox_ConfigTable_ChooseDeckToDuelAgainst ; location of table configuration in bank 4
+ db $03 ; the value to return when b is pressed
+ dw wMultichoiceTextboxResult_ChooseDeckToDuelAgainst ; ram location to return result into
+ dw .text_entries ; location of table containing text entries
+
+.text_entries ; d269
+ tx Text03f6
+ tx Text03f7
+ tx Text03f8
-Func_d271: ; d271 (3:5271)
- ld hl, $527b
+ INCROM $d26f, $d271
+
+ScriptCommand_ChooseStarterDeckMultichoice: ; d271 (3:5271)
+ ld hl, .multichoice_menu_args
xor a
- call Func_d28c
+ call ShowMultichoiceTextbox
jp IncreaseScriptPointerBy1
; 0xd27b
- INCROM $d27b, $d28c
-
-Func_d28c: ; d28c (3:528c)
+.multichoice_menu_args ; d27b
+ dw $0000 ; NPC title for textbox under menu
+ tx Text03fd ; text for textbox under menu
+ dw MultichoiceTextbox_ConfigTable_ChooseDeckStarterDeck ; location of table configuration in bank 4
+ db $00 ; the value to return when b is pressed
+ dw $d693 ; ram location to return result into
+ dw .text_entries ; location of table containing text entries
+
+.text_entries
+ tx Text03fa
+ tx Text03fb
+ tx Text03fc
+
+
+; displays a textbox with multiple choices and a cursor.
+; takes as an argument in h1 a pointer to a table
+; dw text id for NPC title for textbox under menu
+; dw text id for textbox under menu
+; dw location of table configuration in bank 4
+; db the value to return when b is pressed
+; dw ram location to return result into
+; dw location of table containing text entries (optional)
+
+ShowMultichoiceTextbox: ; d28c (3:528c)
ld [wd416], a
push hl
call Func_c241
@@ -2808,31 +2842,42 @@ Func_d28c: ; d28c (3:528c)
.asm_d2f5
ret
-Func_d2f6: ; d2f6 (3:52f6)
- ld hl, $530c
+ScriptCommand_ShowSamNormalMultichoice: ; d2f6 (3:52f6)
+ ld hl, .multichoice_menu_args
xor a
- call Func_d28c
- ld a, [wd694]
+ call ShowMultichoiceTextbox
+ ld a, [wMultichoiceTextboxResult_Sam]
ld c, a
set_flag_value EVENT_FLAG_75
xor a
- ld [wd694], a
+ ld [wMultichoiceTextboxResult_Sam], a
jp IncreaseScriptPointerBy1
; 0xd30c
- INCROM $d30c, $d317
-
-Func_d317: ; d317 (3:5317)
- ld hl, $532b
- ld a, [wd694]
- call Func_d28c
- ld a, [wd694]
+.multichoice_menu_args ; d30c
+ tx SamNPCName ; NPC title for textbox under menu
+ tx Text03fe ; text for textbox under menu
+ dw SamNormalMultichoice_ConfigurationTable ; location of table configuration in bank 4
+ db $03 ; the value to return when b is pressed
+ dw wMultichoiceTextboxResult_Sam ; ram location to return result into
+ dw $0000 ; location of table containing text entries
+
+ScriptCommand_ShowSamTutorialMultichoice: ; d317 (3:5317)
+ ld hl, .multichoice_menu_args
+ ld a, [wMultichoiceTextboxResult_Sam]
+ call ShowMultichoiceTextbox
+ ld a, [wMultichoiceTextboxResult_Sam]
ld c, a
set_flag_value EVENT_FLAG_75
jp IncreaseScriptPointerBy1
-Unknown_d32b: ; d32b (3:532b)
- INCROM $d32b, $d336
+.multichoice_menu_args: ; d32b (3:532b)
+ dw $0000 ; NPC title for textbox under menu
+ dw $0000 ; text for textbox under menu
+ dw SamTutorialMultichoice_ConfigurationTable ; location of table configuration in bank 4
+ db $07 ; the value to return when b is pressed
+ dw wMultichoiceTextboxResult_Sam ; ram location to return result into
+ dw $0000
ScriptCommand_OpenDeckMachine: ; d336 (3:5336)
push bc
@@ -3278,7 +3323,7 @@ Script_d794: ; d794 (3:5794)
.ows_d7bc
close_text_box
- run_command Func_d317
+ show_sam_tutorial_multichoice
close_text_box
jump_if_flag_equal EVENT_FLAG_75, $07, .ows_d80c
jump_if_flag_equal EVENT_FLAG_75, $01, .ows_d7e8
@@ -3357,10 +3402,28 @@ AfterTutorialBattleScript: ; d834 (3:5834)
tx Text05f1
close_text_box
print_text_string Text05f2
- run_command Func_d271
-; 0xd860
-
- INCROM $d860, $d880
+.ows_d85f
+ choose_starter_deck_multichoice
+ close_text_box
+ ask_question_jump Text05f3, .ows_d869
+ script_jump .ows_d85f
+.ows_d869
+ print_text_string Text05f4
+ close_text_box
+ pause_song
+ run_command Func_d40f
+ try_give_medal_pc_packs
+ run_command Func_ccdc
+ tx Text05f5
+ wait_for_song_to_finish
+ resume_song
+ close_text_box
+ script_set_flag_value EVENT_FLAG_3E, $03
+ run_command Func_d3d4
+ print_text_string Text05f6
+ run_command Func_d396
+ db $00
+ quit_script_fully
NPCMovement_d880: ; d880 (3:5880)
db EAST
diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm
index 7a7f052..dc148ad 100644
--- a/src/engine/bank04.asm
+++ b/src/engine/bank04.asm
@@ -13,8 +13,8 @@ Func_10000: ; 10000 (4:4000)
bit LCDC_ENABLE_F, a
jr nz, .asm_10025
xor a
- ld [rSCX], a
- ld [rSCY], a
+ ldh [rSCX], a
+ ldh [rSCY], a
.asm_10025
call Func_1288c
@@ -1023,9 +1023,9 @@ OverworldScriptTable: ; 1217b (4:617b)
dw Func_d1b3
dw ScriptCommand_QuitScriptFully
dw Func_d244
- dw Func_d24c
+ dw ScriptCommand_ChooseDeckToDuelAgainstMultichoice
dw ScriptCommand_OpenDeckMachine
- dw Func_d271
+ dw ScriptCommand_ChooseStarterDeckMultichoice
dw ScriptCommand_EnterMap
dw ScriptCommand_MoveArbitraryNPC
dw Func_d209
@@ -1048,8 +1048,8 @@ OverworldScriptTable: ; 1217b (4:617b)
dw ScriptCommand_WaitForSongToFinish
dw Func_d435
dw ScriptCommand_AskQuestionJumpDefaultYes
- dw Func_d2f6
- dw Func_d317
+ dw ScriptCommand_ShowSamNormalMultichoice
+ dw ScriptCommand_ShowSamTutorialMultichoice
dw Func_d43d
dw ScriptCommand_EndScriptLoop2
dw ScriptCommand_EndScriptLoop3
@@ -1073,7 +1073,68 @@ OverworldScriptTable: ; 1217b (4:617b)
dw ScriptCommand_EndScriptLoop9
dw ScriptCommand_EndScriptLoop10
- INCROM $1224b, $1229f
+
+MultichoiceTextbox_ConfigTable_ChooseDeckToDuelAgainst: ;1224b
+ db $04, $00 ; x, y to start drawing box
+ db $10, $08 ; width, height of box
+ db $06, $02 ; x, y coordinate to start printing next text
+ tx Text03f6 ; text id to print next
+ db $06, $04 ; x, y coordinate to start printing next text
+ tx Text03f7 ; text id to print next
+ db $06, $06 ; x, y coordinate to start printing next text
+ tx Text03f8 ; text id to print next
+ db $ff ; marker byte -- end text entries
+ db $05, $02 ; cursor starting x, y
+ db $02 ; number of tiles the cursor moves per toggle
+ db $03 ; cursor max index
+ db $0f ; cursor image
+
+ db $00, $00, $00 ; marker bytes -- end of config table
+
+MultichoiceTextbox_ConfigTable_ChooseDeckStarterDeck: ;12264
+ db $04, $00 ; x, y to start drawing box
+ db $10, $08 ; width, height of box
+ db $06, $02 ; x, y coordinate to start printing next text
+ tx Text03fa ; text id to print next
+ db $06, $04 ; x, y coordinate to start printing next text
+ tx Text03fb ; text id to print next
+ db $06, $06 ; x, y coordinate to start printing next text
+ tx Text03fc ; text id to print next
+ db $ff ; marker byte -- end text entries
+ db $05, $02 ; cursor starting x, y
+ db $02 ; number of tiles the cursor moves per toggle
+ db $03 ; cursor max index
+ db $0f ; cursor image
+
+ db $00, $00, $00 ; marker bytes -- end of config table
+
+SamNormalMultichoice_ConfigurationTable: ;1227d
+ db $0A, $00 ; x, y to start drawing box
+ db $0A, $0A ; width, height of box
+ db $0C, $02 ; x, y coordinate to start printing next text
+ tx Text03ff ; text id to print next
+ db $ff ; marker byte -- end text entries
+ db $0b, $02 ; cursor starting x, y
+ db $02 ; number of tiles the cursor moves per toggle
+ db $04 ; cursor max index
+ db $0f ; cursor image
+
+ db $00, $00, $00 ; marker bytes -- end of config table
+
+SamTutorialMultichoice_ConfigurationTable: ;1228e
+ db $06, $00 ; x, y to start drawing box
+ db $0E, $12 ; width, height of box
+ db $08, $02 ; x coordinate to start printing text
+ tx Text0400 ; text id to print next
+ db $ff ; marker byte -- end text entries
+ db $07, $02 ; cursor starting x, y
+ db $02 ; number of tiles the cursor moves per toggle
+ db $08 ; cursor max index
+ db $0f ; cursor image
+
+ db $00, $00, $00 ; marker bytes -- end of config table
+
+
Unknown_1229f: ; 1229f (4:629f)
INCROM $1229f, $126d1
@@ -1103,7 +1164,7 @@ _GameLoop: ; 126d1 (4:66d1)
scf
ret
-MainMenuFunctionTable:
+MainMenuFunctionTable: ; 126fc (4:66fc)
dw MainMenu_CardPop
dw MainMenu_ContinueFromDiary
dw MainMenu_NewGame
@@ -1230,7 +1291,7 @@ Unknown_128fb: ; 128fb
Func_1296e: ; 1296e (4:696e)
INCROM $1296e, $1299f
-; creates a new entry in SpriteAnimBuffer, Alse loads the sprite if need be
+; creates a new entry in SpriteAnimBuffer, else loads the sprite if need be
CreateSpriteAndAnimBufferEntry: ; 1299f (4:699f)
push af
ld a, [wd5d7]
@@ -1489,7 +1550,7 @@ HandleAnimationFrame: ; 12b13 (4:6b13)
call GetAnimFramePointerFromOffset
inc de
ld a, [de]
- call SetAimationCounterAndLoop
+ call SetAnimationCounterAndLoop
jr c, .tryHandlingFrame
inc de
ld bc, SPRITE_ANIM_COORD_X
@@ -1547,7 +1608,7 @@ GetAnimFramePointerFromOffset: ; 12b6a (4:6b6a)
; Sets the animation counter for the current sprite. If the value is zero, loop the animation
; a - new animation counter
-SetAimationCounterAndLoop: ; 12b89 (4:6b89)
+SetAnimationCounterAndLoop: ; 12b89 (4:6b89)
push hl
push bc
ld bc, SPRITE_ANIM_COUNTER
diff --git a/src/engine/bank05.asm b/src/engine/bank05.asm
index 6af2582..2b59c96 100644
--- a/src/engine/bank05.asm
+++ b/src/engine/bank05.asm
@@ -190,7 +190,7 @@ AITryUseAttack: ; 14145 (5:4145)
call AISelectSpecialAttackParameters
jr c, .use_attack
- ld a, OPPACTION_BEGIN_ATTACK
+ ld a, EFFECTCMDTYPE_AI_SELECTION
call TryExecuteEffectCommandFunction
.use_attack
@@ -204,7 +204,7 @@ AITryUseAttack: ; 14145 (5:4145)
bank1call AIMakeDecision
ret c
- ld a, OPPACTION_ATTACK_ANIM_AND_DAMAGE
+ ld a, EFFECTCMDTYPE_AI_SWITCH_DEFENDING_PKMN
call TryExecuteEffectCommandFunction
ld a, OPPACTION_ATTACK_ANIM_AND_DAMAGE
bank1call AIMakeDecision
@@ -866,11 +866,9 @@ _CalculateDamage_VersusDefendingPokemon: ; 14462 (5:4462)
ldh a, [hTempPlayAreaLocation_ff9d]
or a
call z, HandleDoubleDamageSubstatus
- ; skips the weak/res checks if bit 7 is set
- ; I guess to avoid overflowing?
- ; should probably just have skipped weakness test instead?
- bit 7, d
- res 7, d
+ ; skips the weak/res checks if unaffected.
+ bit UNAFFECTED_BY_WEAKNESS_RESISTANCE_F, d
+ res UNAFFECTED_BY_WEAKNESS_RESISTANCE_F, d
jr nz, .not_resistant
; handle weakness
@@ -1083,8 +1081,8 @@ CalculateDamage_FromDefendingPokemon: ; 1458c (5:458c)
call SwapTurn
call HandleDoubleDamageSubstatus
- bit 7, d
- res 7, d
+ bit UNAFFECTED_BY_WEAKNESS_RESISTANCE_F, d
+ res UNAFFECTED_BY_WEAKNESS_RESISTANCE_F, d
jr nz, .not_resistant
; handle weakness
@@ -1225,7 +1223,7 @@ LookForCardIDInHandList_Bank5: ; 155d2 (5:55d2)
; input:
; a = card ID
; b = PLAY_AREA_* to start with
-; ouput:
+; output:
; a = PLAY_AREA_* of found card
; carry set if found
LookForCardIDInPlayArea_Bank5: ; 155ef (5:55ef)
@@ -1339,7 +1337,7 @@ InitAITurnVars: ; 15649 (5:5649)
; check if flag was already set, if so,
; reset wAIBarrierFlagCounter to $80.
ld a, [wAIBarrierFlagCounter]
- bit 7, a
+ bit AI_MEWTWO_MILL_F, a
jr nz, .set_flag
; if not, increase it by 1 and check if it exceeds 2.
@@ -1369,14 +1367,14 @@ InitAITurnVars: ; 15649 (5:5649)
jr .done
.set_flag
- ld a, AI_FLAG_MEWTWO_MILL + 0
+ ld a, AI_MEWTWO_MILL
ld [wAIBarrierFlagCounter], a
jr .done
.check_flag
; increase counter by 1 if flag is set
ld a, [wAIBarrierFlagCounter]
- bit 7, a
+ bit AI_MEWTWO_MILL_F, a
jr z, .reset_2
inc a
ld [wAIBarrierFlagCounter], a
@@ -3122,7 +3120,7 @@ AIDecideEvolution: ; 15f4c (5:5f4c)
.check_damage
ld a, [wTempAI]
ld e, a
- call GetCardDamage
+ call GetCardDamageAndMaxHP
or a
jr z, .check_mysterious_fossil
srl a
@@ -3294,7 +3292,7 @@ Func_16120: ; 16120 (5:6120)
dec b
ld e, b
push bc
- call GetCardDamage
+ call GetCardDamageAndMaxHP
pop bc
add c
ld c, a
@@ -3324,7 +3322,7 @@ Func_16120: ; 16120 (5:6120)
; check if there's a Muk in any duelist's Play Area
.is_active
ld e, 0
- call GetCardDamage
+ call GetCardDamageAndMaxHP
cp 50
jr c, .lower_score
ld e, PLAY_AREA_ARENA
@@ -3974,7 +3972,7 @@ AIProcessButDontPlayEnergy_SkipEvolutionAndArena: ; 164ba (5:64ba)
jr AIProcessEnergyCards
; copies wTempPlayAreaAIScore to wPlayAreaAIScore
-; and loads wAIscore with value in wTempAIScore.
+; and loads wAIScore with value in wTempAIScore.
; identical to RetrievePlayAreaAIScoreFromBackup2.
RetrievePlayAreaAIScoreFromBackup1: ; 164d3 (5:64d3)
push af
@@ -4089,7 +4087,7 @@ AIProcessEnergyCards: ; 164fc (5:64fc)
; arena
ld a, [wAIBarrierFlagCounter]
- bit 7, a
+ bit AI_MEWTWO_MILL_F, a
jr z, .add_to_score
; subtract from score instead
@@ -4613,7 +4611,7 @@ CheckIfEvolutionNeedsEnergyForMove: ; 16805 (5:6805)
; returns in e the card ID of the energy required for
; the Discard/Energy Boost attack loaded in wSelectedAttack.
; if it's Zapdos2's Thunderbolt attack, return no carry.
-; if it's Charizard's Fire Spin or Exeggutor's Big Eggplosion
+; if it's Charizard's Fire Spin or Exeggutor's Big Eggsplosion
; attack, don't return energy card ID, but set carry.
; output:
; b = 1 if needs color energy, 0 otherwise;
@@ -4881,7 +4879,7 @@ CheckSpecificDecksToAttachDoubleColorless: ; 1696e (5:696e)
push de
push hl
-; check if AI is playing any of the aplicable decks.
+; check if AI is playing any of the applicable decks.
ld a, [wOpponentDeckID]
cp LEGENDARY_DRAGONITE_DECK_ID
jr z, .legendary_dragonite_deck
@@ -4976,7 +4974,7 @@ AIProcessButDontUseAttack: ; 169ca (5:69ca)
jr AIProcessAttacks
; copies wTempPlayAreaAIScore to wPlayAreaAIScore
-; and loads wAIscore with value in wTempAIScore.
+; and loads wAIScore with value in wTempAIScore.
; identical to RetrievePlayAreaAIScoreFromBackup1.
RetrievePlayAreaAIScoreFromBackup2: ; 169e3 (5:69e3)
push af
@@ -5019,7 +5017,7 @@ AIProcessAttacks: ; 169fc (5:69fc)
; if Player is running Mewtwo1 mill deck,
; skip attack if Barrier counter is 0.
ld a, [wAIBarrierFlagCounter]
- cp AI_FLAG_MEWTWO_MILL + 0
+ cp AI_MEWTWO_MILL + 0
jp z, .dont_attack
; determine AI score of both attacks.
@@ -5308,7 +5306,7 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
cp 31
jr nc, .high_recoil_generic_checks
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
sla a
cp c
jr c, .high_recoil_generic_checks
@@ -5544,7 +5542,7 @@ GetAIScoreOfAttack: ; 16a86 (5:6a86)
.tally_heal_score
push af
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
call CalculateByteTensDigit
pop bc
cp b ; wLoadedMoveEffectParam
@@ -5738,7 +5736,7 @@ HandleSpecialAIMoves: ; 16dcd (5:6dcd)
; if any of card ID in a is found in deck,
; return a score of $80 + slots available in bench.
-HandleCallForFamily:
+HandleCallForFamily: ; 16e3e (5:6e3e)
ld a, CARD_LOCATION_DECK
call CheckIfAnyCardIDinLocation
jr nc, HandleSpecialAIMoves.zero
@@ -5754,7 +5752,7 @@ HandleCallForFamily:
; if any of NidoranM or NidoranF is found in deck,
; return a score of $80 + slots available in bench.
-HandleNidoranFCallForFamily:
+HandleNidoranFCallForFamily: ; 16e55 (5:6e55)
ld e, NIDORANM
ld a, CARD_LOCATION_DECK
call CheckIfAnyCardIDinLocation
@@ -5777,7 +5775,7 @@ HandleNidoranFCallForFamily:
; checks for certain card IDs of Fighting color in deck.
; if any of them are found, return a score of
; $80 + slots available in bench.
-HandleMarowak1CallForFriend:
+HandleMarowak1CallForFriend: ; 16e77 (5:6e77)
ld e, GEODUDE
ld a, CARD_LOCATION_DECK
call CheckIfAnyCardIDinLocation
@@ -6191,7 +6189,7 @@ LookForCardThatIsKnockedOutOnDevolution: ; 17080 (5:7080)
ld [wTempAI], a
ld e, c
push bc
- call GetCardDamage
+ call GetCardDamageAndMaxHP
pop bc
ld e, a
ld a, [wTempAI]
@@ -6414,7 +6412,7 @@ AISelectSpecialAttackParameters: ; 17161 (5:7161)
ld a, CARD_LOCATION_DISCARD_PILE
call CheckIfAnyCardIDinLocation
ldh [hTemp_ffa0], a
- farcall CreateEnergyCardListFromOpponentDiscardPile
+ farcall CreateEnergyCardListFromDiscardPile_AllEnergy
; find any energy card different from
; the one found by CheckIfAnyCardIDinLocation.
@@ -6632,7 +6630,7 @@ CheckCardEvolutionInHandOrDeck: ; 17274 (5:7274)
scf
ret
-; sets up the inital hand of boss deck.
+; sets up the initial hand of boss deck.
; always draws at least 2 Basic Pokemon cards and 2 Energy cards.
; also sets up so that the next cards to be drawn have
; some minimum number of Basic Pokemon and Energy cards.
@@ -7223,13 +7221,13 @@ Func_174f2: ; 174f2 (5:74f2)
jp .loop_play_area
; loads wcdea + play area location in e
-; with nenergy * 2 + $80 - floor(dam / 10)
+; with energy * 2 + $80 - floor(dam / 10)
; loads wcdfa + play area location in e
; with $01
Func_17583: ; 17583 (5:7583)
push hl
push de
- call GetCardDamage
+ call GetCardDamageAndMaxHP
call CalculateByteTensDigit
ld b, a
push bc
diff --git a/src/engine/bank06.asm b/src/engine/bank06.asm
index 7833675..4dcad9d 100644
--- a/src/engine/bank06.asm
+++ b/src/engine/bank06.asm
@@ -90,7 +90,7 @@ _CopyCardNameAndLevel: ; 18000 (6:4000)
ret
; the name starts with TX_HALFWIDTH
-_CopyCardNameAndLevel_HalfwidthText:
+_CopyCardNameAndLevel_HalfwidthText: ; 18086 (6:4086)
ld a, [wcd9b]
inc a
add a
@@ -382,7 +382,7 @@ OpenInPlayAreaScreen: ; 180d5 (6:40d5)
dw OpenInPlayAreaScreen_NonTurnHolderPlayArea ; 0x0e: INPLAYAREA_OPP_BENCH_4
dw OpenInPlayAreaScreen_NonTurnHolderPlayArea ; 0x0f: INPLAYAREA_OPP_BENCH_5
-OpenInPlayAreaScreen_TurnHolderPlayArea:
+OpenInPlayAreaScreen_TurnHolderPlayArea: ; 18248 (6:4248)
; wInPlayAreaCurPosition constants conveniently map to (PLAY_AREA_* constants - 1)
; for bench locations. this mapping is taken for granted in the following code.
ld a, [wInPlayAreaCurPosition]
@@ -403,7 +403,7 @@ OpenInPlayAreaScreen_TurnHolderPlayArea:
bank1call OpenCardPage_FromCheckPlayArea
ret
-OpenInPlayAreaScreen_NonTurnHolderPlayArea:
+OpenInPlayAreaScreen_NonTurnHolderPlayArea: ; 1826a (6:426a)
ld a, [wInPlayAreaCurPosition]
sub INPLAYAREA_OPP_ACTIVE
or a
@@ -425,7 +425,7 @@ OpenInPlayAreaScreen_NonTurnHolderPlayArea:
call SwapTurn
ret
-OpenInPlayAreaScreen_TurnHolderHand:
+OpenInPlayAreaScreen_TurnHolderHand: ; 18293 (6:4293)
ldh a, [hWhoseTurn]
push af
bank1call OpenTurnHolderHandScreen_Simple
@@ -433,7 +433,7 @@ OpenInPlayAreaScreen_TurnHolderHand:
ldh [hWhoseTurn], a
ret
-OpenInPlayAreaScreen_NonTurnHolderHand:
+OpenInPlayAreaScreen_NonTurnHolderHand: ; 1829d (6:429d)
ldh a, [hWhoseTurn]
push af
bank1call OpenNonTurnHolderHandScreen_Simple
@@ -441,7 +441,7 @@ OpenInPlayAreaScreen_NonTurnHolderHand:
ldh [hWhoseTurn], a
ret
-OpenInPlayAreaScreen_TurnHolderDiscardPile:
+OpenInPlayAreaScreen_TurnHolderDiscardPile: ; 182a7 (6:42a7)
ldh a, [hWhoseTurn]
push af
bank1call OpenTurnHolderDiscardPileScreen
@@ -449,7 +449,7 @@ OpenInPlayAreaScreen_TurnHolderDiscardPile:
ldh [hWhoseTurn], a
ret
-OpenInPlayAreaScreen_NonTurnHolderDiscardPile:
+OpenInPlayAreaScreen_NonTurnHolderDiscardPile: ; 182b1 (6:42b1)
ldh a, [hWhoseTurn]
push af
bank1call OpenNonTurnHolderDiscardPileScreen
@@ -915,7 +915,7 @@ OpenGlossaryScreen: ; 184c8 (6:44c8)
; unit: 5 bytes.
; [structure]
-; horizonal align (1) / title text id (2) / desc. text id (2)
+; horizontal align (1) / title text id (2) / desc. text id (2)
glossary_entry: MACRO
db \1
tx \2
@@ -1197,7 +1197,7 @@ Func_19079: ; 19079 (6:5079)
call Func_3b6a
jp Func_18f9c.asm_4fd4
-PointerTable_006_508f: ; (6:508f)
+PointerTable_006_508f: ; 1908f (6:508f)
dw Func_18fdc
dw Func_19014
dw Func_18fdd
@@ -1523,10 +1523,10 @@ Func_19a12: ; 19a12 (6:5a12)
; 0x19a1f
INCROM $19a1f, $19c20
-
+
Func_19c20: ; 19c20 (6:5c20)
- INCROM $19c20, $1a4cf
-
+ INCROM $19c20, $1a4cf
+
Func_1a4cf: ; 1a4cf (6:64cf)
INCROM $1a4cf, $1a61f
@@ -1677,7 +1677,7 @@ Func_1a6cd: ; 1a6cd (6:66cd)
lb de, $38, $9f
call SetupText
ld hl, $00a3
- bank1call Func_57df
+ bank1call DrawWholeScreenTextBox
ld a, $0a
ld [$0000], a
xor a
@@ -1715,32 +1715,32 @@ Func_1a73a: ; 1a73a (6:673a)
pop hl
ret
-WhatIsYourNameData: ; (6:675e)
+WhatIsYourNameData: ; 1a75e (6:675e)
textitem 1, 1, WhatIsYourNameText
db $ff
; [Deck1Data ~ Deck4Data]
; These are directed from around (2:4f05),
; without any bank description.
; That is, the developers hard-coded it. -_-;;
-Deck1Data: ; (6:6763)
+Deck1Data: ; 1a763 (6:6763)
textitem 2, 1, Text022b
textitem 14, 1, Text0219
db $ff
-Deck2Data: ; (6:676c)
+Deck2Data: ; 1a76c (6:676c)
textitem 2, 1, Text022c
textitem 14, 1, Text0219
db $ff
-Deck3Data: ; (6:6775)
+Deck3Data: ; 1a775 (6:6775)
textitem 2, 1, Text022d
textitem 14, 1, Text0219
db $ff
-Deck4Data: ; (6:677e)
+Deck4Data: ; 1a77e (6:677e)
textitem 2, 1, Text022e
textitem 14, 1, Text0219
db $ff
; set each byte zero from hl for b bytes.
-ClearMemory: ; (6:6787)
+ClearMemory: ; 1a787 (6:6787)
push af
push bc
push hl
@@ -1758,7 +1758,7 @@ ClearMemory: ; (6:6787)
; play different sfx by a.
; if a is 0xff play SFX_03 (usually following a B press),
; else play SFX_02 (usually following an A press).
-PlayAcceptOrDeclineSFX: ; (6:6794)
+PlayAcceptOrDeclineSFX: ; 1a794 (6:6794)
push af
inc a
jr z, .sfx_decline
@@ -1773,7 +1773,7 @@ PlayAcceptOrDeclineSFX: ; (6:6794)
; get player name from the user
; into hl
-InputPlayerName: ; (6:67a3)
+InputPlayerName: ; 1a7a3 (6:67a3)
ld e, l
ld d, h
ld a, MAX_PLAYER_NAME_LENGTH
@@ -1858,7 +1858,7 @@ InputPlayerName: ; (6:67a3)
; bc: position of name.
; de: dest. pointer.
; hl: pointer to text item of the question.
-InitializeInputName:
+InitializeInputName: ; 1a846 (6:6846)
ld [wNamingScreenBufferMaxLength], a
push hl
ld hl, wNamingScreenNamePosition
@@ -1900,7 +1900,7 @@ InitializeInputName:
ld [wNamingScreenBufferLength], a
ret
-FinalizeInputName:
+FinalizeInputName: ; 1a880 (6:6880)
ld hl, wNamingScreenDestPointer
ld e, [hl]
inc hl
@@ -1915,7 +1915,7 @@ FinalizeInputName:
; draws the keyboard frame
; and the question if it exists.
-DrawNamingScreenBG:
+DrawNamingScreenBG: ; 1a892 (6:6892)
call DrawTextboxForKeyboard
call PrintPlayerNameFromInput
ld hl, wNamingScreenQuestionPointer
@@ -1943,13 +1943,13 @@ DrawNamingScreenBG:
textitem $0f, $10, EndText ; "End"
db $ff
-DrawTextboxForKeyboard:
+DrawTextboxForKeyboard: ; 1a8c1 (6:68c1)
lb de, 0, 3 ; x, y
lb bc, 20, 15 ; w, h
call DrawRegularTextBox
ret
-PrintPlayerNameFromInput:
+PrintPlayerNameFromInput: ; 1a8cb (6:68cb)
ld hl, wNamingScreenNamePosition
ld d, [hl]
inc hl
@@ -1983,7 +1983,7 @@ endr
; check if button pressed.
; if pressed, set the carry bit on.
-NamingScreen_CheckButtonState:
+NamingScreen_CheckButtonState: ; 1a908 (6:6908)
xor a
ld [wPlaysSfx], a
ldh a, [hDPadHeld]
@@ -2232,7 +2232,7 @@ Func_1aa28: ; 1aa28 (6:6a28)
; load, to the first tile of v0Tiles0, the graphics for the
; blinking black square used in name input screens.
; for inputting full width text.
-LoadTextCursorTile:
+LoadTextCursorTile: ; 1aa65 (6:6a65)
ld hl, v0Tiles0 + $00 tiles
ld de, .data
ld b, 0
@@ -2253,7 +2253,7 @@ endr
; set the carry bit on,
; if "End" was selected.
-NamingScreen_ProcessInput:
+NamingScreen_ProcessInput: ; 1aa87 (6:6a87)
ld a, [wNamingScreenCursorX]
ld h, a
ld a, [wNamingScreenCursorY]
@@ -2416,7 +2416,7 @@ NamingScreen_ProcessInput:
; it seems to have been deprecated as the game was translated into english.
; but it can still be applied to english, such as upper-lower case transition.
; hl: info. pointer.
-TransformCharacter:
+TransformCharacter: ; 1ab61 (6:6b61)
ld a, [wNamingScreenBufferLength]
or a
jr z, .return ; if the length is zero, just return.
@@ -2468,7 +2468,7 @@ TransformCharacter:
; it returns the pointer to the proper information.
; h: position x.
; l: position y.
-GetCharInfoFromPos_Player:
+GetCharInfoFromPos_Player: ; 1ab93 (6:6b93)
push de
; (information index) = (x) * (height) + (y)
; (height) = 0x05(Deck) or 0x06(Player)
@@ -2510,7 +2510,7 @@ else
endc
ENDM
-KeyboardData_Player: ; (6:6baf)
+KeyboardData_Player: ; 1abaf (6:6baf)
kbitem $04, $02, $11, $00, TX_FULLWIDTH3, "A"
kbitem $06, $02, $12, $00, TX_FULLWIDTH3, "J"
kbitem $08, $02, $13, $00, TX_FULLWIDTH3, "S"
@@ -2737,7 +2737,7 @@ InputDeckName: ; 1ad89 (6:6d89)
; load, to the first tile of v0Tiles0, the graphics for the
; blinking black square used in name input screens.
; for inputting half width text.
-LoadHalfWidthTextCursorTile:
+LoadHalfWidthTextCursorTile: ; 1ae37 (6:6e37)
ld hl, v0Tiles0 + $00 tiles
ld de, .data
ld b, 0
@@ -2757,7 +2757,7 @@ rept TILE_SIZE
endr
; it's only for naming the deck.
-ProcessTextWithUnderbar:
+ProcessTextWithUnderbar: ; 1ae59 (6:6e59)
ld hl, wNamingScreenNamePosition
ld d, [hl]
inc hl
@@ -3036,7 +3036,7 @@ Func_1afc2: ; 1afc2 (6:6fc2)
; its unit size is 3, and player's is 6.
; h: x
; l: y
-GetCharInfoFromPos_Deck:
+GetCharInfoFromPos_Deck: ; 1b000 (6:7000)
push de
ld e, l
ld d, h
@@ -3058,7 +3058,7 @@ GetCharInfoFromPos_Deck:
jr nz, .loop
ret
-KeyboardData_Deck: ; (6:7019)
+KeyboardData_Deck: ; 1b019 (6:7019)
db $04, $02, "A"
db $06, $02, "J"
db $08, $02, "S"
diff --git a/src/engine/bank07.asm b/src/engine/bank07.asm
index af41613..375a161 100644
--- a/src/engine/bank07.asm
+++ b/src/engine/bank07.asm
@@ -553,7 +553,35 @@ Func_1c83d: ; 1c83d (7:483d)
ret
; 0x1c858
- INCROM $1c858, $1c8ef
+ INCROM $1c858, $1c8bc
+
+Func_1c8bc: ; 1c8bc (7:48bc)
+ push hl
+ push bc
+ call Set_OBJ_8x8
+ ld a, LOW(Func_3ba2)
+ ld [wDoFrameFunction], a
+ ld a, HIGH(Func_3ba2)
+ ld [wDoFrameFunction + 1], a
+ ld a, $ff
+ ld hl, wAnimationQueue
+ ld c, ANIMATION_QUEUE_LENGTH
+.fill_queue
+ ld [hli], a
+ dec c
+ jr nz, .fill_queue
+ ld [wd42a], a
+ ld [wd4c0], a
+ xor a
+ ld [wd4ac], a
+ ld [wd4ad], a
+ ld [wd4b3], a
+ call Func_1ccbc
+ call Func_3ca0
+ pop bc
+ pop hl
+ ret
+; 0x1c8ef
Func_1c8ef: ; 1c8ef (7:48ef)
ld a, [wDoFrameFunction + 0]
@@ -625,7 +653,7 @@ Func_1c8ef: ; 1c8ef (7:48ef)
.address
dw Func_1c94a
-Func_1c94a:
+Func_1c94a: ; 1c94a (7:494a)
ld e, l
ld d, h
ld c, 3
@@ -777,6 +805,7 @@ macro_1ca04: MACRO
dw \1
db \2
ENDM
+
Data_1ca04:
; value(2), flag(1)
macro_1ca04 $5858, $08
@@ -795,7 +824,7 @@ Data_1ca04:
macro_1ca04 $2838, $00
macro_1ca04 $2818, $00
-Func_1ca31:
+Func_1ca31: ; 1ca31 (7:4a6b)
push hl
push bc
ld a, [wd4ac]
@@ -895,7 +924,24 @@ Func_1cb18: ; 1cb18 (7:4b18)
jr .asm_1cb57
; 0x1cb5e
- INCROM $1cb5e, $1d078
+ INCROM $1cb5e, $1ccbc
+
+Func_1ccbc: ; 1ccbc (7:4cbc)
+ ld a, $ff
+ ld [wd42a], a
+ call DisableInt_LYCoincidence
+ xor a
+ ldh [hSCX], a
+ ldh [rSCX], a
+ ldh [hSCY], a
+ ld hl, wd4b9
+ ld [hl], LOW(Func_1ccbc)
+ inc hl
+ ld [hl], HIGH(Func_1ccbc)
+ ret
+; 0x1ccd4
+
+ INCROM $1ccd4, $1d078
Func_1d078: ; 1d078 (7:5078)
ld a, [wd627]
diff --git a/src/engine/bank08.asm b/src/engine/bank08.asm
index 272f7c7..d674a9c 100644
--- a/src/engine/bank08.asm
+++ b/src/engine/bank08.asm
@@ -202,7 +202,7 @@ AIPlay_Potion: ; 201b5 (8:41b5)
ld a, [wAITrainerCardParameter]
ldh [hTemp_ffa0], a
ld e, a
- call GetCardDamage
+ call GetCardDamageAndMaxHP
cp 20
jr c, .play_card
ld a, 20
@@ -232,7 +232,7 @@ AIDecide_Potion1: ; 201d1 (8:41d1)
call GetTurnDuelistVariable
ld h, a
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
cp 20 + 1 ; if damage <= 20
jr c, .calculate_hp
ld a, 20 ; amount of Potion HP healing
@@ -270,7 +270,7 @@ AIDecide_Potion2: ; 20204 (8:4204)
call GetTurnDuelistVariable
ld h, a
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
cp 20 + 1 ; if damage <= 20
jr c, .calculate_hp
ld a, 20
@@ -309,7 +309,7 @@ AIDecide_Potion2: ; 20204 (8:4204)
ret z
call .check_boost_if_taken_damage
jr c, .has_boost_damage
- call GetCardDamage
+ call GetCardDamageAndMaxHP
cp 20 ; if damage >= 20
jr nc, .found
.has_boost_damage
@@ -392,7 +392,7 @@ AIPlay_SuperPotion: ; 202a8 (8:42a8)
ldh [hTemp_ffa0], a
ld a, [wAITrainerCardParameter]
ld e, a
- call GetCardDamage
+ call GetCardDamageAndMaxHP
cp 40
jr c, .play_card
ld a, 40
@@ -426,7 +426,7 @@ AIDecide_SuperPotion1: ; 202cc (8:42cc)
call GetTurnDuelistVariable
ld h, a
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
cp 40 + 1 ; if damage < 40
jr c, .calculate_hp
ld a, 40
@@ -470,7 +470,7 @@ AIDecide_SuperPotion2: ; 2030f (8:430f)
call GetTurnDuelistVariable
ld h, a
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
cp 40 + 1 ; if damage < 40
jr c, .calculate_hp
ld a, 40
@@ -516,7 +516,7 @@ AIDecide_SuperPotion2: ; 2030f (8:430f)
jr c, .next
call .check_energy_cost
jr c, .next
- call GetCardDamage
+ call GetCardDamageAndMaxHP
cp 40 ; if damage >= 40
jr nc, .found
.next
@@ -974,7 +974,7 @@ AIDecide_Pluspower2: ; 205a5 (8:45a5)
; return carry if move is useable but cannot KO.
.check_can_ko ; 205d7 (8:45d7)
farcall CheckIfSelectedMoveIsUnusable
- jr c, .unuseable
+ jr c, .unusable
ld a, [wSelectedAttack]
farcall EstimateDamage_VersusDefendingCard
ld a, DUELVARS_ARENA_CARD_HP
@@ -987,7 +987,7 @@ AIDecide_Pluspower2: ; 205a5 (8:45a5)
; can't KO.
scf
ret
-.unuseable
+.unusable
or a
ret
@@ -995,12 +995,12 @@ AIDecide_Pluspower2: ; 205a5 (8:45a5)
; move is useable and minimum damage > 0.
.check_random ; 205f6 (8:45f6)
farcall CheckIfSelectedMoveIsUnusable
- jr c, .unuseable
+ jr c, .unusable
ld a, [wSelectedAttack]
farcall EstimateDamage_VersusDefendingCard
ld a, [wAIMinDamage]
cp 10
- jr c, .unuseable
+ jr c, .unusable
ld a, 10
call Random
cp 3
@@ -2274,7 +2274,7 @@ AIDecide_PokemonBreeder: ; 20b1b (8:4b1b)
dec b
ld e, b
push bc
- call GetCardDamage
+ call GetCardDamageAndMaxHP
pop bc
call ConvertHPToCounters
add c
@@ -2296,7 +2296,7 @@ AIDecide_PokemonBreeder: ; 20b1b (8:4b1b)
; compare number of this card's damage counters
; with 5, if less than that, set carry
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
cp 5
jr c, .set_carry
@@ -3182,7 +3182,7 @@ AIDecide_PokemonCenter: ; 210eb (8:50eb)
; get this Pokemon's current damage counters
; and add it to the total.
- call GetCardDamage
+ call GetCardDamageAndMaxHP
call ConvertHPToCounters
ld b, a
ld a, [wce08]
@@ -3559,7 +3559,7 @@ AIDecide_Pokedex: ; 212dc (8:52dc)
jp PickPokedexCards ; bug, should be jp nz
; picks order of the cards in deck from the effects of Pokedex.
-; prioritises Pokemon cards, then Trainer cards, then energy cards.
+; prioritizes Pokemon cards, then Trainer cards, then energy cards.
; stores the resulting order in wce1a.
PickPokedexCards_Unreferenced: ; 212ff (8:52ff)
; unreferenced
@@ -3690,7 +3690,7 @@ PickPokedexCards_Unreferenced: ; 212ff (8:52ff)
ret
; picks order of the cards in deck from the effects of Pokedex.
-; prioritises energy cards, then Pokemon cards, then Trainer cards.
+; prioritizes energy cards, then Pokemon cards, then Trainer cards.
; stores the resulting order in wce1a.
PickPokedexCards: ; 2138e (8:538e)
xor a
@@ -3950,7 +3950,7 @@ AIDecide_MrFuji: ; 214a7 (8:54a7)
ld b, a
; skip if zero damage counters
- call GetCardDamage
+ call GetCardDamageAndMaxHP
call ConvertHPToCounters
or a
jr z, .next
@@ -4061,7 +4061,7 @@ AIDecide_ScoopUp: ; 21506 (8:5506)
; skip if card has no damage counters.
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
or a
jr z, .no_carry
@@ -4168,7 +4168,7 @@ AIDecide_ScoopUp: ; 21506 (8:5506)
scf
ret
-; this deck will use Scoop Up on a benched Articuno2, Zapdos3 or Molres2.
+; this deck will use Scoop Up on a benched Articuno2, Zapdos3 or Moltres2.
; interestingly, does not check for Muk in both Play Areas.
.HandleLegendaryRonald ; 215e7 (8:55e7)
; if less than 3 Play Area Pokemon cards, skip.
@@ -4626,7 +4626,7 @@ AIDecide_Gambler: ; 21875 (8:5875)
; check if flag is set for Player using Mewtwo1 only deck
ld a, [wAIBarrierFlagCounter]
- and AI_FLAG_MEWTWO_MILL
+ and AI_MEWTWO_MILL
jr z, .no_carry
; set carry if number of cards in deck <= 4.
@@ -6042,7 +6042,7 @@ AIDecide_PokemonTrader_FlowerGarden: ; 220a8 (8:60a8)
AIDecide_PokemonTrader_StrangePower: ; 22122 (8:6122)
; looks for a Pokemon in hand to trade with Mr Mime in deck.
-; inputing Mr Mime in register e for the function is redundant
+; inputting Mr Mime in register e for the function is redundant
; since it already checks whether a Mr Mime exists in the hand.
ld a, MR_MIME
ld e, MR_MIME
@@ -6637,7 +6637,7 @@ HandleAIHeal: ; 22402 (8:6402)
ld a, OPPACTION_USE_PKMN_POWER
bank1call AIMakeDecision
pop af
- ldh [hAIHealCard], a
+ ldh [hPlayAreaEffectTarget], a
ld a, OPPACTION_EXECUTE_PKMN_POWER_EFFECT
bank1call AIMakeDecision
ld a, OPPACTION_DUEL_MAIN_SCENE
@@ -6653,7 +6653,7 @@ HandleAIHeal: ; 22402 (8:6402)
; check if Arena card has any damage counters,
; if not, check Bench instead.
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
or a
jr z, .check_bench
@@ -6666,7 +6666,7 @@ HandleAIHeal: ; 22402 (8:6402)
call GetTurnDuelistVariable
ld h, a
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
; this seems useless since it was already
; checked that Arena card has damage,
; so card damage is at least 10.
@@ -6704,7 +6704,7 @@ HandleAIHeal: ; 22402 (8:6402)
cp d
jr z, .done
push bc
- call GetCardDamage
+ call GetCardDamageAndMaxHP
pop bc
cp b
jr c, .next_bench
@@ -6764,7 +6764,7 @@ HandleAIShift: ; 22476 (8:6476)
ld a, OPPACTION_USE_PKMN_POWER
bank1call AIMakeDecision
-; converts WR_* to apropriate color
+; converts WR_* to appropriate color
ld a, [wAIDefendingPokemonWeakness]
ld b, 0
.loop_color
@@ -6824,7 +6824,7 @@ HandleAIPeek: ; 224e6 (8:64e6)
ld a, 3
call Random
or a
- jr z, .check_player_prizes
+ jr z, .check_ai_prizes
cp 2
jr c, .check_player_hand
@@ -6833,10 +6833,10 @@ HandleAIPeek: ; 224e6 (8:64e6)
call GetNonTurnDuelistVariable
cp DECK_SIZE - 1
ret nc ; return if Player has one or no cards in Deck
- ld a, $ff
+ ld a, AI_PEEK_TARGET_DECK
jr .use_peek
-.check_player_prizes
+.check_ai_prizes
ld a, DUELVARS_PRIZES
call GetTurnDuelistVariable
ld hl, wcda5
@@ -6861,7 +6861,7 @@ HandleAIPeek: ; 224e6 (8:64e6)
ld a, c
sub b
ld [hl], a
- ld a, $40
+ ld a, AI_PEEK_TARGET_PRIZE
add d
jr .use_peek
@@ -6876,7 +6876,7 @@ HandleAIPeek: ; 224e6 (8:64e6)
call CountCardsInDuelTempList
call ShuffleCards
ld a, [wDuelTempList]
- or $80
+ or AI_PEEK_TARGET_HAND
.use_peek
push af
@@ -6902,7 +6902,7 @@ HandleAIStrangeBehavior: ; 2255d (8:655d)
ldh [hTemp_ffa0], a
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
or a
ret z ; return if Arena card has no damage counters
@@ -6977,7 +6977,7 @@ HandleAICurse: ; 225b5 (8:65b5)
call SwapTurn
.loop_play_area_1
push bc
- call GetCardDamage
+ call GetCardDamageAndMaxHP
pop bc
or a
jr z, .next_1
@@ -7033,7 +7033,7 @@ HandleAICurse: ; 225b5 (8:65b5)
cp b
jr z, .next_2 ; skip same Pokemon card
push bc
- call GetCardDamage
+ call GetCardDamageAndMaxHP
pop bc
jr nz, .use_curse ; has damage counters, choose this card
.next_2
@@ -7116,7 +7116,7 @@ HandleAICowardice: ; 2262d (8:662d)
ld a, c
ldh [hTemp_ffa0], a
ld e, a
- call GetCardDamage
+ call GetCardDamageAndMaxHP
.asm_22678
or a
ret z ; return if has no damage counters
@@ -7183,7 +7183,7 @@ HandleAIDamageSwap: ; 226a3 (8:66a3)
.ok
ld e, PLAY_AREA_ARENA
- call GetCardDamage
+ call GetCardDamageAndMaxHP
or a
ret z ; return if no damage
@@ -7380,12 +7380,12 @@ CheckIfPlayerHasPokemonOtherThanMewtwo1: ; 227a9 (8:67a9)
HandleAIAntiMewtwoDeckStrategy: ; 227d3 (8:67d3)
; return carry if Player is not playing Mewtwo1 mill deck
ld a, [wAIBarrierFlagCounter]
- bit 7, a
+ bit AI_MEWTWO_MILL_F, a
jr z, .set_carry
; else, check if there's been less than 2 turns
; without the Player using Barrier.
- cp AI_FLAG_MEWTWO_MILL + 2
+ cp AI_MEWTWO_MILL + 2
jr c, .count_bench
; if there has been, reset wAIBarrierFlagCounter
@@ -7535,7 +7535,7 @@ AIPickEnergyCardToDiscard: ; 2282e (8:682e)
; returns in a the deck index of an energy card attached to card
; in player's Play Area location a to remove.
-; prioritises double colorless energy, then any useful energy,
+; prioritizes double colorless energy, then any useful energy,
; then defaults to the first energy card attached if neither
; of those are found.
; returns $ff in a if there are no energy cards attached.
@@ -7614,7 +7614,7 @@ PickAttachedEnergyCardToRemove: ; 22875 (8:6875)
; stores in wTempAI and wCurCardCanAttack the deck indices
; of energy cards attached to card in Play Area location a.
-; prioritises double colorless energy, then any useful energy,
+; prioritizes double colorless energy, then any useful energy,
; then defaults to the first two energy cards attached if neither
; of those are found.
; returns $ff in a if there are no energy cards attached.
@@ -8014,7 +8014,7 @@ LookForCardIDInDeck_GivenCardIDInHand: ; 22a49 (8:6a49)
; input:
; a = card ID
; b = PLAY_AREA_* to start with
-; ouput:
+; output:
; a = PLAY_AREA_* of found card
; carry set if found
LookForCardIDInPlayArea_Bank8: ; 22a72 (8:6a72)
@@ -8134,7 +8134,7 @@ RemoveFromListDifferentCardOfGivenType: ; 22a95 (8:6a95)
; e = card ID 2
; output:
; a = deck index of card ID 1 found in deck
-; e = deck index of Pokemon card in hand dfferent than card ID 2
+; e = deck index of Pokemon card in hand different than card ID 2
LookForCardIDToTradeWithDifferentHandCard: ; 22ae0 (8:6ae0)
ld hl, wCurCardCanAttack
ld [hl], e
diff --git a/src/engine/bank1c.asm b/src/engine/bank1c.asm
index cff0a96..b8ac4fb 100644
--- a/src/engine/bank1c.asm
+++ b/src/engine/bank1c.asm
@@ -176,13 +176,13 @@ Func_70136: ; 70136 (1c:4136)
or LCDC_BGON
ld [wLCDC], a
ld a, %11100100
- ld [rBGP], a
+ ldh [rBGP], a
call SetBGP
xor a
ldh [hSCX], a
- ld [rSCX], a
+ ldh [rSCX], a
ldh [hSCY], a
- ld [rSCY], a
+ ldh [rSCY], a
pop de
pop bc
pop hl
diff --git a/src/engine/booster_packs.asm b/src/engine/booster_packs.asm
index 8e7d0c2..25acec1 100644
--- a/src/engine/booster_packs.asm
+++ b/src/engine/booster_packs.asm
@@ -164,7 +164,7 @@ GetBoosterCardType: ; 1e2a0 (7:62a0)
pop hl
ret
-CardTypeTable: ; 1e2b1 (7:62b1)
+CardTypeTable: ; 1e2b1 (7:62b1)
db BOOSTER_CARD_TYPE_FIRE ; TYPE_PKMN_FIRE
db BOOSTER_CARD_TYPE_GRASS ; TYPE_PKMN_GRASS
db BOOSTER_CARD_TYPE_LIGHTNING ; TYPE_PKMN_LIGHTNING
@@ -344,7 +344,7 @@ GenerateRandomEnergy: ; 1e387 (7:6387)
jr AddBoosterEnergyToDrawnEnergies
; generates a booster with 10 random energies
-GenerateRandomEnergyBooster: ; 1e390 (7:6390)
+GenerateRandomEnergyBooster: ; 1e390 (7:6390)
ld a, NUM_CARDS_IN_BOOSTER
.generate_energy_loop
push af
@@ -355,22 +355,22 @@ GenerateRandomEnergyBooster: ; 1e390 (7:6390)
jr ZeroBoosterRarityData
; generates a booster with 5 Lightning energies and 5 Fire energies
-GenerateEnergyBoosterLightningFire: ; 1e39c (7:639c)
+GenerateEnergyBoosterLightningFire: ; 1e39c (7:639c)
ld hl, EnergyBoosterLightningFireData
jr GenerateTwoTypesEnergyBooster
; generates a booster with 5 Water energies and 5 Fighting energies
-GenerateEnergyBoosterWaterFighting: ; 1e3a1 (7:63a1)
+GenerateEnergyBoosterWaterFighting: ; 1e3a1 (7:63a1)
ld hl, EnergyBoosterWaterFightingData
jr GenerateTwoTypesEnergyBooster
; generates a booster with 5 Grass energies and 5 Psychic energies
-GenerateEnergyBoosterGrassPsychic: ; 1e3a6 (7:63a6)
+GenerateEnergyBoosterGrassPsychic: ; 1e3a6 (7:63a6)
ld hl, EnergyBoosterGrassPsychicData
jr GenerateTwoTypesEnergyBooster
; generates a booster with 5 energies of 2 different types each
-GenerateTwoTypesEnergyBooster: ; 1e3ab (7:63ab)
+GenerateTwoTypesEnergyBooster: ; 1e3ab (7:63ab)
ld b, $02
.add_two_energies_to_booster_loop
ld c, NUM_CARDS_IN_BOOSTER / 2
@@ -388,7 +388,7 @@ GenerateTwoTypesEnergyBooster: ; 1e3ab (7:63ab)
jr nz, .add_two_energies_to_booster_loop
; fallthrough
-ZeroBoosterRarityData:
+ZeroBoosterRarityData: ; 1e3be (7:63be)
xor a
ld [wBoosterData_CommonAmount], a
ld [wBoosterData_UncommonAmount], a
@@ -452,8 +452,8 @@ PutEnergiesAndNonEnergiesTogether: ; 1e3f3 (7:63f3)
pop hl
ret
-; add the final cards drawn from the booster pack to the player's colection (sCardCollection)
-AddBoosterCardsToCollection:; 1e40a (7:640a)
+; add the final cards drawn from the booster pack to the player's collection (sCardCollection)
+AddBoosterCardsToCollection: ; 1e40a (7:640a)
push hl
ld hl, wBoosterCardsDrawn
.add_cards_loop
diff --git a/src/engine/deck_ai/decks/legendary_articuno.asm b/src/engine/deck_ai/decks/legendary_articuno.asm
index 62ee246..562e7c5 100644
--- a/src/engine/deck_ai/decks/legendary_articuno.asm
+++ b/src/engine/deck_ai/decks/legendary_articuno.asm
@@ -78,7 +78,7 @@ AIActionTable_LegendaryArticuno: ; 14c0b (5:4c0b)
ret
; this routine handles how Legendary Articuno
-; prioritises playing energy cards to each Pokémon.
+; prioritizes playing energy cards to each Pokémon.
; first, it makes sure that all Lapras have at least
; 3 energy cards before moving on to Articuno,
; and then to Dewgong and Seel
diff --git a/src/engine/deck_ai/decks/legendary_dragonite.asm b/src/engine/deck_ai/decks/legendary_dragonite.asm
index 7090e50..2b8cef6 100644
--- a/src/engine/deck_ai/decks/legendary_dragonite.asm
+++ b/src/engine/deck_ai/decks/legendary_dragonite.asm
@@ -105,7 +105,7 @@ AIDoTurn_LegendaryDragonite: ; 14def (5:4def)
or a
jr nz, .skip_energy_attach_1
-; if Arena card is Kangaskhan and doens't
+; if Arena card is Kangaskhan and doesn't
; have Energy cards attached, try attaching from hand.
; otherwise run normal AI energy attach routine.
ld a, DUELVARS_ARENA_CARD
diff --git a/src/engine/deck_ai/decks/sams_practice.asm b/src/engine/deck_ai/decks/sams_practice.asm
index b7642a8..10ce811 100644
--- a/src/engine/deck_ai/decks/sams_practice.asm
+++ b/src/engine/deck_ai/decks/sams_practice.asm
@@ -15,7 +15,7 @@ AIActionTable_SamPractice: ; 147bd (05:47bd)
call AIMainTurnLogic
ret
.scripted_1 ; use scripted actions instead
- call AIPerformSciptedTurn
+ call AIPerformScriptedTurn
ret
.start_duel ; 147d6 (5:47d6)
@@ -93,7 +93,7 @@ GetPlayAreaLocationOfRaticateOrRattata: ; 1481f (5:481f)
ret
; has AI execute some scripted actions depending on Duel turn.
-AIPerformSciptedTurn: ; 1483a (5:483a)
+AIPerformScriptedTurn: ; 1483a (5:483a)
ld a, [wDuelTurns]
srl a
ld hl, .scripted_actions_list
diff --git a/src/engine/effect_functions.asm b/src/engine/effect_functions.asm
index 4ed3dbe..92a1f3d 100644
--- a/src/engine/effect_functions.asm
+++ b/src/engine/effect_functions.asm
@@ -15,6 +15,8 @@ Paralysis50PercentEffect: ; 2c011 (b:4011)
ldtx de, ParalysisCheckText
call TossCoin_BankB
ret nc
+
+ParalysisEffect: ; 2c018 (b:4018)
lb bc, PSN_DBLPSN, PARALYZED
jr ApplyStatusEffect
@@ -27,6 +29,7 @@ ConfusionEffect: ; 2c024 (b:4024)
lb bc, PSN_DBLPSN, CONFUSED
jr ApplyStatusEffect
+Sleep50PercentEffect: ; 2c029 (b:4029)
ldtx de, SleepCheckText
call TossCoin_BankB
ret nc
@@ -35,7 +38,7 @@ SleepEffect: ; 2c030 (b:4030)
lb bc, PSN_DBLPSN, ASLEEP
jr ApplyStatusEffect
-ApplyStatusEffect:
+ApplyStatusEffect: ; 2c035 (b:4035)
ldh a, [hWhoseTurn]
ld hl, wWhoseTurn
cp [hl]
@@ -57,7 +60,7 @@ ApplyStatusEffect:
.cant_induce_status
ld a, c
- ld [wNoEffectFromStatus], a
+ ld [wNoEffectFromWhichStatus], a
call SetNoEffectFromStatus
or a
ret
@@ -102,7 +105,7 @@ Func_2c087: ; 2c087 (b:4087)
Func_2c08a: ; 2c08a (b:408a)
ld a, $1
-Func_2c08c:
+Func_2c08c: ; 2c08c (b:408c)
push de
push af
ld a, OPPACTION_TOSS_COIN_A_TIMES
@@ -143,7 +146,8 @@ Func_2c0bd: ; 2c0bd (b:40bd)
call ShuffleDeck
ret
-Func_2c0c7: ; 2c0c7 (b:40c7)
+; return carry if Player is the Turn Duelist
+IsPlayerTurn: ; 2c0c7 (b:40c7)
ld a, DUELVARS_DUELIST_TYPE
call GetTurnDuelistVariable
cp DUELIST_TYPE_PLAYER
@@ -154,7 +158,8 @@ Func_2c0c7: ; 2c0c7 (b:40c7)
scf
ret
-; Sets some flags for AI use
+; Stores information about the attack damage for AI purposes
+; taking into account poison damage between turns.
; if target poisoned
; [wAIMinDamage] <- [wDamage]
; [wAIMaxDamage] <- [wDamage]
@@ -162,19 +167,23 @@ Func_2c0c7: ; 2c0c7 (b:40c7)
; [wAIMinDamage] <- [wDamage] + d
; [wAIMaxDamage] <- [wDamage] + e
; [wDamage] <- [wDamage] + a
-Func_2c0d4: ; 2c0d4 (b:40d4)
+UpdateExpectedAIDamage_AccountForPoison: ; 2c0d4 (b:40d4)
push af
ld a, DUELVARS_ARENA_CARD_STATUS
call GetNonTurnDuelistVariable
and POISONED | DOUBLE_POISONED
- jr z, Func_2c0e9.skip_push_af
+ jr z, UpdateExpectedAIDamage.skip_push_af
pop af
ld a, [wDamage]
ld [wAIMinDamage], a
ld [wAIMaxDamage], a
ret
-Func_2c0e9: ; 2c0e9 (b:40e9)
+; Sets some variables for AI use
+; [wAIMinDamage] <- [wDamage] + d
+; [wAIMaxDamage] <- [wDamage] + e
+; [wDamage] <- [wDamage] + a
+UpdateExpectedAIDamage: ; 2c0e9 (b:40e9)
push af
.skip_push_af
@@ -190,11 +199,11 @@ Func_2c0e9: ; 2c0e9 (b:40e9)
ld [hl], a
ret
-; Sets some flags for AI use
-; [wDamage] <- a
-; [wAIMinDamage] <- d
-; [wAIMaxDamage] <- e
-Func_2c0fb: ; 2c0fb (b:40fb)
+; Stores information about the attack damage for AI purposes
+; [wDamage] <- a (average amount of damage)
+; [wAIMinDamage] <- d (minimum)
+; [wAIMaxDamage] <- e (maximum)
+SetExpectedAIDamage: ; 2c0fb (b:40fb)
ld [wDamage], a
xor a
ld [wDamage + 1], a
@@ -223,7 +232,7 @@ DealDamageToAllBenchedPokemon: ; 2c117 (b:4117)
jr .skip_to_bench
.loop
push bc
- call DealDamageToPlayAreaPokemon
+ call DealDamageToPlayAreaPokemon_RegularAnim
pop bc
.skip_to_bench
inc b
@@ -268,7 +277,7 @@ ApplySubstatus2ToDefendingCard: ; 2c149 (b:4149)
.no_damage_orEffect
pop af
push hl
- bank1call $4f9d
+ bank1call DrawDuelMainScene
pop hl
ld a, l
or h
@@ -277,7 +286,7 @@ ApplySubstatus2ToDefendingCard: ; 2c149 (b:4149)
; overwrites in wDamage, wAIMinDamage and wAIMaxDamage
; with the value in a.
-StoreDamageInfo: ; 2c166 (b:4166)
+SetDefiniteDamage: ; 2c166 (b:4166)
ld [wDamage], a
ld [wAIMinDamage], a
ld [wAIMaxDamage], a
@@ -286,7 +295,122 @@ StoreDamageInfo: ; 2c166 (b:4166)
ret
; 0x2c174
- INCROM $2c174, $2c1ec
+; overwrites wAIMinDamage and wAIMaxDamage
+; with value in wDamage.
+SetMinMaxDamageSameAsDamage: ; 2c174 (b:4174)
+ ld a, [wDamage]
+ ld [wAIMinDamage], a
+ ld [wAIMaxDamage], a
+ ret
+; 0x2c17e
+
+; returns in a some random occupied Play Area location
+; in Turn Duelist's Play Area.
+PickRandomPlayAreaCard: ; 2c17e (b:417e)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ call Random
+ or a
+ ret
+; 0x2c188
+
+; outputs in hl the next position
+; in hTempList to place a new card,
+; and increments hCurSelectionItem.
+GetNextPositionInTempList: ; 2c188 (b:4188)
+ push de
+ ld hl, hCurSelectionItem
+ ld a, [hl]
+ inc [hl]
+ ld e, a
+ ld d, $00
+ ld hl, hTempList
+ add hl, de
+ pop de
+ ret
+; 0x2c197
+
+; creates in wDuelTempList list of attached Fire Energy cards
+; that are attached to the Turn Duelist's Arena card.
+CreateListOfFireEnergyAttachedToArena: ; 2c197 (b:4197)
+ ld a, TYPE_ENERGY_FIRE
+ ; fallthrough
+
+; creates in wDuelTempList a list of cards that
+; are in the Arena of the same type as input a.
+; this is called to list Energy cards of a specific type
+; that are attached to the Arena Pokemon.
+; input:
+; a = TYPE_ENERGY_* constant
+; output:
+; a = number of cards in list;
+; wDuelTempList filled with cards, terminated by $ff
+CreateListOfEnergyAttachedToArena: ; 2c199 (b:4199)
+ ld b, a
+ ld c, 0
+ ld de, wDuelTempList
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop
+ ld a, [hl]
+ cp CARD_LOCATION_ARENA
+ jr nz, .next
+ push de
+ ld a, l
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ pop de
+ cp b
+ jr nz, .next ; is same as input type?
+ ld a, l
+ ld [de], a
+ inc de
+ inc c
+.next
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop
+
+ ld a, $ff
+ ld [de], a
+ ld a, c
+ ret
+; 0x2c1c4
+
+; prints the text "<X> devolved to <Y>!" with
+; the proper card names and levels.
+; input:
+; d = deck index of the lower stage card
+; e = deck index of card that was devolved
+PrintDevolvedCardNameAndLevelText: ; 2c1c4 (b:41c4)
+ push de
+ ld a, e
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld bc, wTxRam2
+ ld hl, wLoadedCard1Name
+ ld a, [hli]
+ ld [bc], a
+ inc bc
+ ld a, [hl]
+ ld [bc], a
+
+ inc bc ; wTxRam2_b
+ xor a
+ ld [bc], a
+ inc bc
+ ld [bc], a
+
+ ld a, d
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld a, 18
+ call CopyCardNameAndLevel
+ ld [hl], $00
+ ldtx hl, PokemonDevolvedToText
+ call DrawWideTextBox_WaitForInput
+ pop de
+ ret
+; 0x2c1ec
HandleSwitchDefendingPokemonEffect: ; 2c1ec (b:41ec)
ld e, a
@@ -305,7 +429,7 @@ HandleSwitchDefendingPokemonEffect: ; 2c1ec (b:41ec)
pop de
.switch
- call .HandleNoDamageOrEffect
+ call HandleNoDamageOrEffect
ret c
; attack was successful, switch Defending Pokemon
@@ -322,7 +446,7 @@ HandleSwitchDefendingPokemonEffect: ; 2c1ec (b:41ec)
; returns carry if Defending has No Damage or Effect
; if so, print its appropriate text.
-.HandleNoDamageOrEffect: ; 2c216 (b:4216)
+HandleNoDamageOrEffect: ; 2c216 (b:4216)
call CheckNoDamageOrEffect
ret nc
ld a, l
@@ -332,16 +456,144 @@ HandleSwitchDefendingPokemonEffect: ; 2c1ec (b:41ec)
ret
; 0x2c221
- INCROM $2c221, $2c2a4
+; applies HP recovery on Pokemon after an attack
+; with HP recovery effect, and handles its animation.
+; input:
+; d = damage effectiveness
+; e = HP amount to recover
+ApplyAndAnimateHPRecovery: ; 2c221 (b:4221)
+ push de
+ ld hl, wccbd
+ ld [hl], e
+ inc hl
+ ld [hl], d
+
+; get Arena card's damage
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ pop de
+ or a
+ ret z ; return if no damage
+
+; load correct animation
+ push de
+ ld a, $79
+ ld [wLoadedMoveAnimation], a
+ ld bc, $01 ; arrow
+ bank1call PlayMoveAnimation
+
+; compare HP to be restored with max HP
+; if HP to be restored would cause HP to
+; be larger than max HP, cap it accordingly
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ ld b, $00
+ pop de
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ add e
+ ld e, a
+ ld a, 0
+ adc d
+ ld d, a
+ ; de = damage dealt + current HP
+ ; bc = max HP of card
+ call CompareDEtoBC
+ jr c, .skip_cap
+ ; cap de to value in bc
+ ld e, c
+ ld d, b
+
+.skip_cap
+ ld [hl], e ; apply new HP to arena card
+ bank1call WaitMoveAnimation
+ ret
+; 0x2c25b
+
+; returns carry if Play Area has no damage counters.
+CheckIfPlayAreaHasAnyDamage: ; 2c25b (b:425b)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+.loop_play_area
+ call GetCardDamageAndMaxHP
+ or a
+ ret nz ; found damage
+ inc e
+ dec d
+ jr nz, .loop_play_area
+ ; no damage found
+ scf
+ ret
+; 0x2c26e
+
+; makes a list in wDuelTempList with the deck indices
+; of Trainer cards found in Turn Duelist's Discard Pile.
+; returns carry set if no Trainer cards found, and loads
+; corresponding text to notify this.
+CreateTrainerCardListFromDiscardPile: ; 2c26e (b:426e)
+; get number of cards in Discard Pile
+; and have hl point to the end of the
+; Discard Pile list in wOpponentDeckCards.
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE
+ call GetTurnDuelistVariable
+ ld b, a
+ add DUELVARS_DECK_CARDS
+ ld l, a
+
+ ld de, wDuelTempList
+ inc b
+ jr .next_card
+
+.check_trainer
+ ld a, [hl]
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_TRAINER
+ jr nz, .next_card
+
+ ld a, [hl]
+ ld [de], a
+ inc de
+
+.next_card
+ dec l
+ dec b
+ jr nz, .check_trainer
+
+ ld a, $ff ; terminating byte
+ ld [de], a
+ ld a, [wDuelTempList]
+ cp $ff
+ jr z, .no_trainers
+ or a
+ ret
+.no_trainers
+ ldtx hl, ThereAreNoTrainerCardsInDiscardPileText
+ scf
+ ret
+; 0x2c2a0
; makes a list in wDuelTempList with the deck indices
-; of all the energy cards found in opponent's Discard Pile.
-; if (c == 0), all energy cards are allowed;
-; if (c != 0), double colorless energy cards are not counted.
-; returns carry if no energy cards were found.
-CreateEnergyCardListFromOpponentDiscardPile: ; 2c2a4 (b:42a4)
+; of all basic energy cards found in Turn Duelist's Discard Pile.
+CreateEnergyCardListFromDiscardPile_OnlyBasic: ; 2c2a0 (b:42a0)
+ ld c, $01
+ jr CreateEnergyCardListFromDiscardPile
+
+; makes a list in wDuelTempList with the deck indices
+; of all energy cards (including Double Colorless)
+; found in Turn Duelist's Discard Pile.
+CreateEnergyCardListFromDiscardPile_AllEnergy: ; 2c2a4 (b:42a4)
ld c, $00
+; fallthrough
+; makes a list in wDuelTempList with the deck indices
+; of energy cards found in Turn Duelist's Discard Pile.
+; if (c == 0), all energy cards are allowed;
+; if (c != 0), double colorless energy cards are not included.
+; returns carry if no energy cards were found.
+CreateEnergyCardListFromDiscardPile: ; 2c2a6 (b:42a6)
; get number of cards in Discard Pile
; and have hl point to the end of the
; Discard Pile list in wOpponentDeckCards.
@@ -402,12 +654,359 @@ CreateEnergyCardListFromOpponentDiscardPile: ; 2c2a4 (b:42a4)
ret
; 0x2c2e0
- INCROM $2c2e0, $2c487
+; returns carry if Deck is empty
+CheckIfDeckIsEmpty: ; 2c2e0 (b:42e0)
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ ldtx hl, NoCardsLeftInTheDeckText
+ cp DECK_SIZE
+ ccf
+ ret
+; 0x2c2ec
-; handles the selection of a forced switch
-; by link/AI opponent or by the player.
-; outputs the Play Area location of the chosen
-; bench card in hTempPlayAreaLocation_ff9d.
+; searches through Deck in wDuelTempList looking for
+; a certain card or cards, and prints text depending
+; on whether at least one was found.
+; if none were found, asks the Player whether to look
+; in the Deck anyway, and returns carry if No is selected.
+; uses SEARCHEFFECT_* as input which determines what to search for:
+; SEARCHEFFECT_CARD_ID = search for card ID in e
+; SEARCHEFFECT_NIDORAN = search for either NidoranM or NidoranF
+; SEARCHEFFECT_BASIC_FIGHTING = search for any Basic Fighting Pokemon
+; SEARCHEFFECT_BASIC_ENERGY = search for any Basic Energy
+; SEARCHEFFECT_POKEMON = search for any Pokemon card
+; input:
+; d = SEARCHEFFECT_* constant
+; e = (optional) card ID to search for in deck
+; hl = text to print if Deck has card(s)
+; output:
+; carry set if refused to look at deck
+LookForCardsInDeck: ; 2c2ec (b:42ec)
+ push hl
+ push bc
+ ld a, [wDuelTempList]
+ cp $ff
+ jr z, .none_in_deck
+ ld a, d
+ ld hl, .search_table
+ call JumpToFunctionInTable
+ jr c, .none_in_deck
+ pop bc
+ pop hl
+ call DrawWideTextBox_WaitForInput
+ or a
+ ret
+
+.none_in_deck
+ pop hl
+ call LoadTxRam2
+ pop hl
+ ldtx hl, ThereIsNoInTheDeckText
+ call DrawWideTextBox_WaitForInput
+ ldtx hl, WouldYouLikeToCheckTheDeckText
+ call YesOrNoMenuWithText_SetCursorToYes
+ ret
+; 0x2c317
+
+.search_table
+ dw .SearchDeckForCardID
+ dw .SearchDeckForNidoran
+ dw .SearchDeckForBasicFighting
+ dw .SearchDeckForBasicEnergy
+ dw .SearchDeckForPokemon
+
+.set_carry ; 2c321 (b:4321)
+ scf
+ ret
+; 0x2c323
+
+; returns carry if no card with
+; same card ID as e is found in Deck
+.SearchDeckForCardID ; 2c323 (b:4323)
+ ld hl, wDuelTempList
+.loop_deck_e
+ ld a, [hli]
+ cp $ff
+ jr z, .set_carry
+ push de
+ call GetCardIDFromDeckIndex
+ ld a, e
+ pop de
+ cp e
+ jr nz, .loop_deck_e
+ or a
+ ret
+; 0x2c336
+
+; returns carry if no NidoranM or NidoranF card is found in Deck
+.SearchDeckForNidoran ; 2c336 (b:4336)
+ ld hl, wDuelTempList
+.loop_deck_nidoran
+ ld a, [hli]
+ cp $ff
+ jr z, .set_carry
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp NIDORANF
+ jr z, .found_nidoran
+ cp NIDORANM
+ jr nz, .loop_deck_nidoran
+.found_nidoran
+ or a
+ ret
+; 0x2c34c
+
+; returns carry if no Basic Fighting Pokemon is found in Deck
+.SearchDeckForBasicFighting ; 2c34c (b:434c)
+ ld hl, wDuelTempList
+.loop_deck_fighting
+ ld a, [hli]
+ cp $ff
+ jr z, .set_carry
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_PKMN_FIGHTING
+ jr nz, .loop_deck_fighting
+ ld a, [wLoadedCard2Stage]
+ or a ; BASIC
+ jr nz, .loop_deck_fighting
+ ret
+; 0x2c365
+
+; returns carry if no Basic Energy cards are found in Deck
+.SearchDeckForBasicEnergy ; 2c365 (b:4365)
+ ld hl, wDuelTempList
+.loop_deck_energy
+ ld a, [hli]
+ cp $ff
+ jr z, .set_carry
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ cp TYPE_ENERGY_DOUBLE_COLORLESS
+ jr z, .loop_deck_energy
+ and TYPE_ENERGY
+ jr z, .loop_deck_energy
+ or a
+ ret
+; 0x2c37d
+
+; returns carry if no Pokemon cards are found in Deck
+.SearchDeckForPokemon ; 2c37d (b:437d)
+ ld hl, wDuelTempList
+.loop_deck_pkmn
+ ld a, [hli]
+ cp $ff
+ jr z, .set_carry
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ cp TYPE_ENERGY
+ jr nc, .loop_deck_pkmn
+ or a
+ ret
+; 0x2c391
+
+; handles the Player selection of attack
+; to use, i.e. Amnesia or Metronome on.
+; returns carry if none selected.
+; outputs:
+; d = card index of defending card
+; e = attack index selected
+HandleDefendingPokemonAttackSelection: ; 2c391 (b:4391)
+ bank1call DrawDuelMainScene
+ call SwapTurn
+ xor a
+ ldh [hCurSelectionItem], a
+
+.start
+ bank1call PrintAndLoadMovesToDuelTempList
+ push af
+ ldh a, [hCurSelectionItem]
+ ld hl, .menu_parameters
+ call InitializeMenuParameters
+ pop af
+
+ ld [wNumMenuItems], a
+ call EnableLCD
+.loop_input
+ call DoFrame
+ ldh a, [hKeysPressed]
+ bit B_BUTTON_F, a
+ jr nz, .set_carry
+ and START
+ jr nz, .open_move_page
+ call HandleMenuInput
+ jr nc, .loop_input
+ cp -1
+ jr z, .loop_input
+
+; a move was selected
+ ldh a, [hCurMenuItem]
+ add a
+ ld e, a
+ ld d, $00
+ ld hl, wDuelTempList
+ add hl, de
+ ld d, [hl]
+ inc hl
+ ld e, [hl]
+ call SwapTurn
+ or a
+ ret
+
+.set_carry
+ call SwapTurn
+ scf
+ ret
+
+.open_move_page
+ ldh a, [hCurMenuItem]
+ ldh [hCurSelectionItem], a
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ bank1call OpenMovePage
+ call SwapTurn
+ bank1call DrawDuelMainScene
+ call SwapTurn
+ jr .start
+; 0x2c3f4
+
+.menu_parameters
+ db 1, 13 ; cursor x, cursor y
+ db 2 ; y displacement between items
+ db 2 ; number of items
+ db SYM_CURSOR_R ; cursor tile number
+ db SYM_SPACE ; tile behind cursor
+ dw $0000 ; function pointer if non-0
+; 0x2c3fc
+
+; loads in hl the pointer to attack's name.
+; input:
+; d = deck index of card
+; e = attack index (0 = first attack, 1 = second attack)
+GetAttackName: ; 2c3fc (b:43fc)
+ ld a, d
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld hl, wLoadedCard1Move1Name
+ inc e
+ dec e
+ jr z, .load_name
+ ld hl, wLoadedCard1Move2Name
+.load_name
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+; 0x2c40e
+
+; returns carry if Defending Pokemon
+; doesn't have an attack.
+CheckIfDefendingPokemonHasAnyAttack: ; 2c40e (b:440e)
+ call SwapTurn
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Move1Category]
+ cp POKEMON_POWER
+ jr nz, .has_attack
+ ld hl, wLoadedCard2Move2Name
+ ld a, [hli]
+ or [hl]
+ jr nz, .has_attack
+ call SwapTurn
+ scf
+ ret
+.has_attack
+ call SwapTurn
+ or a
+ ret
+; 0x2c431
+
+; overwrites HP and Stage data of the card that was
+; devolved in the Play Area to the values of new card.
+; if the damage exceeds HP of pre-evolution,
+; then HP is set to zero.
+; input:
+; a = card index of pre-evolved card
+UpdateDevolvedCardHPAndStage: ; 2c431 (b:4431)
+ push bc
+ push de
+ push af
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld e, a
+ call GetCardDamageAndMaxHP
+ ld b, a ; store damage
+ ld a, e
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ pop af
+
+ ld [hl], a
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, e
+ add DUELVARS_ARENA_CARD_HP
+ ld l, a
+ ld a, [wLoadedCard2HP]
+ sub b ; subtract damage from new HP
+ jr nc, .got_hp
+ ; damage exceeds HP
+ xor a ; 0 HP
+.got_hp
+ ld [hl], a
+ ld a, e
+; overwrite card stage
+ add DUELVARS_ARENA_CARD_STAGE
+ ld l, a
+ ld a, [wLoadedCard2Stage]
+ ld [hl], a
+ pop de
+ pop bc
+ ret
+; 0x2c45d
+
+; reset various status after devolving card.
+ResetDevolvedCardStatus: ; 2c45d (b:445d)
+; if it's Arena card, clear status conditions
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ or a
+ jr nz, .skip_clear_status
+ call ClearAllStatusConditions
+.skip_clear_status
+; reset changed color status
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ add DUELVARS_ARENA_CARD_CHANGED_TYPE
+ call GetTurnDuelistVariable
+ ld [hl], $00
+; reset C2 flags
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ add DUELVARS_ARENA_CARD_FLAGS
+ ld l, a
+ ld [hl], $00
+ ret
+; 0x2c476
+
+; prompts the Player with a Yes/No question
+; whether to quit the screen, even though
+; they can select more cards from list.
+; [hCurSelectionItem] holds number of cards
+; that were already selected by the Player.
+; input:
+; - a = total number of cards that can be selected
+; output:
+; - carry set if "No" was selected
+AskWhetherToQuitSelectingCards: ; 2c476 (b:4476)
+ ld hl, hCurSelectionItem
+ sub [hl]
+ ld l, a
+ ld h, $00
+ call LoadTxRam3
+ ldtx hl, YouCanSelectMoreCardsQuitText
+ call YesOrNoMenuWithText
+ ret
+; 0x2c487
+
+; handles the selection of a forced switch by link/AI opponent or by the player.
+; outputs the Play Area location of the chosen bench card in hTempPlayAreaLocation_ff9d.
DuelistSelectForcedSwitch: ; 2c487 (b:4487)
ld a, DUELVARS_DUELIST_TYPE
call GetNonTurnDuelistVariable
@@ -459,12 +1058,403 @@ DuelistSelectForcedSwitch: ; 2c487 (b:4487)
ret
; 0x2c4da
- INCROM $2c4da, $2c6f0
+; returns in a the card index of energy card
+; attached to Defending Pokemon
+; that is to be discarded by the AI for an effect.
+; outputs $ff is none was found.
+; output:
+; a = deck index of attached energy card chosen
+AIPickEnergyCardToDiscardFromDefendingPokemon: ; 2c4da (b:44da)
+ call SwapTurn
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+
+ xor a
+ call CreateArenaOrBenchEnergyCardList
+ jr nc, .has_energy
+ ; no energy, return
+ ld a, $ff
+ jr .done
+
+.has_energy
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld e, COLORLESS
+ ld a, [wAttachedEnergies + COLORLESS]
+ or a
+ jr nz, .pick_color ; has colorless attached?
+
+ ; no colorless energy attached.
+ ; if it's colorless Pokemon, just
+ ; pick any energy card at random...
+ ld a, [wLoadedCard1Type]
+ cp COLORLESS
+ jr nc, .choose_random
+
+ ; ...if not, check if it has its
+ ; own color energy attached.
+ ; if it doesn't, pick at random.
+ ld e, a
+ ld d, $00
+ ld hl, wAttachedEnergies
+ add hl, de
+ ld a, [hl]
+ or a
+ jr z, .choose_random
+
+; pick attached card with same color as e
+.pick_color
+ ld hl, wDuelTempList
+.loop_energy
+ ld a, [hli]
+ cp $ff
+ jr z, .choose_random
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ and TYPE_PKMN
+ cp e
+ jr nz, .loop_energy
+ dec hl
+
+.done_chosen
+ ld a, [hl]
+.done
+ call SwapTurn
+ ret
+
+.choose_random
+ call CountCardsInDuelTempList
+ ld hl, wDuelTempList
+ call ShuffleCards
+ jr .done_chosen
+; 0x2c532
+
+; handles AI logic to pick attack for Amnesia
+AIPickAttackForAmnesia: ; 2c532 (b:4532)
+; load Defending Pokemon attacks
+ call SwapTurn
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ call HandleEnergyBurn
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ ld d, a
+ call LoadCardDataToBuffer2_FromDeckIndex
+; if has no attack 1 name, return
+ ld hl, wLoadedCard2Move1Name
+ ld a, [hli]
+ or [hl]
+ jr z, .chosen
+
+; if Defending Pokemon has enough energy for second attack, choose it
+ ld e, SECOND_ATTACK
+ bank1call _CheckIfEnoughEnergiesToMove
+ jr nc, .chosen
+; otherwise if first attack isn't a Pkmn Power, choose it instead.
+ ld e, FIRST_ATTACK_OR_PKMN_POWER
+ ld a, [wLoadedCard2Move1Category]
+ cp POKEMON_POWER
+ jr nz, .chosen
+; if it is a Pkmn Power, choose second attack.
+ ld e, SECOND_ATTACK
+.chosen
+ ld a, e
+ call SwapTurn
+ ret
+; 0x2c564
+
+; Return in a the PLAY_AREA_* of the non-turn holder's Pokemon card in bench with the lowest (remaining) HP.
+; if multiple cards are tied for the lowest HP, the one with the highest PLAY_AREA_* is returned.
+GetBenchPokemonWithLowestHP: ; 2c564 (b:4564)
+ call SwapTurn
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld c, a
+ lb de, PLAY_AREA_ARENA, $ff
+ ld b, d
+ ld a, DUELVARS_BENCH1_CARD_HP
+ call GetTurnDuelistVariable
+ jr .start
+; find Play Area location with least amount of HP
+.loop_bench
+ ld a, e
+ cp [hl]
+ jr c, .next ; skip if HP is higher
+ ld e, [hl]
+ ld d, b
+
+.next
+ inc hl
+.start
+ inc b
+ dec c
+ jr nz, .loop_bench
+
+ ld a, d
+ call SwapTurn
+ ret
+; 0x2c588
+
+; handles drawing and selection of screen for
+; choosing a color (excluding colorless), for use
+; of Shift Pkmn Power and Conversion attacks.
+; outputs in a the color that was selected or,
+; if B was pressed, returns carry.
+; input:
+; a = Play Area location (PLAY_AREA_*), with:
+; bit 7 not set if it's applying to opponent's card
+; bit 7 set if it's applying to player's card
+; hl = text to be printed in the bottom box
+; output:
+; a = color that was selected
+HandleColorChangeScreen: ; 2c588 (b:4588)
+ or a
+ call z, SwapTurn
+ push af
+ call .DrawScreen
+ pop af
+ call z, SwapTurn
+
+ ld hl, .menu_params
+ xor a
+ call InitializeMenuParameters
+ call EnableLCD
+
+.loop_input
+ call DoFrame
+ call HandleMenuInput
+ jr nc, .loop_input
+ cp -1 ; b pressed?
+ jr z, .set_carry
+ ld e, a
+ ld d, $00
+ ld hl, ShiftListItemToColor
+ add hl, de
+ ld a, [hl]
+ or a
+ ret
+.set_carry
+ scf
+ ret
+
+.menu_params
+ db 1, 1 ; cursor x, cursor y
+ db 2 ; y displacement between items
+ db MAX_PLAY_AREA_POKEMON ; number of items
+ db SYM_CURSOR_R ; cursor tile number
+ db SYM_SPACE ; tile behind cursor
+ dw $0000 ; function pointer if non-0
+; 0x2c5be
+
+.DrawScreen: ; 2c5be (b:45be)
+ push hl
+ push af
+ call EmptyScreen
+ call ZeroObjectPositions
+ call LoadDuelCardSymbolTiles
+
+; load card data
+ pop af
+ and $7f
+ ld [wTempPlayAreaLocation_cceb], a
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+
+; draw card gfx
+ ld de, v0Tiles1 + $20 tiles ; destination offset of loaded gfx
+ ld hl, wLoadedCard1Gfx
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ lb bc, $30, TILE_SIZE
+ call LoadCardGfx
+ bank1call SetBGP6OrSGB3ToCardPalette
+ bank1call FlushAllPalettesOrSendPal23Packet
+ ld a, $a0
+ lb hl, 6, 1
+ lb de, 9, 2
+ lb bc, 8, 6
+ call FillRectangle
+ bank1call ApplyBGP6OrSGB3ToCardImage
+
+; print card name and level at the top
+ ld a, 16
+ call CopyCardNameAndLevel
+ ld [hl], $00
+ lb de, 7, 0
+ call InitTextPrinting
+ ld hl, wDefaultText
+ call ProcessText
+
+; list all the colors
+ ld hl, ShiftMenuData
+ call PlaceTextItems
+
+; print card's color, resistance and weakness
+ ld a, [wTempPlayAreaLocation_cceb]
+ call GetPlayAreaCardColor
+ inc a
+ lb bc, 15, 9
+ call WriteByteToBGMap0
+ ld a, [wTempPlayAreaLocation_cceb]
+ call GetPlayAreaCardWeakness
+ lb bc, 15, 10
+ bank1call PrintCardPageWeaknessesOrResistances
+ ld a, [wTempPlayAreaLocation_cceb]
+ call GetPlayAreaCardResistance
+ lb bc, 15, 11
+ bank1call PrintCardPageWeaknessesOrResistances
+
+ call DrawWideTextBox
+
+; print list of color names on all list items
+ lb de, 4, 1
+ ldtx hl, ColorListText
+ call InitTextPrinting_ProcessTextFromID
+
+; print input hl to text box
+ lb de, 1, 14
+ pop hl
+ call InitTextPrinting_ProcessTextFromID
+
+; draw and apply palette to color icons
+ ld hl, ColorTileAndBGP
+ lb de, 2, 0
+ ld c, NUM_COLORED_TYPES
+.loop_colors
+ ld a, [hli]
+ push de
+ push bc
+ push hl
+ lb hl, 1, 2
+ lb bc, 2, 2
+ call FillRectangle
+
+ ld a, [wConsole]
+ cp CONSOLE_CGB
+ jr nz, .skip_vram1
+ pop hl ; unnecessary
+ push hl ; unnecessary
+ call BankswitchVRAM1
+ ld a, [hl]
+ lb hl, 0, 0
+ lb bc, 2, 2
+ call FillRectangle
+ call BankswitchVRAM0
+
+.skip_vram1
+ pop hl
+ pop bc
+ pop de
+ inc hl
+ inc e
+ inc e
+ dec c
+ jr nz, .loop_colors
+ ret
+; 0x2c686
+
+; loads wTxRam2 and wTxRam2_b:
+; [wTxRam2] <- wLoadedCard1Name
+; [wTxRam2_b] <- input color as text symbol
+; input:
+; a = type (color) constant
+LoadCardNameAndInputColor: ; 2c686 (b:4686)
+ add a
+ ld e, a
+ ld d, $00
+ ld hl, ColorToTextSymbol
+ add hl, de
+
+; load wTxRam2 with card's name
+ ld de, wTxRam2
+ ld a, [wLoadedCard1Name]
+ ld [de], a
+ inc de
+ ld a, [wLoadedCard1Name + 1]
+ ld [de], a
+
+; load wTxRam2_b with ColorToTextSymbol
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ ret
+; 0x2c6a1
+
+ShiftMenuData: ; 2c6a1 (b:46a1)
+ ; x, y, text id
+ textitem 10, 9, TypeText
+ textitem 10, 10, WeaknessText
+ textitem 10, 11, ResistanceText
+ db $ff
+
+ColorTileAndBGP: ; 2c6ae (b:46ae)
+ ; tile, BG
+ db $E4, $02
+ db $E0, $01
+ db $EC, $02
+ db $E8, $01
+ db $F0, $03
+ db $F4, $03
+
+ShiftListItemToColor: ; 2c6ba (b:46ba)
+ db GRASS
+ db FIRE
+ db WATER
+ db LIGHTNING
+ db FIGHTING
+ db PSYCHIC
+
+ColorToTextSymbol: ; 2c6c0 (b:46c0)
+ tx FireSymbolText
+ tx GrassSymbolText
+ tx LightningSymbolText
+ tx WaterSymbolText
+ tx FightingSymbolText
+ tx PsychicSymbolText
+
+DrawSymbolOnPlayAreaCursor: ; 2c6cc (b:46cc)
+ ld c, a
+ add a
+ add c
+ add 2
+ ; a = 3*a + 2
+ ld c, a
+ ld a, b
+ ld b, 0
+ call WriteByteToBGMap0
+ ret
+; 0x2c6d9
+
+ INCROM $2c6d9, $2c6e0
+
+PlayAreaSelectionMenuParameters: ; 2c6e0 (b:46e0)
+ db 0, 0 ; cursor x, cursor y
+ db 3 ; y displacement between items
+ db MAX_PLAY_AREA_POKEMON ; number of items
+ db SYM_CURSOR_R ; cursor tile number
+ db SYM_SPACE ; tile behind cursor
+ dw $0000 ; function pointer if non-0
+; 0x2c6e8
+
+BenchSelectionMenuParameters: ; 2c6e8 (b:46e8)
+ db 0, 3 ; cursor x, cursor y
+ db 3 ; y displacement between items
+ db MAX_PLAY_AREA_POKEMON ; number of items
+ db SYM_CURSOR_R ; cursor tile number
+ db SYM_SPACE ; tile behind cursor
+ dw $0000 ; function pointer if non-0
+; 0x2c6f0
SpitPoison_AIEffect: ; 2c6f0 (b:46f0)
- ld a, 5
+ ld a, 10 / 2
lb de, 0, 10
- jp Func_2c0fb
+ jp SetExpectedAIDamage
; If heads, defending Pokemon becomes poisoned
SpitPoison_Poison50PercentEffect: ; 2c6f8 (b:46f8)
@@ -476,10 +1466,9 @@ SpitPoison_Poison50PercentEffect: ; 2c6f8 (b:46f8)
call SetNoEffectFromStatus
ret
-; outputs in hTemp_ffa0 the result of the coin toss
-; (0 = tails, 1 = heads) and, in case it was heads,
-; stores in hTempPlayAreaLocation_ffa1 the location
-; of the Bench Pokemon that was selected for switch.
+; outputs in hTemp_ffa0 the result of the coin toss (0 = tails, 1 = heads).
+; in case it was heads, stores in hTempPlayAreaLocation_ffa1
+; the PLAY_AREA_* location of the Bench Pokemon that was selected for switch.
TerrorStrike_50PercentSelectSwitchPokemon: ; 2c70a (b:470a)
xor a
ldh [hTemp_ffa0], a
@@ -490,8 +1479,7 @@ TerrorStrike_50PercentSelectSwitchPokemon: ; 2c70a (b:470a)
cp 2
ret c
-; toss coin and store whether it was tails (0)
-; or heads (1) in hTemp_ffa0
+; toss coin and store whether it was tails (0) or heads (1) in hTemp_ffa0.
; return if it was tails.
ldtx de, IfHeadsChangeOpponentsActivePokemonText
call Func_2c08a
@@ -503,8 +1491,8 @@ TerrorStrike_50PercentSelectSwitchPokemon: ; 2c70a (b:470a)
ldh [hTempPlayAreaLocation_ffa1], a
ret
-; if coin toss was heads and it's possible,
-; switch Defending Pokemon
+; if coin toss at hTemp_ffa0 was heads and it's possible,
+; switch the Defending Pokemon
TerrorStrike_SwitchDefendingPokemon: ; 2c726 (b:4726)
ldh a, [hTemp_ffa0]
or a
@@ -516,15 +1504,59 @@ TerrorStrike_SwitchDefendingPokemon: ; 2c726 (b:4726)
PoisonFang_AIEffect: ; 2c730 (b:4730)
ld a, 10
lb de, 10, 10
- jp Func_2c0d4
+ jp UpdateExpectedAIDamage_AccountForPoison
WeepinbellPoisonPowder_AIEffect: ; 2c738 (b:4738)
ld a, 5
lb de, 0, 10
- jp Func_2c0d4
+ jp UpdateExpectedAIDamage_AccountForPoison
; 0x2c740
- INCROM $2c740, $2c77e
+; return carry if there are no Pokemon cards in the non-turn holder's bench
+VictreebelLure_AssertPokemonInBench: ; 2c740 (b:4740)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ ldtx hl, EffectNoPokemonOnTheBenchText
+ cp 2
+ ret
+; 0x2c74b
+
+; return in hTempPlayAreaLocation_ffa1 the PLAY_AREA_* location
+; of the Bench Pokemon that was selected for switch
+VictreebelLure_SelectSwitchPokemon: ; 2c74b (b:474b)
+ ldtx hl, SelectPkmnOnBenchToSwitchWithActiveText
+ call DrawWideTextBox_WaitForInput
+ call SwapTurn
+ bank1call HasAlivePokemonInBench
+.select_pokemon
+ bank1call OpenPlayAreaScreenForSelection
+ jr c, .select_pokemon
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ call SwapTurn
+ ret
+; 0x2c764
+
+; Return in hTemp_ffa0 the PLAY_AREA_* of the non-turn holder's Pokemon card in bench with the lowest (remaining) HP.
+; if multiple cards are tied for the lowest HP, the one with the highest PLAY_AREA_* is returned.
+VictreebelLure_GetBenchPokemonWithLowestHP: ; 2c764 (b:4764)
+ call GetBenchPokemonWithLowestHP
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2c76a
+
+; Defending Pokemon is swapped out for the one with the PLAY_AREA_* at hTemp_ffa0
+; unless Mew's Neutralizing Shield or Haunter's Transparency prevents it.
+VictreebelLure_SwitchDefendingPokemon: ; 2c76a (b:476a)
+ call SwapTurn
+ ldh a, [hTemp_ffa0]
+ ld e, a
+ call HandleNShieldAndTransparency
+ call nc, SwapArenaWithBenchPokemon
+ call SwapTurn
+ xor a
+ ld [wDuelDisplayedScreen], a
+ ret
; If heads, defending Pokemon can't retreat next turn
AcidEffect: ; 2c77e (b:477e)
@@ -538,7 +1570,7 @@ AcidEffect: ; 2c77e (b:477e)
GloomPoisonPowder_AIEffect: ; 2c78b (b:478b)
ld a, 10
lb de, 10, 10
- jp Func_2c0d4
+ jp UpdateExpectedAIDamage_AccountForPoison
; Defending Pokemon and user become confused
FoulOdorEffect: ; 2c793 (b:4793)
@@ -562,10 +1594,26 @@ KakunaStiffenEffect: ; 2c7a0 (b:47a0)
KakunaPoisonPowder_AIEffect: ; 2c7b4 (b:47b4)
ld a, 5
lb de, 0, 10
- jp Func_2c0d4
+ jp UpdateExpectedAIDamage_AccountForPoison
; 0x2c7bc
- INCROM $2c7bc, $2c7d0
+GolbatLeechLifeEffect: ; 2c7bc (b:47bc)
+ ld hl, wDealtDamage
+ ld e, [hl]
+ inc hl ; wDamageEffectiveness
+ ld d, [hl]
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2c7c6
+
+VenonatLeechLifeEffect: ; 2c7c6 (b:47c6)
+ ld hl, wDealtDamage
+ ld e, [hl]
+ inc hl ; wDamageEffectiveness
+ ld d, [hl]
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2c7d0
; During your next turn, double damage
SwordsDanceEffect: ; 2c7d0 (b:47d0)
@@ -583,12 +1631,19 @@ ZubatSupersonicEffect: ; 2c7dc (b:47dc)
ret
; 0x2c7e3
- INCROM $2c7e3, $2c7ed
+ZubatLeechLifeEffect: ; 2c7e3 (b:47e3)
+ ld hl, wDealtDamage
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2c7ed
Twineedle_AIEffect: ; 2c7ed (b:47ed)
- ld a, 30
+ ld a, 60 / 2
lb de, 0, 60
- jp Func_2c0fb
+ jp SetExpectedAIDamage
; Flip 2 coins; deal 30x number of heads
Twineedle_MultiplierEffect: ; 2c7f5 (b:47f5)
@@ -601,16 +1656,30 @@ Twineedle_MultiplierEffect: ; 2c7f5 (b:47f5)
add a
add e
call ATimes10
- call StoreDamageInfo
+ call SetDefiniteDamage
ret
; 0x2c80d
- INCROM $2c80d, $2c822
+BeedrillPoisonSting_AIEffect: ; 2c80d (b:480d)
+ ld a, 5
+ lb de, 0, 10
+ jp UpdateExpectedAIDamage_AccountForPoison
+; 0x2c815
+
+ExeggcuteLeechSeedEffect: ; 2c815 (b:4815)
+ ld hl, wDealtDamage
+ ld a, [hli]
+ or a
+ ret z ; return if no damage dealt
+ ld de, 10
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2c822
FoulGas_AIEffect: ; 2c822 (b:4822)
ld a, 5
lb de, 0, 10
- jp Func_2c0e9
+ jp UpdateExpectedAIDamage
; If heads, defending Pokemon becomes poisoned. If tails, defending Pokemon becomes confused
FoulGas_PoisonOrConfusionEffect: ; 2c82a (b:482a)
@@ -632,7 +1701,154 @@ MetapodStiffenEffect: ; 2c836 (b:4836)
ret
; 0x2c84a
- INCROM $2c84a, $2c925
+; returns carry if no cards in Deck or if
+; Play Area is full already.
+Sprout_CheckDeckAndPlayArea: ; 2c84a (b:484a)
+ call CheckIfDeckIsEmpty
+ ret c ; return if no cards in deck
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, NoSpaceOnTheBenchText
+ cp MAX_PLAY_AREA_POKEMON
+ ccf
+ ret
+; 0x2c85a
+
+Sprout_PlayerSelectEffect: ; 2c85a (b:485a)
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+
+ call CreateDeckCardList
+ ldtx hl, ChooseAnOddishFromDeckText
+ ldtx bc, OddishText
+ lb de, SEARCHEFFECT_CARD_ID, ODDISH
+ call LookForCardsInDeck
+ ret c
+
+; draw Deck list interface and print text
+ bank1call Func_5591
+ ldtx hl, ChooseAnOddishText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+
+.loop
+ bank1call DisplayCardList
+ jr c, .pressed_b
+ call GetCardIDFromDeckIndex
+ ld bc, ODDISH
+ call CompareDEtoBC
+ jr nz, .play_sfx
+
+; Oddish was selected
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+
+.play_sfx
+ ; play SFX and loop back
+ call Func_3794
+ jr .loop
+
+.pressed_b
+; figure if Player can exit the screen without selecting,
+; that is, if the Deck has no Oddish card.
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop_b_press
+ ld a, [hl]
+ cp CARD_LOCATION_DECK
+ jr nz, .next
+ ld a, l
+ call GetCardIDFromDeckIndex
+ ld bc, ODDISH
+ call CompareDEtoBC
+ jr z, .play_sfx ; found Oddish, go back to top loop
+.next
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_b_press
+
+; no Oddish in Deck, can safely exit screen
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+; 0x2c8b7
+
+Sprout_AISelectEffect: ; 2c8b7 (b:48b7)
+ call CreateDeckCardList
+ ld hl, wDuelTempList
+.loop_deck
+ ld a, [hli]
+ ldh [hTemp_ffa0], a
+ cp $ff
+ ret z ; no Oddish
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp ODDISH
+ jr nz, .loop_deck
+ ret ; Oddish found
+; 0x2c8cc
+
+Sprout_PutInPlayAreaEffect: ; 2c8cc (b:48cc)
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ jr z, .shuffle
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ call PutHandPokemonCardInPlayArea
+ call IsPlayerTurn
+ jr c, .shuffle
+ ; display card on screen
+ ldh a, [hTemp_ffa0]
+ ldtx hl, PlacedOnTheBenchText
+ bank1call DisplayCardDetailScreen
+.shuffle
+ call Func_2c0bd
+ ret
+; 0x2c8ec
+
+; returns carry if no Pokemon on Bench
+Teleport_CheckBench: ; 2c8ec (b:48ec)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, ThereAreNoPokemonOnBenchText
+ cp 2
+ ret
+; 0x2c8f7
+
+Teleport_PlayerSelectEffect: ; 2c8f7 (b:48f7)
+ ldtx hl, SelectPkmnOnBenchToSwitchWithActiveText
+ call DrawWideTextBox_WaitForInput
+ bank1call HasAlivePokemonInBench
+ ld a, $01
+ ld [wcbd4], a
+.loop
+ bank1call OpenPlayAreaScreenForSelection
+ jr c, .loop
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2c90f
+
+Teleport_AISelectEffect: ; 2c90f (b:490f)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ call Random
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2c91a
+
+Teleport_SwitchEffect: ; 2c91a (b:491a)
+ ldh a, [hTemp_ffa0]
+ ld e, a
+ call SwapArenaWithBenchPokemon
+ xor a
+ ld [wDuelDisplayedScreen], a
+ ret
+; 0x2c925
BigEggsplosion_AIEffect: ; 2c925 (b:4925)
ldh a, [hTempPlayAreaLocation_ff9d]
@@ -681,9 +1897,9 @@ SetDamageToATimes20: ; 2c958 (b:4958)
ret
Thrash_AIEffect: ; 2c96b (b:496b)
- ld a, 35
+ ld a, (30 + 40) / 2
lb de, 30, 40
- jp Func_2c0fb
+ jp SetExpectedAIDamage
; If heads 10 more damage; if tails, 10 damage to itself
Thrash_ModifierEffect: ; 2c973 (b:4973)
@@ -695,28 +1911,442 @@ Thrash_ModifierEffect: ; 2c973 (b:4973)
call AddToDamage
ret
-Func_2c982: ; 2c982 (b:4982)
+Thrash_LowRecoilEffect: ; 2c982 (b:4982)
ldh a, [hTemp_ffa0]
or a
ret nz
ld a, 10
- call Func_1955
+ call DealRecoilDamageToSelf
ret
Toxic_AIEffect: ; 2c98c (b:498c)
ld a, 20
lb de, 20, 20
- jp Func_2c0e9
+ jp UpdateExpectedAIDamage
-; Defending Pokémon becomes poisoned, but takes 20 damage (double poisoned)
+; Defending Pokémon becomes double poisoned (takes 20 damage per turn rather than 10)
Toxic_DoublePoisonEffect: ; 2c994 (b:4994)
call DoublePoisonEffect
ret
; 0x2c998
- INCROM $2c998, $2cbfb
+BoyfriendsEffect: ; 2c998 (b:4998)
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ ld c, PLAY_AREA_ARENA
+.loop
+ ld a, [hl]
+ cp $ff
+ jr z, .done
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp NIDOKING
+ jr nz, .next
+ ld a, d
+ cp $00 ; why check d? Card IDs are only 1 byte long
+ jr nz, .next
+ inc c
+.next
+ inc hl
+ jr .loop
+.done
+; c holds number of Nidoking found in Play Area
+ ld a, c
+ add a
+ call ATimes10
+ call AddToDamage ; adds 2 * 10 * c
+ ret
+; 0x2c9be
+
+NidoranFFurySwipes_AIEffect: ; 2c9be (b:49be)
+ ld a, 30 / 2
+ lb de, 0, 30
+ jp SetExpectedAIDamage
+; 0x2c9c6
+
+NidoranFFurySwipes_MultiplierEffect: ; 2c9c6 (b:49c6)
+ ld hl, 10
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 3
+ call TossCoinATimes_BankB
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2c9db
+
+NidoranFCallForFamily_CheckDeckAndPlayArea: ; 2c9db (b:49db)
+ call CheckIfDeckIsEmpty
+ ret c ; return if no cards in deck
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, NoSpaceOnTheBenchText
+ cp MAX_PLAY_AREA_POKEMON
+ ccf
+ ret
+; 0x2c9eb
+
+NidoranFCallForFamily_PlayerSelectEffect: ; 2c9eb (b:49eb)
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+
+ call CreateDeckCardList
+ ldtx hl, ChooseNidoranFromDeckText
+ ldtx bc, NidoranMNidoranFText
+ lb de, SEARCHEFFECT_NIDORAN, $00
+ call LookForCardsInDeck
+ ret c
+
+; draw Deck list interface and print text
+ bank1call Func_5591
+ ldtx hl, ChooseNidoranText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+
+.loop
+ bank1call DisplayCardList
+ jr c, .pressed_b
+ call GetCardIDFromDeckIndex
+ ld bc, NIDORANF
+ call CompareDEtoBC
+ jr z, .selected_nidoran
+ ld bc, NIDORANM
+ call CompareDEtoBC
+ jr nz, .loop ; .play_sfx would be more appropriate here
+
+.selected_nidoran
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+
+.play_sfx
+ ; play SFX and loop back
+ call Func_3794
+ jr .loop
+
+.pressed_b
+; figure if Player can exit the screen without selecting,
+; that is, if the Deck has no NidoranF or NidoranM card.
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop_b_press
+ ld a, [hl]
+ cp CARD_LOCATION_DECK
+ jr nz, .next
+ ld a, l
+ call GetCardIDFromDeckIndex
+ ld bc, NIDORANF
+ call CompareDEtoBC
+ jr z, .play_sfx ; found, go back to top loop
+ ld bc, NIDORANM
+ jr z, .play_sfx ; found, go back to top loop
+.next
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_b_press
+
+; no Nidoran in Deck, can safely exit screen
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+; 0x2ca55
+
+NidoranFCallForFamily_AISelectEffect: ; 2ca55 (b:4a55)
+ call CreateDeckCardList
+ ld hl, wDuelTempList
+.loop_deck
+ ld a, [hli]
+ ldh [hTemp_ffa0], a
+ cp $ff
+ ret z ; none found
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp NIDORANF
+ jr z, .found
+ cp NIDORANM
+ jr nz, .loop_deck
+.found
+ ret
+; 0x2ca6e
+
+NidoranFCallForFamily_PutInPlayAreaEffect: ; 2ca6e (b:4a6e)
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ jr z, .shuffle
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ call PutHandPokemonCardInPlayArea
+ call IsPlayerTurn
+ jr c, .shuffle
+ ; display card on screen
+ ldh a, [hTemp_ffa0]
+ ldtx hl, PlacedOnTheBenchText
+ bank1call DisplayCardDetailScreen
+.shuffle
+ call Func_2c0bd
+ ret
+; 0x2ca8e
+
+HornHazard_AIEffect: ; 2ca8e (b:4a8e)
+ ld a, 30 / 2
+ lb de, 0, 30
+ jp SetExpectedAIDamage
+; 0x2ca96
+
+HornHazard_NoDamage50PercentEffect: ; 2ca96 (b:4a96)
+ ldtx de, DamageCheckIfTailsNoDamageText
+ call TossCoin_BankB
+ jr c, .heads
+ xor a
+ call SetDefiniteDamage
+ call SetWasUnsuccessful
+ ret
+.heads
+ ld a, $01
+ ld [wLoadedMoveAnimation], a
+ ret
+; 0x2caac
+
+NidorinaSupersonicEffect: ; 2caac (b:4aac)
+ call Confusion50PercentEffect
+ call nc, SetNoEffectFromStatus
+ ret
+; 0x2cab3
+
+NidorinaDoubleKick_AIEffect: ; 2cab3 (b:4ab3)
+ ld a, 60 / 2
+ lb de, 0, 60
+ jp SetExpectedAIDamage
+; 0x2cabb
+
+NidorinaDoubleKick_MultiplierEffect: ; 2cabb (b:4abb)
+ ld hl, 30
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 2
+ call TossCoinATimes_BankB
+ ld e, a
+ add a
+ add e
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2cad3
+
+NidorinoDoubleKick_AIEffect: ; 2cad3 (b:4ad3)
+ ld a, 60 / 2
+ lb de, 0, 60
+ jp SetExpectedAIDamage
+; 0x2cadb
+
+NidorinoDoubleKick_MultiplierEffect: ; 2cabb (b:4abb)
+ ld hl, 30
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 2
+ call TossCoinATimes_BankB
+ ld e, a
+ add a
+ add e
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2caf3
+
+ButterfreeWhirlwind_CheckBench: ; 2caf3 (b:4af3)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp 2
+ jr nc, .has_bench
+ ; no bench, do not do effect
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ret
+.has_bench
+ call DuelistSelectForcedSwitch
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2cb09
+
+ButterfreeWhirlwind_SwitchEffect: ; 2cb09 (b:4b09)
+ ldh a, [hTemp_ffa0]
+ call HandleSwitchDefendingPokemonEffect
+ ret
+; 0x2cb0f
+
+ButterfreeMegaDrainEffect: ; 2cb0f (b:4b0f)
+ ld hl, wDealtDamage
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ srl h
+ rr l
+ bit 0, l
+ jr z, .rounded
+ ; round up to nearest 10
+ ld de, 10 / 2
+ add hl, de
+.rounded
+ ld e, l
+ ld d, h
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2cb27
+
+WeedlePoisonSting_AIEffect: ; 2cb27 (b:4b27)
+ ld a, 5
+ lb de, 0, 10
+ jp UpdateExpectedAIDamage_AccountForPoison
+; 0x2cb2f
+
+IvysaurPoisonPowder_AIEffect: ; 2cb2f (b:4b2f)
+ ld a, 10
+ lb de, 10, 10
+ jp UpdateExpectedAIDamage_AccountForPoison
+; 0x2cb37
+
+BulbasaurLeechSeedEffect: ; 2cb37 (b:4b37)
+ ld hl, wDealtDamage
+ ld a, [hli]
+ or [hl]
+ ret z ; return if no damage dealt
+ lb de, 0, 10
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2cb44
+
+; returns carry if no Grass Energy in Play Area
+EnergyTrans_CheckPlayArea: ; 2cb44 (b:4b44)
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ ret c ; cannot use Pkmn Power
+
+; search in Play Area for at least 1 Grass Energy type
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop_deck
+ ld a, [hl]
+ and CARD_LOCATION_PLAY_AREA
+ jr z, .next
+ push hl
+ ld a, l
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ pop hl
+ cp TYPE_ENERGY_GRASS
+ ret z
+.next
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_deck
-Func_2cbfb: ; 2cbfb (b:4bfb)
+; none found
+ ldtx hl, NoGrassEnergyText
+ scf
+ ret
+; 0x2cb6f
+
+EnergyTrans_PrintProcedure: ; 2cb6f (b:4b6f)
+ ldtx hl, ProcedureForEnergyTransferText
+ bank1call DrawWholeScreenTextBox
+ or a
+ ret
+; 0x2cb77
+
+EnergyTrans_TransferEffect: ; 2cb77 (b:4b77)
+ ld a, DUELVARS_DUELIST_TYPE
+ call GetTurnDuelistVariable
+ cp DUELIST_TYPE_PLAYER
+ jr z, .player
+; not player
+ bank1call Func_61a1
+ bank1call PrintPlayAreaCardList_EnableLCD
+ ret
+
+.player
+ xor a
+ ldh [hCurSelectionItem], a
+ bank1call Func_61a1
+
+.draw_play_area
+ bank1call PrintPlayAreaCardList_EnableLCD
+ push af
+ ldh a, [hCurSelectionItem]
+ ld hl, PlayAreaSelectionMenuParameters
+ call InitializeMenuParameters
+ pop af
+ ld [wNumMenuItems], a
+
+; handle the action of taking a Grass Energy card
+.loop_input_take
+ call DoFrame
+ call HandleMenuInput
+ jr nc, .loop_input_take
+ cp -1 ; b press?
+ ret z
+
+; a press
+ ldh [hAIPkmnPowerEffectParam], a
+ ldh [hCurSelectionItem], a
+ call CheckIfCardHasGrassEnergyAttached
+ jr c, .play_sfx ; no Grass attached
+
+ ldh [hAIEnergyTransEnergyCard], a
+ ldh a, [hAIEnergyTransEnergyCard] ; useless
+ ; temporarily take card away to draw Play Area
+ call AddCardToHand
+ bank1call PrintPlayAreaCardList_EnableLCD
+ ldh a, [hAIPkmnPowerEffectParam]
+ ld e, a
+ ldh a, [hAIEnergyTransEnergyCard]
+ ; give card back
+ call PutHandCardInPlayArea
+
+ ; draw Grass symbol near cursor
+ ldh a, [hAIPkmnPowerEffectParam]
+ ld b, SYM_GRASS
+ call DrawSymbolOnPlayAreaCursor
+
+; handle the action of placing a Grass Energy card
+.loop_input_put
+ call DoFrame
+ call HandleMenuInput
+ jr nc, .loop_input_put
+ cp -1 ; b press?
+ jr z, .remove_symbol
+
+; a press
+ ldh [hCurSelectionItem], a
+ ldh [hAIEnergyTransPlayAreaLocation], a
+ ld a, OPPACTION_6B15
+ call SetOppAction_SerialSendDuelData
+ ldh a, [hAIEnergyTransPlayAreaLocation]
+ ld e, a
+ ldh a, [hAIEnergyTransEnergyCard]
+ ; give card being held to this Pokemon
+ call AddCardToHand
+ call PutHandCardInPlayArea
+
+.remove_symbol
+ ldh a, [hAIPkmnPowerEffectParam]
+ ld b, SYM_SPACE
+ call DrawSymbolOnPlayAreaCursor
+ call EraseCursor
+ jr .draw_play_area
+
+.play_sfx
+ call Func_3794
+ jr .loop_input_take
+; 0x2cbfb
+
+EnergyTrans_AIEffect: ; 2cbfb (b:4bfb)
ldh a, [hAIEnergyTransPlayAreaLocation]
ld e, a
ldh a, [hAIEnergyTransEnergyCard]
@@ -726,35 +2356,9265 @@ Func_2cbfb: ; 2cbfb (b:4bfb)
ret
; 0x2cc0a
- INCROM $2cc0a, $2f4e1
-
-ImposterProfessorOakEffect: ; 2f4e1 (b:74e1)
- call SwapTurn
- call CreateHandCardList
- call SortCardsInDuelTempListByID
- ld hl, wDuelTempList
-.return_hand_to_deck_loop
- ld a, [hli]
- cp $ff
- jr z, .shuffle
- call RemoveCardFromHand
- call ReturnCardToDeck
- jr .return_hand_to_deck_loop
+; returns carry if no Grass Energy cards
+; attached to card in Play Area location of a.
+; input:
+; a = PLAY_AREA_* of location to check
+CheckIfCardHasGrassEnergyAttached: ; 2cc0a (b:4c0a)
+ or CARD_LOCATION_PLAY_AREA
+ ld e, a
+
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop
+ ld a, [hl]
+ cp e
+ jr nz, .next
+ push de
+ push hl
+ ld a, l
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ pop hl
+ pop de
+ cp TYPE_ENERGY_GRASS
+ jr z, .no_carry
+.next
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop
+ scf
+ ret
+.no_carry
+ ld a, l
+ or a
+ ret
+; 0x2cc30
+
+GrimerMinimizeEffect: ; 2cc30 (b:4c30)
+ ld a, SUBSTATUS1_REDUCE_BY_20
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2cc36
+
+ToxicGasEffect: ; 2cc36 (b:4c36)
+ scf
+ ret
+; 0x2cc38
+
+Sludge_AIEffect: ; 2cc38 (b:4c38)
+ ld a, 5
+ lb de, 0, 10
+ jp UpdateExpectedAIDamage_AccountForPoison
+; 0x2cc40
+
+; returns carry if no cards in Deck
+; or if Play Area is full already.
+BellsproutCallForFamily_CheckDeckAndPlayArea: ; 2cc40 (b:4c40)
+ call CheckIfDeckIsEmpty
+ ret c ; return if no cards in deck
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, NoSpaceOnTheBenchText
+ cp MAX_PLAY_AREA_POKEMON
+ ccf
+ ret
+; 0x2cc50
+
+BellsproutCallForFamily_PlayerSelectEffect: ; 2cc50 (b:4c50)
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+
+ call CreateDeckCardList
+ ldtx hl, ChooseABellsproutFromDeckText
+ ldtx bc, BellsproutText
+ lb de, SEARCHEFFECT_CARD_ID, BELLSPROUT
+ call LookForCardsInDeck
+ ret c
+
+; draw Deck list interface and print text
+ bank1call Func_5591
+ ldtx hl, ChooseABellsproutText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+
+.loop
+ bank1call DisplayCardList
+ jr c, .pressed_b
+ call GetCardIDFromDeckIndex
+ ld bc, BELLSPROUT
+ call CompareDEtoBC
+ jr nz, .play_sfx
+
+; Bellsprout was selected
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+
+.play_sfx
+ ; play SFX and loop back
+ call Func_3794
+ jr .loop
+
+.pressed_b
+; figure if Player can exit the screen without selecting,
+; that is, if the Deck has no Bellsprout card.
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop_b_press
+ ld a, [hl]
+ cp CARD_LOCATION_DECK
+ jr nz, .next
+ ld a, l
+ call GetCardIDFromDeckIndex
+ ld bc, BELLSPROUT
+ call CompareDEtoBC
+ jr z, .play_sfx ; found Bellsprout, go back to top loop
+.next
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_b_press
+
+; no Bellsprout in Deck, can safely exit screen
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+; 0x2ccad
+
+BellsproutCallForFamily_AISelectEffect: ; 2ccad (b:4cad)
+ call CreateDeckCardList
+ ld hl, wDuelTempList
+.loop_deck
+ ld a, [hli]
+ ldh [hTemp_ffa0], a
+ cp $ff
+ ret z ; no Bellsprout
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp BELLSPROUT
+ jr nz, .loop_deck
+ ret ; Bellsprout found
+; 0x2ccc2
+
+BellsproutCallForFamily_PutInPlayAreaEffect: ; 2ccc2 (b:4cc2)
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ jr z, .shuffle
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ call PutHandPokemonCardInPlayArea
+ call IsPlayerTurn
+ jr c, .shuffle
+ ldh a, [hTemp_ffa0]
+ ldtx hl, PlacedOnTheBenchText
+ bank1call DisplayCardDetailScreen
+.shuffle
+ call Func_2c0bd
+ ret
+; 0x2cce2
+
+WeezingSmog_AIEffect: ; 2cce2 (b:4ce2)
+ ld a, 5
+ lb de, 0, 10
+ jp UpdateExpectedAIDamage_AccountForPoison
+; 0x2ccea
+
+WeezingSelfdestructEffect: ; 2ccea (b:4cea)
+ ld a, 60
+ call DealRecoilDamageToSelf
+ ld a, $01
+ ld [wIsDamageToSelf], a
+ ld a, 10
+ call DealDamageToAllBenchedPokemon
+ call SwapTurn
+ xor a
+ ld [wIsDamageToSelf], a
+ ld a, 10
+ call DealDamageToAllBenchedPokemon
+ call SwapTurn
+ ret
+; 0x2cd09
+
+Shift_OncePerTurnCheck: ; 2cd09 (b:4d09)
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ and USED_PKMN_POWER_THIS_TURN
+ jr nz, .already_used
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ ret
+.already_used
+ ldtx hl, OnlyOncePerTurnText
+ scf
+ ret
+; 0x2cd21
+
+Shift_PlayerSelectEffect: ; 2cd21 (b:4d21)
+ ldtx hl, ChoosePokemonWishToColorChangeText
+ ldh a, [hTemp_ffa0]
+ or $80
+ call HandleColorChangeScreen
+ ldh [hAIPkmnPowerEffectParam], a
+ ret c ; cancelled
+
+; check whether the color selected is valid
+ ; look in Turn Duelist's Play Area
+ call .CheckColorInPlayArea
+ ret nc
+ ; look in NonTurn Duelist's Play Area
+ call SwapTurn
+ call .CheckColorInPlayArea
+ call SwapTurn
+ ret nc
+ ; not found in either Duelist's Play Area
+ ldtx hl, UnableToSelectText
+ call DrawWideTextBox_WaitForInput
+ jr Shift_PlayerSelectEffect ; loop back to start
+; 0x2cd44
+
+; checks in input color in a exists in Turn Duelist's Play Area
+; returns carry if not found.
+.CheckColorInPlayArea: ; 2cd44 (b:4d44)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld c, a
+ ld b, PLAY_AREA_ARENA
+.loop_play_area
+ push bc
+ ld a, b
+ call GetPlayAreaCardColor
+ pop bc
+ ld hl, hAIPkmnPowerEffectParam
+ cp [hl]
+ ret z ; found
+ inc b
+ dec c
+ jr nz, .loop_play_area
+ ; not found
+ scf
+ ret
+; 0x2cd5d
+
+Shift_ChangeColorEffect: ; 2cd5d (b:4d5d)
+ ldh a, [hTemp_ffa0]
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+
+ ldh a, [hTemp_ffa0]
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ set USED_PKMN_POWER_THIS_TURN_F, [hl]
+
+ ldh a, [hTemp_ffa0]
+ add DUELVARS_ARENA_CARD_CHANGED_TYPE
+ ld l, a
+ ldh a, [hAIPkmnPowerEffectParam]
+ or HAS_CHANGED_COLOR
+ ld [hl], a
+ call LoadCardNameAndInputColor
+ ldtx hl, ChangedTheColorOfText
+ call DrawWideTextBox_WaitForInput
+ ret
+; 0x2cd84
+
+VenomPowder_AIEffect: ; 2cd84 (b:4d84)
+ ld a, 5
+ lb de, 0, 10
+ jp UpdateExpectedAIDamage
+; 0x2cd8c
+
+VenomPowder_PoisonConfusion50PercentEffect: ; 2cd8c (b:4d8c)
+ ldtx de, VenomPowderCheckText
+ call TossCoin_BankB
+ ret nc ; return if tails
+
+; heads
+ call PoisonEffect
+ call ConfusionEffect
+ ret c
+ ld a, CONFUSED | POISONED
+ ld [wNoEffectFromWhichStatus], a
+ ret
+; 0x2cda0
+
+TangelaPoisonPowder_AIEffect: ; 2cda0 (b:4da0)
+ ld a, 5
+ lb de, 0, 10
+ jp UpdateExpectedAIDamage_AccountForPoison
+; 0x2cda8
+
+Heal_OncePerTurnCheck: ; 2cda8 (b:4da8)
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ and USED_PKMN_POWER_THIS_TURN
+ jr nz, .already_used
+
+ call CheckIfPlayAreaHasAnyDamage
+ ldtx hl, NoPokemonWithDamageCountersText
+ ret c ; no damage counters to heal
+
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ ret
+
+.already_used
+ ldtx hl, OnlyOncePerTurnText
+ scf
+ ret
+; 0x2cdc7
+
+Heal_RemoveDamageEffect: ; 2cdc7 (b:4dc7)
+ ldtx de, IfHeadsHealIsSuccessfulText
+ call TossCoin_BankB
+ ldh [hAIPkmnPowerEffectParam], a
+ jr nc, .done
+
+ ld a, DUELVARS_DUELIST_TYPE
+ call GetTurnDuelistVariable
+ cp DUELIST_TYPE_LINK_OPP
+ jr z, .link_opp
+ and DUELIST_TYPE_AI_OPP
+ jr nz, .done
+
+; player
+ ldtx hl, ChoosePkmnToRemoveDamageCounterText
+ call DrawWideTextBox_WaitForInput
+ bank1call HasAlivePokemonInPlayArea
+.loop_input
+ bank1call OpenPlayAreaScreenForSelection
+ jr c, .loop_input
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hPlayAreaEffectTarget], a
+ ld e, a
+ call GetCardDamageAndMaxHP
+ or a
+ jr z, .loop_input ; has no damage counters
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ call SerialSend8Bytes
+ jr .done
+
+.link_opp
+ call SerialRecv8Bytes
+ ldh [hPlayAreaEffectTarget], a
+ ; fallthrough
+
+.done
+; flag Pkmn Power as being used regardless of coin outcome
+ ldh a, [hTemp_ffa0]
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ set USED_PKMN_POWER_THIS_TURN_F, [hl]
+ ldh a, [hAIPkmnPowerEffectParam]
+ or a
+ ret z ; return if coin was tails
+
+ ldh a, [hPlayAreaEffectTarget]
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ add 10 ; remove 1 damage counter
+ ld [hl], a
+ ldh a, [hPlayAreaEffectTarget]
+ call Func_2c10b
+ call ExchangeRNG
+ ret
+; 0x2ce23
+
+PetalDance_AIEffect: ; 2ce23 (b:4e23)
+ ld a, 120 / 2
+ lb de, 0, 120
+ jp SetExpectedAIDamage
+; 0x2ce2b
+
+PetalDance_MultiplierEffect: ; 2ce2b (b:4e2b)
+ ld hl, 40
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 3
+ call TossCoinATimes_BankB
+ add a
+ add a
+ call ATimes10
+ ; a = 4 * 10 * heads
+ call SetDefiniteDamage
+ call SwapTurn
+ call ConfusionEffect
+ call SwapTurn
+ ret
+; 0x2ce4b
+
+PoisonWhip_AIEffect: ; 2ce4b (b:4e4b)
+ ld a, 10
+ lb de, 10, 10
+ jp UpdateExpectedAIDamage_AccountForPoison
+; 0x2ce53
+
+SolarPower_CheckUse: ; 2ce53 (b:4e53)
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ and USED_PKMN_POWER_THIS_TURN
+ jr nz, .already_used
+
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ ret c ; can't use PKMN due to status or Toxic Gas
+
+; return carry if none of the Arena cards have status conditions
+ ld a, DUELVARS_ARENA_CARD_STATUS
+ call GetTurnDuelistVariable
+ or a
+ jr nz, .has_status
+ ld a, DUELVARS_ARENA_CARD_STATUS
+ call GetNonTurnDuelistVariable
+ or a
+ jr z, .no_status
+.has_status
+ or a
+ ret
+.already_used
+ ldtx hl, OnlyOncePerTurnText
+ scf
+ ret
+.no_status
+ ldtx hl, NotAffectedByPoisonSleepParalysisOrConfusionText
+ scf
+ ret
+; 0x2ce82
+
+SolarPower_RemoveStatusEffect: ; 2ce82 (b:4e82)
+ ld a, $8e
+ ld [wLoadedMoveAnimation], a
+ bank1call Func_7415
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld b, a
+ ld c, $00
+ ldh a, [hWhoseTurn]
+ ld h, a
+ bank1call PlayMoveAnimation
+ bank1call WaitMoveAnimation
+
+ ldh a, [hTemp_ffa0]
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ set USED_PKMN_POWER_THIS_TURN_F, [hl]
+ ld l, DUELVARS_ARENA_CARD_STATUS
+ ld [hl], NO_STATUS
+
+ ld a, DUELVARS_ARENA_CARD_STATUS
+ call GetNonTurnDuelistVariable
+ ld [hl], NO_STATUS
+ bank1call DrawDuelHUDs
+ ret
+; 0x2ceb0
+
+VenusaurMegaDrainEffect: ; 2ceb0 (b:4eb0)
+ ld hl, wDealtDamage
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ srl h
+ rr l
+ bit 0, l
+ jr z, .rounded
+ ; round up to nearest 10
+ ld de, 10 / 2
+ add hl, de
+.rounded
+ ld e, l
+ ld d, h
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2cec8
+
+; applies the damage bonus for attacks that get bonus
+; from extra Water energy cards.
+; this bonus is always 10 more damage for each extra Water energy
+; and is always capped at a maximum of 20 damage.
+; input:
+; b = number of Water energy cards needed for paying Energy Cost
+; c = number of colorless energy cards needed for paying Energy Cost
+ApplyExtraWaterEnergyDamageBonus: ; 2cec8 (b:4ec8)
+ ld a, [wMetronomeEnergyCost]
+ or a
+ jr z, .not_metronome
+ ld c, a ; amount of colorless needed for Metronome
+ ld b, 0 ; no Water energy needed for Metronome
+
+.not_metronome
+ push bc
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld e, a
+ call GetPlayAreaCardAttachedEnergies
+ pop bc
+
+ ld hl, wAttachedEnergies + WATER
+ ld a, c
+ or a
+ jr z, .check_bonus ; is Energy cost all water energy?
+
+ ; it's not, so we need to remove the
+ ; Water energy cards from calculations
+ ; if they pay for colorless instead.
+ ld a, [wTotalAttachedEnergies]
+ cp [hl]
+ jr nz, .check_bonus ; skip if at least 1 non-Water energy attached
+
+ ; Water is the only energy color attached
+ ld a, c
+ add b
+ ld b, a
+ ; b += c
+
+.check_bonus
+ ld a, [hl]
+ sub b
+ jr c, .skip_bonus ; is water energy < b?
+ jr z, .skip_bonus ; is water energy == b?
+
+; a holds number of water energy not payed for energy cost
+ cp 3
+ jr c, .less_than_3
+ ld a, 2 ; cap this to 2 for bonus effect
+.less_than_3
+ call ATimes10
+ call AddToDamage ; add 10 * a to damage
+
+.skip_bonus
+ ld a, [wDamage]
+ ld [wAIMinDamage], a
+ ld [wAIMaxDamage], a
+ ret
+; 0x2cf05
+
+OmastarWaterGunEffect: ; 2cf05 (b:4f05)
+ lb bc, 1, 1
+ jr ApplyExtraWaterEnergyDamageBonus
+; 0x2cf0a
+
+OmastarSpikeCannon_AIEffect: ; 2cf0a (b:4f0a)
+ ld a, 60 / 2
+ lb de, 0, 60
+ jp SetExpectedAIDamage
+; 0x2cf12
+
+OmastarSpikeCannon_MultiplierEffect: ; 2cf12 (b:4f12)
+ ld hl, 30
+ call LoadTxRam3
+ ld a, 2
+ ldtx de, DamageCheckIfHeadsXDamageText
+ call TossCoinATimes_BankB
+ ld e, a
+ add a
+ add e
+ call ATimes10
+ call SetDefiniteDamage ; 3 * 10 * heads
+ ret
+; 0x2cf2a
+
+ClairvoyanceEffect: ; 2cf2a (b:4f2a)
+ scf
+ ret
+; 0x2cf2c
+
+OmanyteWaterGunEffect: ; 2cf2c (b:4f2c)
+ lb bc, 1, 0
+ jp ApplyExtraWaterEnergyDamageBonus
+; 0x2cf32
+
+WartortleWithdrawEffect: ; 2cf32 (b:4f32)
+ ldtx de, IfHeadsNoDamageNextTurnText
+ call TossCoin_BankB
+ jp nc, SetWasUnsuccessful
+ ld a, $4f
+ ld [wLoadedMoveAnimation], a
+ ld a, SUBSTATUS1_NO_DAMAGE_10
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2cf46
+
+RainDanceEffect: ; 2cf46 (b:4f46)
+ scf
+ ret
+; 0x2cf48
+
+HydroPumpEffect: ; 2cf48 (b:4f48)
+ lb bc, 3, 0
+ jp ApplyExtraWaterEnergyDamageBonus
+; 0x2cf4e
+
+KinglerFlail_AIEffect: ; 2cf4e (b:4f4e)
+ call KinglerFlail_HPCheck
+ jp SetMinMaxDamageSameAsDamage
+; 0x2cf54
+
+KinglerFlail_HPCheck: ; 2cf54 (b:4f54)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ call SetDefiniteDamage
+ ret
+; 0x2cf5d
+
+; returns carry if no cards in Deck
+; or if Play Area is full already.
+KrabbyCallForFamily_CheckDeckAndPlayArea: ; 2cf5d (b:4f5d)
+ call CheckIfDeckIsEmpty
+ ret c ; return if no cards in deck
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, NoSpaceOnTheBenchText
+ cp MAX_PLAY_AREA_POKEMON
+ ccf
+ ret
+; 0x2cf6d
+
+KrabbyCallForFamily_PlayerSelectEffect: ; 2cf6d (b:4f6d)
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+
+ call CreateDeckCardList
+ ldtx hl, ChooseAKrabbyFromDeckText
+ ldtx bc, KrabbyText
+ lb de, SEARCHEFFECT_CARD_ID, KRABBY
+ call LookForCardsInDeck
+ ret c
+
+; draw Deck list interface and print text
+ bank1call Func_5591
+ ldtx hl, ChooseAKrabbyText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+
+.loop
+ bank1call DisplayCardList
+ jr c, .pressed_b
+ call GetCardIDFromDeckIndex
+ ld bc, KRABBY
+ call CompareDEtoBC
+ jr nz, .play_sfx
+
+; Krabby was selected
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+
+.play_sfx
+ ; play SFX and loop back
+ call Func_3794
+ jr .loop
+
+.pressed_b
+; figure if Player can exit the screen without selecting,
+; that is, if the Deck has no Krabby card.
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop_b_press
+ ld a, [hl]
+ cp CARD_LOCATION_DECK
+ jr nz, .next
+ ld a, l
+ call GetCardIDFromDeckIndex
+ ld bc, KRABBY
+ call CompareDEtoBC
+ jr z, .play_sfx ; found Krabby, go back to top loop
+.next
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_b_press
+
+; no Krabby in Deck, can safely exit screen
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+; 0x2cfdf
+
+KrabbyCallForFamily_AISelectEffect: ; 2cfdf (b:4fdf)
+ call CreateDeckCardList
+ ld hl, wDuelTempList
+.loop_deck
+ ld a, [hli]
+ ldh [hTemp_ffa0], a
+ cp $ff
+ ret z ; no Krabby
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp KRABBY
+ jr nz, .loop_deck
+ ret ; Krabby found
+; 0x2cfca
+
+KrabbyCallForFamily_PutInPlayAreaEffect: ; 2cfca (b:4fca)
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ jr z, .shuffle
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ call PutHandPokemonCardInPlayArea
+ call IsPlayerTurn
+ jr c, .shuffle
+ ldh a, [hTemp_ffa0]
+ ldtx hl, PlacedOnTheBenchText
+ bank1call DisplayCardDetailScreen
+.shuffle
+ call Func_2c0bd
+ ret
+; 0x2cfff
+
+MagikarpFlail_AIEffect: ; 2cfff (b:4fff)
+ call MagikarpFlail_HPCheck
+ jp SetMinMaxDamageSameAsDamage
+; 0x2d005
+
+MagikarpFlail_HPCheck: ; 2d005 (b:5005)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ call SetDefiniteDamage
+ ret
+; 0x2d00e
+
+HeadacheEffect: ; 2d00e (b:500e)
+ ld a, DUELVARS_ARENA_CARD_SUBSTATUS3
+ call GetNonTurnDuelistVariable
+ set SUBSTATUS3_HEADACHE, [hl]
+ ret
+; 0x2d016
+
+PsyduckFurySwipes_AIEffect: ; 2d016 (b:5016)
+ ld a, 30 / 2
+ lb de, 0, 30
+ jp SetExpectedAIDamage
+; 0x2d01e
+
+PsyduckFurySwipes_MultiplierEffect: ; 2d01e (b:501e)
+ ld hl, 10
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 3
+ call TossCoinATimes_BankB
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2d033
+
+GolduckHyperBeam_PlayerSelectEffect: ; 2d033 (b:5033)
+ call SwapTurn
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wTotalAttachedEnergies]
+ or a
+ jr z, .no_energy
+
+; draw Energy Card list screen
+ ldtx hl, ChooseDiscardEnergyCardFromOpponentText
+ call DrawWideTextBox_WaitForInput
+ xor a ; PLAY_AREA_ARENA
+ call CreateArenaOrBenchEnergyCardList
+ xor a ; PLAY_AREA_ARENA
+ bank1call DisplayEnergyDiscardScreen
+
+.loop_input
+ bank1call HandleEnergyDiscardMenuInput
+ jr c, .loop_input
+
+ call SwapTurn
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a ; store selected card to discard
+ ret
+
+.no_energy
+ call SwapTurn
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+; 0x2d065
+
+GolduckHyperBeam_AISelectEffect: ; 2d065 (b:5065)
+ call AIPickEnergyCardToDiscardFromDefendingPokemon
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2d06b
+
+GolduckHyperBeam_DiscardEffect: ; 2d06b (b:506b)
+ call HandleNoDamageOrEffect
+ ret c ; return if attack had no effect
+
+ ; check if energy card was chosen to discard
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ ret z ; return if none selected
+
+ ; discard Defending card's energy
+ call SwapTurn
+ call PutCardInDiscardPile
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_EFFECT
+ call GetTurnDuelistVariable
+ ld [hl], LAST_TURN_EFFECT_DISCARD_ENERGY
+ call SwapTurn
+ ret
+; 0x2d085
+
+SeadraWaterGunEffect: ; 2d085 (b:5085)
+ lb bc, 1, 1
+ jp ApplyExtraWaterEnergyDamageBonus
+; 0x2d08b
+
+SeadraAgilityEffect: ; 2d08b (b:508b)
+ ldtx de, IfHeadsDoNotReceiveDamageOrEffectText
+ call TossCoin_BankB
+ ret nc ; return if tails
+ ld a, $52
+ ld [wLoadedMoveAnimation], a
+ ld a, SUBSTATUS1_AGILITY
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2d09d
+
+ShellderSupersonicEffect: ; 2d09d (b:509d)
+ call Confusion50PercentEffect
+ call nc, SetNoEffectFromStatus
+ ret
+; 0x2d0a4
+
+HideInShellEffect: ; 2d0a4 (b:50a4)
+ ldtx de, IfHeadsNoDamageNextTurnText
+ call TossCoin_BankB
+ jp nc, SetWasUnsuccessful
+ ld a, $4f
+ ld [wLoadedMoveAnimation], a
+ ld a, SUBSTATUS1_NO_DAMAGE_11
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2d0b8
+
+VaporeonQuickAttack_AIEffect: ; 2d0b8 (b:50b8)
+ ld a, (10 + 30) / 2
+ lb de, 10, 30
+ jp SetExpectedAIDamage
+; 0x2d0c0
+
+VaporeonQuickAttack_DamageBoostEffect: ; 2d0c0 (b:50c0)
+ ld hl, 20
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsPlusDamageText
+ call TossCoin_BankB
+ ret nc ; return if tails
+ ld a, 20
+ call AddToDamage
+ ret
+; 0x2d0d3
+
+VaporeonWaterGunEffect: ; 2d0d3 (b:50d3)
+ lb bc, 2, 1
+ jp ApplyExtraWaterEnergyDamageBonus
+; 0x2d0d9
+
+; returns carry if Arena card has no Water Energy attached
+; or if it doesn't have any damage counters.
+StarmieRecover_CheckEnergyHP: ; 2d0d9 (b:50d9)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wAttachedEnergies + WATER]
+ ldtx hl, NotEnoughWaterEnergyText
+ cp 1
+ ret c ; return if not enough energy
+ call GetCardDamageAndMaxHP
+ ldtx hl, NoDamageCountersText
+ cp 10
+ ret ; return carry if no damage
+; 0x2d0f0
+
+StarmieRecover_PlayerSelectEffect: ; 2d0f0 (b:50f0)
+ ld a, TYPE_ENERGY_WATER
+ call CreateListOfEnergyAttachedToArena
+ xor a ; PLAY_AREA_ARENA
+ bank1call DisplayEnergyDiscardScreen
+.loop_input
+ bank1call HandleEnergyDiscardMenuInput
+ jr c, .loop_input
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a ; store card chosen
+ ret
+; 0x2d103
+
+StarmieRecover_AISelectEffect: ; 2d103 (b:5103)
+ ld a, TYPE_ENERGY_WATER
+ call CreateListOfEnergyAttachedToArena
+ ld a, [wDuelTempList] ; pick first card
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2d10e
+
+StarmieRecover_DiscardEffect: ; 2d10e (b:510e)
+ ldh a, [hTemp_ffa0]
+ call PutCardInDiscardPile
+ ret
+; 0x2d114
+
+StarmieRecover_HealEffect: ; 2d114 (b:5114)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ ld e, a ; all damage for recovery
+ ld d, 0
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2d120
+
+SquirtleWithdrawEffect: ; 2d120 (b:5120)
+ ldtx de, IfHeadsNoDamageNextTurnText
+ call TossCoin_BankB
+ jp nc, SetWasUnsuccessful
+ ld a, $4f
+ ld [wLoadedMoveAnimation], a
+ ld a, SUBSTATUS1_NO_DAMAGE_10
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2d134
+
+HorseaSmokescreenEffect: ; 2d134 (b:5134)
+ ld a, SUBSTATUS2_SMOKESCREEN
+ call ApplySubstatus2ToDefendingCard
+ ret
+; 0x2d13a
+
+TentacruelSupersonicEffect: ; 2d13a (b:513a)
+ call Confusion50PercentEffect
+ call nc, SetNoEffectFromStatus
+ ret
+; 0x2d141
+
+JellyfishSting_AIEffect: ; 2d141 (b:5141)
+ ld a, 10
+ lb de, 10, 10
+ jp UpdateExpectedAIDamage_AccountForPoison
+; 0x2d149
+
+; returns carry if Defending Pokemon has no attacks
+PoliwhirlAmnesia_CheckAttacks: ; 2d149 (b:5149)
+ call SwapTurn
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Move1Category]
+ cp POKEMON_POWER
+ jr nz, .has_attack
+ ld hl, wLoadedCard2Move2Name
+ ld a, [hli]
+ or [hl]
+ jr nz, .has_attack
+; has no attack
+ call SwapTurn
+ ldtx hl, NoAttackMayBeChoosenText
+ scf
+ ret
+.has_attack
+ call SwapTurn
+ or a
+ ret
+; 0x2d16f
+
+PoliwhirlAmnesia_PlayerSelectEffect: ; 2d16f (b:516f)
+ call PlayerPickAttackForAmnesia
+ ret
+; 0x2d173
+
+PoliwhirlAmnesia_AISelectEffect: ; 2d173 (b:5173)
+ call AIPickAttackForAmnesia
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2d179
+
+PoliwhirlAmnesia_DisableEffect: ; 2d179 (b:5179)
+ call ApplyAmnesiaToAttack
+ ret
+; 0x2d17d
+
+PlayerPickAttackForAmnesia: ; 2d17d (b:517d)
+ ldtx hl, ChooseAttackOpponentWillNotBeAbleToUseText
+ call DrawWideTextBox_WaitForInput
+ call HandleDefendingPokemonAttackSelection
+ ld a, e
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2d18a
+
+; applies the Amnesia effect on the defending Pokemon,
+; for the attack index in hTemp_ffa0.
+ApplyAmnesiaToAttack: ; 2d18a (b:518a)
+ ld a, SUBSTATUS2_AMNESIA
+ call ApplySubstatus2ToDefendingCard
+ ld a, [wNoDamageOrEffect]
+ or a
+ ret nz ; no effect
+
+; set selected attack as disabled
+ ld a, DUELVARS_ARENA_CARD_DISABLED_MOVE_INDEX
+ call GetNonTurnDuelistVariable
+ ldh a, [hTemp_ffa0]
+ ld [hl], a
+
+ ld l, DUELVARS_ARENA_CARD_LAST_TURN_EFFECT
+ ld [hl], LAST_TURN_EFFECT_AMNESIA
+
+ call IsPlayerTurn
+ ret c ; return if Player
+
+; the rest of the routine if for Opponent
+; to announce which move was used for Amnesia.
+ call SwapTurn
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ ld d, a
+ ldh a, [hTemp_ffa0]
+ ld e, a
+ call GetAttackName
+ call LoadTxRam2
+ ldtx hl, WasChosenForTheEffectOfAmnesiaText
+ call DrawWideTextBox_WaitForInput
+ call SwapTurn
+ ret
+; 0x2d1c0
+
+PoliwhirlDoubleslap_AIEffect: ; 2d1c0 (b:51c0)
+ ld a, 60 / 2
+ lb de, 0, 60
+ jp SetExpectedAIDamage
+; 0x2d1c8
+
+PoliwhirlDoubleslap_MultiplierEffect: ; 2d1c8 (b:51c8)
+ ld hl, 30
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 2
+ call TossCoinATimes_BankB
+ ld e, a
+ add a
+ add e
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2d1e0
+
+PoliwrathWaterGunEffect: ; 2d1e0 (b:51e0)
+ lb bc, 2, 1
+ jp ApplyExtraWaterEnergyDamageBonus
+; 0x2d1e6
+
+Whirlpool_PlayerSelectEffect: ; 2d1e6 (b:51e6)
+ call SwapTurn
+ xor a ; PLAY_AREA_ARENA
+ call CreateArenaOrBenchEnergyCardList
+ jr c, .no_energy
+
+ ldtx hl, ChooseDiscardEnergyCardFromOpponentText
+ call DrawWideTextBox_WaitForInput
+ xor a ; PLAY_AREA_ARENA
+ bank1call DisplayEnergyDiscardScreen
+.loop_input
+ bank1call HandleEnergyDiscardMenuInput
+ jr c, .loop_input
+
+ call SwapTurn
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a ; store selected card to discard
+ ret
+
+.no_energy
+ call SwapTurn
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2d20e
+
+Whirlpool_AISelectEffect: ; 2d20e (b:520e)
+ call AIPickEnergyCardToDiscardFromDefendingPokemon
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2d214
+
+Whirlpool_DiscardEffect: ; 2d214 (b:5214)
+ call HandleNoDamageOrEffect
+ ret c ; return if attack had no effect
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ ret z ; return if none selected
+
+ ; discard Defending card's energy
+ ; this doesn't update DUELVARS_ARENA_CARD_LAST_TURN_EFFECT
+ call SwapTurn
+ call PutCardInDiscardPile
+ ; ld a, DUELVARS_ARENA_CARD_LAST_TURN_EFFECT
+ ; call GetTurnDuelistVariable
+ ; ld [hl], LAST_TURN_EFFECT_DISCARD_ENERGY
+ call SwapTurn
+ ret
+; 0x2d227
+
+PoliwagWaterGunEffect: ; 2d227 (b:5227)
+ lb bc, 1, 0
+ jp ApplyExtraWaterEnergyDamageBonus
+; 0x2d22d
+
+ClampEffect: ; 2d22d (b:522d)
+ ld a, $05
+ ld [wLoadedMoveAnimation], a
+ ldtx de, SuccessCheckIfHeadsAttackIsSuccessfulText
+ call TossCoin_BankB
+ jp c, ParalysisEffect
+; unsuccessful
+ xor a
+ ld [wLoadedMoveAnimation], a
+ call SetDefiniteDamage
+ call SetWasUnsuccessful
+ ret
+; 0x2d246
+
+CloysterSpikeCannon_AIEffect: ; 2d246 (b:5246)
+ ld a, 60 / 2
+ lb de, 0, 60
+ jp SetExpectedAIDamage
+; 0x2d24e
+
+CloysterSpikeCannon_MultiplierEffect: ; 2d24e (b:524e)
+ ld hl, 30
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 2
+ call TossCoinATimes_BankB
+ ld e, a
+ add a
+ add e
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2d266
+
+Blizzard_BenchDamage50PercentEffect: ; 2d266 (b:5266)
+ ldtx de, DamageToOppBenchIfHeadsDamageToYoursIfTailsText
+ call TossCoin_BankB
+ ldh [hTemp_ffa0], a ; store coin result
+ ret
+; 0x2d26f
+
+Blizzard_BenchDamageEffect: ; 2d26f (b:526f)
+ ldh a, [hTemp_ffa0]
+ or a
+ jr nz, .opp_bench
+
+; own bench
+ ld a, $01
+ ld [wIsDamageToSelf], a
+ ld a, 10
+ call DealDamageToAllBenchedPokemon
+ ret
+
+.opp_bench
+ call SwapTurn
+ ld a, 10
+ call DealDamageToAllBenchedPokemon
+ call SwapTurn
+ ret
+; 0x2d28b
+
+; return carry if can use Cowardice
+Cowardice_Check: ; 2d28b (b:528b)
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ ret c ; return if cannot use
+
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, EffectNoPokemonOnTheBenchText
+ cp 2
+ ret c ; return if no bench
+
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ ldtx hl, CannotBeUsedInTurnWhichWasPlayedText
+ and CAN_EVOLVE_THIS_TURN
+ scf
+ ret z ; return if was played this turn
+
+ or a
+ ret
+; 0x2d2ae
+
+Cowardice_PlayerSelectEffect: ; 2d2ae (b:52ae)
+ ldh a, [hTemp_ffa0]
+ or a
+ ret nz ; return if not Arena card
+ ldtx hl, SelectPokemonToPlaceInTheArenaText
+ call DrawWideTextBox_WaitForInput
+ bank1call HasAlivePokemonInBench
+ bank1call OpenPlayAreaScreenForSelection
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hAIPkmnPowerEffectParam], a
+ ret
+; 0x2d2c3
+
+Cowardice_RemoveFromPlayAreaEffect: ; 2d2c3 (b:52c3)
+ ldh a, [hTemp_ffa0]
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+
+; put card in Discard Pile temporarily, so that
+; all cards attached are discarded as well.
+ push af
+ ldh a, [hTemp_ffa0]
+ ld e, a
+ call MovePlayAreaCardToDiscardPile
+
+; if card was in Arena, swap selected Bench
+; Pokemon with Arena, otherwise skip.
+ ldh a, [hTemp_ffa0]
+ or a
+ jr nz, .skip_switch
+ ldh a, [hAIPkmnPowerEffectParam]
+ ld e, a
+ call SwapArenaWithBenchPokemon
+
+.skip_switch
+; move card back to Hand from Discard Pile
+; and adjust Play Area
+ pop af
+ call MoveDiscardPileCardToHand
+ call AddCardToHand
+ call ShiftAllPokemonToFirstPlayAreaSlots
+
+ xor a
+ ld [wDuelDisplayedScreen], a
+ ret
+; 0x2d2eb
+
+LaprasWaterGunEffect: ; 2d2eb (b:52eb)
+ lb bc, 1, 0
+ jp ApplyExtraWaterEnergyDamageBonus
+; 0x2d2f1
+
+Quickfreeze_InitialEffect: ; 2d2f1 (b:52f1)
+ scf
+ ret
+; 0x2d2f3
+
+Quickfreeze_Paralysis50PercentEffect: ; 2d2f3 (b:52f3)
+ ldtx de, ParalysisCheckText
+ call TossCoin_BankB
+ jr c, .heads
+
+; tails
+ call SetWasUnsuccessful
+ bank1call DrawDuelMainScene
+ bank1call Func_1bca
+ call WaitForWideTextBoxInput
+ ret
+
+.heads
+ call ParalysisEffect
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld b, a
+ ld c, $00
+ ldh a, [hWhoseTurn]
+ ld h, a
+ bank1call PlayMoveAnimation
+ bank1call Func_741a
+ bank1call WaitMoveAnimation
+ bank1call Func_6df1
+ bank1call DrawDuelHUDs
+ bank1call Func_1bca
+ call c, WaitForWideTextBoxInput
+ ret
+; 0x2d329
+
+IceBreath_ZeroDamage: ; 2d329 (b:5329)
+ xor a
+ call SetDefiniteDamage
+ ret
+; 0x2d32e
+
+IceBreath_RandomPokemonDamageEffect: ; 2d32e (b:532e)
+ call SwapTurn
+ call PickRandomPlayAreaCard
+ ld b, a
+ ld de, 40
+ call DealDamageToPlayAreaPokemon_RegularAnim
+ call SwapTurn
+ ret
+; 0x2d33f
+
+FocusEnergyEffect: ; 2d33f (b:533f)
+ ld a, [wTempTurnDuelistCardID]
+ cp VAPOREON1
+ ret nz ; return if no Vaporeon1
+ ld a, SUBSTATUS1_NEXT_TURN_DOUBLE_DAMAGE
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2d34b
+
+PlayerPickFireEnergyCardToDiscard: ; 2d34b (b:534b)
+ call CreateListOfFireEnergyAttachedToArena
+ xor a
+ bank1call DisplayEnergyDiscardScreen
+ bank1call HandleEnergyDiscardMenuInput
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTempList], a
+ ret
+; 0x2d35a
+
+AIPickFireEnergyCardToDiscard: ; 2d35a (b:535a)
+ call CreateListOfFireEnergyAttachedToArena
+ ld a, [wDuelTempList]
+ ldh [hTempList], a ; pick first in list
+ ret
+; 0x2d363
+
+; returns carry if Arena card has no Fire Energy cards
+ArcanineFlamethrower_CheckEnergy: ; 2d363 (b:5363)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wAttachedEnergies]
+ ldtx hl, NotEnoughFireEnergyText
+ cp 1
+ ret
+; 0x2d371
+
+ArcanineFlamethrower_PlayerSelectEffect: ; 2d371 (b:5371)
+ call PlayerPickFireEnergyCardToDiscard
+ ret
+; 0x2d375
+
+ArcanineFlamethrower_AISelectEffect: ; 2d375 (b:5375)
+ call AIPickFireEnergyCardToDiscard
+ ret
+; 0x2d379
+
+ArcanineFlamethrower_DiscardEffect: ; 2d379 (b:5379)
+ ldh a, [hTempList]
+ call PutCardInDiscardPile
+ ret
+; 0x2d37f
+
+TakeDownEffect: ; 2d37f (b:537f)
+ ld a, 30
+ call DealRecoilDamageToSelf
+ ret
+; 0x2d385
+
+ArcanineQuickAttack_AIEffect: ; 2d385 (b:5385)
+ ld a, (10 + 30) / 2
+ lb de, 10, 30
+ jp SetExpectedAIDamage
+; 0x2d38d
+
+ArcanineQuickAttack_DamageBoostEffect: ; 2d38d (b:538d)
+ ld hl, 20
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsPlusDamageText
+ call TossCoin_BankB
+ ret nc ; return if tails
+ ld a, 20
+ call AddToDamage
+ ret
+; 0x2d3a0
+
+; return carry if has less than 2 Fire Energy cards
+FlamesOfRage_CheckEnergy: ; 2d3a0 (b:53a0)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wAttachedEnergies]
+ ldtx hl, NotEnoughFireEnergyText
+ cp 2
+ ret
+; 0x2d3ae
+
+FlamesOfRage_PlayerSelectEffect: ; 2d3ae (b:53ae)
+ ldtx hl, ChooseAndDiscard2FireEnergyCardsText
+ call DrawWideTextBox_WaitForInput
+
+ xor a
+ ldh [hCurSelectionItem], a
+ call CreateListOfFireEnergyAttachedToArena
+ xor a
+ bank1call DisplayEnergyDiscardScreen
+.loop_input
+ bank1call HandleEnergyDiscardMenuInput
+ ret c
+ call GetNextPositionInTempList
+ ldh a, [hTempCardIndex_ff98]
+ ld [hl], a
+ call RemoveCardFromDuelTempList
+ ldh a, [hCurSelectionItem]
+ cp 2
+ ret nc ; return when 2 have been chosen
+ bank1call DisplayEnergyDiscardMenu
+ jr .loop_input
+; 0x2d3d5
+
+FlamesOfRage_AISelectEffect: ; 2d3d5 (b:53d5)
+ call AIPickFireEnergyCardToDiscard
+ ld a, [wDuelTempList + 1]
+ ldh [hTempList + 1], a
+ ret
+; 0x2d3de
+
+FlamesOfRage_DiscardEffect: ; 2d3de (b:53de)
+ ldh a, [hTempList]
+ call PutCardInDiscardPile
+ ldh a, [hTempList + 1]
+ call PutCardInDiscardPile
+ ret
+; 0x2d3e9
+
+FlamesOfRage_AIEffect: ; 2d3e9 (b:53e9)
+ call FlamesOfRage_DamageBoostEffect
+ jp SetMinMaxDamageSameAsDamage
+; 0x2d3ef
+
+FlamesOfRage_DamageBoostEffect: ; 2d3ef (b:53ef)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ call AddToDamage
+ ret
+; 0x2d3f8
+
+RapidashStomp_AIEffect: ; 2d3f8 (b:53f8)
+ ld a, (20 + 30) / 2
+ lb de, 20, 30
+ jp SetExpectedAIDamage
+; 0x2d400
+
+RapidashStomp_DamageBoostEffect: ; 2d400 (b:5400)
+ ld hl, 10
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsPlusDamageText
+ call TossCoin_BankB
+ ret nc ; return if tails
+ ld a, 10
+ call AddToDamage
+ ret
+; 0x2d413
+
+RapidashAgilityEffect: ; 2d413 (b:5413)
+ ldtx de, IfHeadsDoNotReceiveDamageOrEffectText
+ call TossCoin_BankB
+ ret nc ; return if tails
+ ld a, $52
+ ld [wLoadedMoveAnimation], a
+ ld a, SUBSTATUS1_AGILITY
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2d425
+
+; returns carry if Opponent has no Pokemon in bench
+NinetailsLure_CheckBench: ; 2d425 (b:5425)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ ldtx hl, EffectNoPokemonOnTheBenchText
+ cp 2
+ ret
+; 0x2d430
+
+NinetailsLure_PlayerSelectEffect: ; 2d430 (b:5430)
+ ldtx hl, SelectPkmnOnBenchToSwitchWithActiveText
+ call DrawWideTextBox_WaitForInput
+ call SwapTurn
+ bank1call HasAlivePokemonInBench
+.loop_input
+ bank1call OpenPlayAreaScreenForSelection
+ jr c, .loop_input
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ call SwapTurn
+ ret
+; 0x2d449
+
+NinetailsLure_AISelectEffect: ; 2d449 (b:5449)
+ call GetBenchPokemonWithLowestHP
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2d44f
+
+NinetailsLure_SwitchEffect: ; 2d44f (b:544f)
+ call SwapTurn
+ ldh a, [hTemp_ffa0]
+ ld e, a
+ call HandleNShieldAndTransparency
+ call nc, SwapArenaWithBenchPokemon
+ call SwapTurn
+ xor a
+ ld [wDuelDisplayedScreen], a
+ ret
+; 0x2d463
+
+; return carry if no Fire energy cards
+FireBlast_CheckEnergy: ; 2d463 (b:5463)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ldtx hl, NotEnoughFireEnergyText
+ ld a, [wAttachedEnergies]
+ cp 1
+ ret
+; 0x2d471
+
+FireBlast_PlayerSelectEffect: ; 2d471 (b:5471)
+ call PlayerPickFireEnergyCardToDiscard
+ ret
+; 0x2d475
+
+FireBlast_AISelectEffect: ; 2d475 (b:5475)
+ call AIPickFireEnergyCardToDiscard
+ ret
+; 0x2d479
+
+FireBlast_DiscardEffect: ; 2d479 (b:5479)
+ ldh a, [hTempList]
+ call PutCardInDiscardPile
+ ret
+; 0x2d47f
+
+; return carry if no Fire energy cards
+Ember_CheckEnergy: ; 2d47f (b:547f)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ldtx hl, NotEnoughFireEnergyText
+ ld a, [wAttachedEnergies]
+ cp 1
+ ret
+; 0x2d48d
+
+Ember_PlayerSelectEffect: ; 2d48d (b:548d)
+ call PlayerPickFireEnergyCardToDiscard
+ ret
+; 0x2d491
+
+Ember_AISelectEffect: ; 2d491 (b:5491)
+ call AIPickFireEnergyCardToDiscard
+ ret
+; 0x2d495
+
+Ember_DiscardEffect: ; 2d495 (b:5495)
+ ldh a, [hTempList]
+ call PutCardInDiscardPile
+ ret
+; 0x2d49b
+
+; return carry if no Fire energy cards
+Wildfire_CheckEnergy: ; 2d49b (b:549b)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ldtx hl, NotEnoughFireEnergyText
+ ld a, [wAttachedEnergies]
+ cp 1
+ ret
+; 0x2d4a9
+
+Wildfire_PlayerSelectEffect: ; 2d4a9 (b:54a9)
+ ldtx hl, DiscardOppDeckAsManyFireEnergyCardsText
+ call DrawWideTextBox_WaitForInput
+
+ xor a
+ ldh [hCurSelectionItem], a
+ call CreateListOfFireEnergyAttachedToArena
+ xor a
+ bank1call DisplayEnergyDiscardScreen
+
+; show list to Player and for each card selected to discard,
+; just increase a counter and store it.
+; this will be the output used by Wildfire_DiscardEnergyEffect.
+ xor a
+ ld [wcbfa], a
+.loop
+ ldh a, [hCurSelectionItem]
+ ld [wcbfb], a
+ bank1call HandleEnergyDiscardMenuInput
+ jr c, .done
+ ld hl, hCurSelectionItem
+ inc [hl]
+ call RemoveCardFromDuelTempList
+ jr c, .done
+ bank1call DisplayEnergyDiscardMenu
+ jr .loop
+
+.done
+; return carry if no cards were discarded
+; output the result in hTemp_ffa0
+ ldh a, [hCurSelectionItem]
+ ldh [hTemp_ffa0], a
+ or a
+ ret nz
+ scf
+ ret
+; 0x2d4dd
+
+Wildfire_AISelectEffect: ; 2d4dd (b:54dd)
+; AI always chooses 0 cards to discard
+ xor a
+ ldh [hTempList], a
+ ret
+; 0x2d4e1
+
+Wildfire_DiscardEnergyEffect: ; 2d4e1 (b:54e1)
+ call CreateListOfFireEnergyAttachedToArena
+ ldh a, [hTemp_ffa0]
+ or a
+ ret z ; no cards to discard
+
+; discard cards from wDuelTempList equal to the number
+; of cards that were input in hTemp_ffa0.
+; these are all the Fire Energy cards attached to Arena card
+; so it will discard the cards in order, regardless
+; of the actual order that was selected by Player.
+ ld c, a
+ ld hl, wDuelTempList
+.loop_discard
+ ld a, [hli]
+ call PutCardInDiscardPile
+ dec c
+ jr nz, .loop_discard
+ ret
+; 0x2d4f4
+
+Wildfire_DiscardDeckEffect: ; 2d4f4 (b:54f4)
+ ldh a, [hTemp_ffa0]
+ ld c, a
+ ld b, $00
+ call SwapTurn
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ ld a, DECK_SIZE
+ sub [hl]
+ cp c
+ jr nc, .start_discard
+ ; only discard number of cards that are left in deck
+ ld c, a
+
+.start_discard
+ push bc
+ inc c
+ jr .check_remaining
+
+.loop
+ ; discard top card from deck
+ call DrawCardFromDeck
+ call nc, PutCardInDiscardPile
+.check_remaining
+ dec c
+ jr nz, .loop
+
+ pop hl
+ call LoadTxRam3
+ ldtx hl, DiscardedCardsFromDeckText
+ call DrawWideTextBox_PrintText
+ call SwapTurn
+ ret
+; 0x2d523
+
+Moltres1DiveBomb_AIEffect: ; 2d523 (b:5523)
+ ld a, 80 / 2
+ lb de, 0, 80
+ jp SetExpectedAIDamage
+; 0x2d52b
+
+Moltres1DiveBomb_Success50PercentEffect: ; 2d52b (b:552b)
+ ldtx de, SuccessCheckIfHeadsAttackIsSuccessfulText
+ call TossCoin_BankB
+ jr c, .heads
+; tails
+ xor a
+ call SetDefiniteDamage
+ call SetWasUnsuccessful
+ ret
+.heads
+ ld a, $11
+ ld [wLoadedMoveAnimation], a
+ ret
+; 0x2d541
+
+FlareonQuickAttack_AIEffect: ; 2d541 (b:5541)
+ ld a, (10 + 30) / 2
+ lb de, 10, 30
+ jp SetExpectedAIDamage
+; 0x2d549
+
+FlareonQuickAttack_DamageBoostEffect: ; 2d549 (b:5549)
+ ld hl, 20
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsPlusDamageText
+ call TossCoin_BankB
+ ret nc ; return if tails
+ ld a, 20
+ call AddToDamage
+ ret
+; 0x2d55c
+
+; return carry if no Fire Energy attached
+FlareonFlamethrower_CheckEnergy: ; 2d55c (b:555c)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ldtx hl, NotEnoughFireEnergyText
+ ld a, [wAttachedEnergies]
+ cp 1
+ ret
+; 0x2d56a
+
+FlareonFlamethrower_PlayerSelectEffect: ; 2d56a (b:556a)
+ call PlayerPickFireEnergyCardToDiscard
+ ret
+; 0x2d56e
+
+FlareonFlamethrower_AISelectEffect: ; 2d56e (b:556e)
+ call AIPickFireEnergyCardToDiscard
+ ret
+; 0x2d572
+
+FlareonFlamethrower_DiscardEffect: ; 2d572 (b:5572)
+ ldh a, [hTempList]
+ call PutCardInDiscardPile
+ ret
+; 0x2d578
+
+; return carry if no Fire Energy attached
+MagmarFlamethrower_CheckEnergy: ; 2d578 (b:5578)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ldtx hl, NotEnoughFireEnergyText
+ ld a, [wAttachedEnergies]
+ cp 1
+ ret
+; 0x2d586
+
+MagmarFlamethrower_PlayerSelectEffect: ; 2d586 (b:5586)
+ call PlayerPickFireEnergyCardToDiscard
+ ret
+; 0x2d58a
+
+MagmarFlamethrower_AISelectEffect: ; 2d58a (b:558a)
+ call AIPickFireEnergyCardToDiscard
+ ret
+; 0x2d58e
+
+MagmarFlamethrower_DiscardEffect: ; 2d58e (b:558e)
+ ldh a, [hTempList]
+ call PutCardInDiscardPile
+ ret
+; 0x2d594
+
+MagmarSmokescreenEffect: ; 2d594 (b:5594)
+ ld a, SUBSTATUS2_SMOKESCREEN
+ call ApplySubstatus2ToDefendingCard
+ ret
+; 0x2d59a
+
+MagmarSmog_AIEffect: ; 2d59a (b:559a)
+ ld a, 5
+ lb de, 0, 10
+ jp UpdateExpectedAIDamage_AccountForPoison
+; 0x2d5a2
+
+; return carry if no Fire Energy attached
+CharmeleonFlamethrower_CheckEnergy: ; 2d5a2 (b:55a2)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ldtx hl, NotEnoughFireEnergyText
+ ld a, [wAttachedEnergies]
+ cp 1
+ ret
+; 0x2d5b0
+
+CharmeleonFlamethrower_PlayerSelectEffect: ; 2d5b0 (b:55b0)
+ call PlayerPickFireEnergyCardToDiscard
+ ret
+; 0x2d5b4
+
+CharmeleonFlamethrower_AISelectEffect: ; 2d5b4 (b:55b4)
+ call AIPickFireEnergyCardToDiscard
+ ret
+; 0x2d5b8
+
+CharmeleonFlamethrower_DiscardEffect: ; 2d5b8 (b:55b8)
+ ldh a, [hTempList]
+ call PutCardInDiscardPile
+ ret
+; 0x2d5be
+
+EnergyBurnEffect: ; 2d5be (b:55be)
+ scf
+ ret
+; 0x2d5c0
+
+; return carry if has less than 2 Fire Energy cards
+FireSpin_CheckEnergy: ; 2d5c0 (b:55c0)
+ xor a ; PLAY_AREA_ARENA
+ call CreateArenaOrBenchEnergyCardList
+ call CountCardsInDuelTempList
+ ldtx hl, NotEnoughEnergyCardsText
+ cp 2
+ ret
+; 0x2d5cd
+
+FireSpin_PlayerSelectEffect: ; 2d5cd (b:55cd)
+ ldtx hl, ChooseAndDiscard2EnergyCardsText
+ call DrawWideTextBox_WaitForInput
+
+ xor a
+ ldh [hCurSelectionItem], a
+ xor a
+ call CreateArenaOrBenchEnergyCardList
+ call SortCardsInDuelTempListByID
+ xor a
+ bank1call DisplayEnergyDiscardScreen
+
+ ld a, 2
+ ld [wcbfa], a
+.loop_input
+ bank1call HandleEnergyDiscardMenuInput
+ ret c
+ call GetNextPositionInTempList
+ ldh a, [hTempCardIndex_ff98]
+ ld [hl], a
+ ld hl, wcbfb
+ inc [hl]
+ ldh a, [hCurSelectionItem]
+ cp 2
+ jr nc, .done
+ ldh a, [hTempCardIndex_ff98]
+ call RemoveCardFromDuelTempList
+ bank1call DisplayEnergyDiscardMenu
+ jr .loop_input
+.done
+; return when 2 have been chosen
+ or a
+ ret
+; 0x2d606
+
+FireSpin_AISelectEffect: ; 2d606 (b:5606)
+ xor a ; PLAY_AREA_ARENA
+ call CreateArenaOrBenchEnergyCardList
+ ld hl, wDuelTempList
+ ld a, [hli]
+ ldh [hTempList], a
+ ld a, [hl]
+ ldh [hTempList + 1], a
+ ret
+; 0x2d614
+
+FireSpin_DiscardEffect: ; 2d614 (b:5614)
+ ld hl, hTempList
+ ld a, [hli]
+ call PutCardInDiscardPile
+ ld a, [hli]
+ call PutCardInDiscardPile
+ ret
+; 0x2d620
+
+; returns carry if Pkmn Power cannot be used
+; or if Arena card is not Charizard.
+; this is unused.
+EnergyBurnCheck_Unreferenced: ; 2d620 (b:5620)
+ xor a
+ bank1call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ ret c
+ ld a, DUELVARS_ARENA_CARD
+ push de
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ ld a, e
+ pop de
+ cp CHARIZARD
+ jr nz, .not_charizard
+ or a
+ ret
+.not_charizard
+ scf
+ ret
+; 0x2d638
+
+FlareonRage_AIEffect: ; 2d638 (b:5638)
+ call FlareonRage_DamageBoostEffect
+ jp SetMinMaxDamageSameAsDamage
+; 0x2d63e
+
+FlareonRage_DamageBoostEffect: ; 2d63e (b:563e)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ call AddToDamage
+ ret
+; 0x2d647
+
+MixUpEffect: ; 2d647 (b:5647)
+ call SwapTurn
+ call CreateHandCardList
+ call SortCardsInDuelTempListByID
+
+; first go through Hand to place
+; all Pkmn cards in it in the Deck.
+ ld hl, wDuelTempList
+ ld c, 0
+.loop_hand
+ ld a, [hl]
+ cp $ff
+ jr z, .done_hand
+ call .CheckIfCardIsPkmnCard
+ jr nc, .next_hand
+ ; found Pkmn card, place in deck
+ inc c
+ ld a, [hl]
+ call RemoveCardFromHand
+ call ReturnCardToDeck
+.next_hand
+ inc hl
+ jr .loop_hand
+
+.done_hand
+ ld a, c
+ ldh [hCurSelectionItem], a
+ push bc
+ ldtx hl, ThePkmnCardsInHandAndDeckWereShuffledText
+ call DrawWideTextBox_WaitForInput
+
+ call Func_2c0bd
+ call CreateDeckCardList
+ pop bc
+ ldh a, [hCurSelectionItem]
+ or a
+ jr z, .done ; if no cards were removed from Hand, return
+
+; c holds the number of cards that were placed in the Deck.
+; now pick Pkmn cards from the Deck to place in Hand.
+ ld hl, wDuelTempList
+.loop_deck
+ ld a, [hl]
+ call .CheckIfCardIsPkmnCard
+ jr nc, .next_deck
+ dec c
+ ld a, [hl]
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+.next_deck
+ inc hl
+ ld a, c
+ or a
+ jr nz, .loop_deck
+.done
+ call SwapTurn
+ ret
+; 0x2d69a
+
+; returns carry if card index in a is Pkmn card
+.CheckIfCardIsPkmnCard: ; 2d69a (b:569a)
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ ret
+; 0x2d6a3
+
+DancingEmbers_AIEffect: ; 2d6a3 (b:56a3)
+ ld a, 80 / 2
+ lb de, 0, 80
+ jp SetExpectedAIDamage
+; 0x2d6ab
+
+DancingEmbers_MultiplierEffect: ; 2d6ab (b:56ab)
+ ld hl, 10
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 8
+ call TossCoinATimes_BankB
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2d6c0
+
+Firegiver_InitialEffect: ; 2d6c0 (b:56c0)
+ scf
+ ret
+; 0x2d6c2
+
+Firegiver_AddToHandEffect: ; 2d6c2 (b:56c2)
+; fill wDuelTempList with all Fire Energy card
+; deck indices that are in the Deck.
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+ ld de, wDuelTempList
+ ld c, 0
+.loop_cards
+ ld a, [hl]
+ cp CARD_LOCATION_DECK
+ jr nz, .next
+ push hl
+ push de
+ ld a, l
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ pop de
+ pop hl
+ cp TYPE_ENERGY_FIRE
+ jr nz, .next
+ ld a, l
+ ld [de], a
+ inc de
+ inc c
+.next
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_cards
+ ld a, $ff
+ ld [de], a
+
+; check how many were found
+ ld a, c
+ or a
+ jr nz, .found
+ ; return if none found
+ ldtx hl, ThereWasNoFireEnergyText
+ call DrawWideTextBox_WaitForInput
+ call Func_2c0bd
+ ret
+
+.found
+; pick a random number between 1 and 4,
+; up to the maximum number of Fire Energy
+; cards that were found.
+ ld a, 4
+ call Random
+ inc a
+ cp c
+ jr c, .ok
+ ld a, c
+
+.ok
+ ldh [hCurSelectionItem], a
+; load correct Move animation depending
+; on what side the effect is from.
+ ld d, $84
+ ld a, [wDuelistType]
+ cp DUELIST_TYPE_PLAYER
+ jr z, .player_1
+; opponent
+ ld d, $85
+.player_1
+ ld a, d
+ ld [wLoadedMoveAnimation], a
+
+; start loop for adding Energy cards to hand
+ ldh a, [hCurSelectionItem]
+ ld c, a
+ ld hl, wDuelTempList
+.loop_energy
+ push hl
+ push bc
+ ld bc, $0
+ ldh a, [hWhoseTurn]
+ ld h, a
+ bank1call PlayMoveAnimation
+ bank1call WaitMoveAnimation
+
+; load correct coordinates to update the number of cards
+; in hand and deck during animation.
+ lb bc, 18, 7 ; x, y for hand number
+ ld e, 3 ; y for deck number
+ ld a, [wLoadedMoveAnimation]
+ cp $84
+ jr z, .player_2
+ lb bc, 4, 5 ; x, y for hand number
+ ld e, 10 ; y for deck number
+
+.player_2
+; update and print number of cards in hand
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ inc a
+ bank1call WriteTwoDigitNumberInTxSymbolFormat
+; update and print number of cards in deck
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ ld a, DECK_SIZE - 1
+ sub [hl]
+ ld c, e
+ bank1call WriteTwoDigitNumberInTxSymbolFormat
+
+; load Fire Energy card index and add to hand
+ pop bc
+ pop hl
+ ld a, [hli]
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ dec c
+ jr nz, .loop_energy
+
+; load the number of cards added to hand and print text
+ ldh a, [hCurSelectionItem]
+ ld l, a
+ ld h, $00
+ call LoadTxRam3
+ ldtx hl, DrewFireEnergyFromTheHandText
+ call DrawWideTextBox_WaitForInput
+ call Func_2c0bd
+ ret
+; 0x2d76e
+
+Moltres2DiveBomb_AIEffect: ; 2d76e (b:576e)
+ ld a, 70 / 2
+ lb de, 0, 70
+ jp SetExpectedAIDamage
+; 0x2d776
+
+Moltres2DiveBomb_Success50PercentEffect: ; 2d776 (b:5776)
+ ldtx de, SuccessCheckIfHeadsAttackIsSuccessfulText
+ call TossCoin_BankB
+ jr c, .heads
+; tails
+ xor a
+ call SetDefiniteDamage
+ call SetWasUnsuccessful
+ ret
+.heads
+ ld a, $11
+ ld [wLoadedMoveAnimation], a
+ ret
+; 0x2d78c
+
+; output in de the number of energy cards
+; attached to the Defending Pokemon times 10.
+; used for attacks that deal 10x number of energy
+; cards attached to the Defending card.
+GetEnergyAttachedMultiplierDamage: ; 2d78c (b:578c)
+ call SwapTurn
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+
+ ld c, 0
+.loop
+ ld a, [hl]
+ cp CARD_LOCATION_ARENA
+ jr nz, .next
+ ; is in Arena
+ ld a, l
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ and TYPE_ENERGY
+ jr z, .next
+ ; is Energy attached to Arena card
+ inc c
+.next
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop
+
+ call SwapTurn
+ ld l, c
+ ld h, $00
+ ld b, $00
+ add hl, hl ; hl = 2 * c
+ add hl, hl ; hl = 4 * c
+ add hl, bc ; hl = 5 * c
+ add hl, hl ; hl = 10 * c
+ ld e, l
+ ld d, h
+ ret
+; 0x2d7bc
+
+; draws list of Energy Cards in Discard Pile
+; for Player to select from.
+; the Player can select up to 2 cards from the list.
+; these cards are given in $ff-terminated list
+; in hTempList.
+HandleEnergyCardsInDiscardPileSelection: ; 2d7bc (b:57bc)
+ push hl
+ xor a
+ ldh [hCurSelectionItem], a
+ call CreateEnergyCardListFromDiscardPile_AllEnergy
+ pop hl
+ jr c, .finish
+
+ call DrawWideTextBox_WaitForInput
+.loop
+; draws Discard Pile screen and textbox,
+; and handles Player input
+ bank1call InitAndDrawCardListScreenLayout
+ ldtx hl, ChooseAnEnergyCardText
+ ldtx de, PlayerDiscardPileText
+ bank1call SetCardListHeaderText
+ bank1call DisplayCardList
+ jr nc, .selected
+
+; Player is trying to exit screen,
+; but can select up to 2 cards total.
+; prompt Player to confirm exiting screen.
+ ld a, 2
+ call AskWhetherToQuitSelectingCards
+ jr c, .loop
+ jr .finish
+
+.selected
+; a card was selected, so add it to list
+ call GetNextPositionInTempList
+ ldh a, [hTempCardIndex_ff98]
+ ld [hl], a
+ call RemoveCardFromDuelTempList
+ or a
+ jr z, .finish ; no more cards?
+ ldh a, [hCurSelectionItem]
+ cp 2
+ jr c, .loop ; already selected 2 cards?
+
+.finish
+; place terminating byte on list
+ call GetNextPositionInTempList
+ ld [hl], $ff
+ or a
+ ret
+; 0x2d7fc
+
+; returns carry if Pkmn Power cannot be used, and
+; sets the correct text in hl for failure.
+Curse_CheckDamageAndBench: ; 2d7fc (b:57fc)
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+
+; fail if Pkmn Power has already been used
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ ldtx hl, OnlyOncePerTurnText
+ and USED_PKMN_POWER_THIS_TURN
+ jr nz, .set_carry
+
+; fail if Opponent only has 1 Pokemon in Play Area
+ call SwapTurn
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ call SwapTurn
+ ldtx hl, CannotUseSinceTheresOnly1PkmnText
+ cp 2
+ jr c, .set_carry
+
+; fail if Opponent has no damage counters
+ call SwapTurn
+ call CheckIfPlayAreaHasAnyDamage
+ call SwapTurn
+ ldtx hl, NoPokemonWithDamageCountersText
+ jr c, .set_carry
+
+; return carry if Pkmn Power cannot be used due
+; to Toxic Gas or status.
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ ret
+
+.set_carry
+ scf
+ ret
+; 0x2d834
+
+Curse_PlayerSelectEffect: ; 2d834 (b:5834)
+ ldtx hl, ProcedureForCurseText
+ bank1call DrawWholeScreenTextBox
+ call SwapTurn
+ xor a
+ ldh [hCurSelectionItem], a
+ bank1call Func_61a1
+.start
+ bank1call PrintPlayAreaCardList_EnableLCD
+ push af
+ ldh a, [hCurSelectionItem]
+ ld hl, PlayAreaSelectionMenuParameters
+ call InitializeMenuParameters
+ pop af
+ ld [wNumMenuItems], a
+
+; first pick a target to take 1 damage counter from.
+.loop_input_first
+ call DoFrame
+ call HandleMenuInput
+ jr nc, .loop_input_first
+ cp $ff
+ jr z, .cancel
+ ldh [hCurSelectionItem], a
+ ldh [hTempPlayAreaLocation_ffa1], a
+ call GetCardDamageAndMaxHP
+ or a
+ jr nz, .picked_first ; test if has damage
+ ; play sfx
+ call Func_3794
+ jr .loop_input_first
+
+.picked_first
+; give 10 HP to card selected, draw the scene,
+; then immediately revert this.
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ push af
+ push hl
+ add 10
+ ld [hl], a
+ bank1call PrintPlayAreaCardList_EnableLCD
+ pop hl
+ pop af
+ ld [hl], a
+
+; draw damage counter on cursor
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ld b, SYM_HP_NOK
+ call DrawSymbolOnPlayAreaCursor
+
+; handle input to pick the target to receive the damage counter.
+.loop_input_second
+ call DoFrame
+ call HandleMenuInput
+ jr nc, .loop_input_second
+ ldh [hPlayAreaEffectTarget], a
+ cp $ff
+ jr nz, .a_press ; was a pressed?
+
+; b press
+; erase the damage counter symbol
+; and loop back up again.
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ld b, SYM_SPACE
+ call DrawSymbolOnPlayAreaCursor
+ call EraseCursor
+ jr .start
+
+.a_press
+ ld hl, hTempPlayAreaLocation_ffa1
+ cp [hl]
+ jr z, .loop_input_second ; same as first?
+; a different Pokemon was picked,
+; so store this Play Area location
+; and erase the damage counter in the cursor.
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ld b, SYM_SPACE
+ call DrawSymbolOnPlayAreaCursor
+ call EraseCursor
+ call SwapTurn
+ or a
+ ret
+
+.cancel
+; return carry if operation was cancelled.
+ call SwapTurn
+ scf
+ ret
+; 0x2d8bb
+
+Curse_TransferDamageEffect: ; 2d8bb (b:58bb)
+; set Pkmn Power as used
+ ldh a, [hTempList]
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ set USED_PKMN_POWER_THIS_TURN_F, [hl]
+
+; figure out the type of duelist that used Curse.
+; if it was the player, no need to draw the Play Area screen.
+ call SwapTurn
+ ld a, DUELVARS_DUELIST_TYPE
+ call GetNonTurnDuelistVariable
+ cp DUELIST_TYPE_PLAYER
+ jr z, .vs_player
+
+; vs. opponent
+ bank1call Func_61a1
+.vs_player
+; transfer the damage counter to the targets that were selected.
+ ldh a, [hPlayAreaEffectTarget]
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ sub 10
+ ld [hl], a
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ add DUELVARS_ARENA_CARD_HP
+ ld l, a
+ ld a, 10
+ add [hl]
+ ld [hl], a
+
+ bank1call PrintPlayAreaCardList_EnableLCD
+ ld a, DUELVARS_DUELIST_TYPE
+ call GetNonTurnDuelistVariable
+ cp DUELIST_TYPE_PLAYER
+ jr z, .done
+; vs. opponent
+ ldh a, [hPlayAreaEffectTarget]
+ ldh [hTempPlayAreaLocation_ff9d], a
+ bank1call Func_6194
+
+.done
+ call SwapTurn
+ call ExchangeRNG
+ bank1call Func_6e49
+ ret
+; 0x2d903
+
+GengarDarkMind_PlayerSelectEffect: ; 2d903 (b:5903)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp 2
+ jr nc, .has_bench
+; no bench Pokemon to damage.
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ret
+
+.has_bench
+; opens Play Area screen to select Bench Pokemon
+; to damage, and store it before returning.
+ ldtx hl, ChoosePkmnInTheBenchToGiveDamageText
+ call DrawWideTextBox_WaitForInput
+ call SwapTurn
+ bank1call HasAlivePokemonInBench
+.loop_input
+ bank1call OpenPlayAreaScreenForSelection
+ jr c, .loop_input
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ call SwapTurn
+ ret
+; 0x2d92a
+
+GengarDarkMind_AISelectEffect: ; 2d92a (b:592a)
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp 2
+ ret c ; return if no Bench Pokemon
+; just pick Pokemon with lowest remaining HP.
+ call GetBenchPokemonWithLowestHP
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2d93c
+
+GengarDarkMind_DamageBenchEffect: ; 2d93c (b:593c)
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ ret z ; no target chosen
+ call SwapTurn
+ ld b, a
+ ld de, 10
+ call DealDamageToPlayAreaPokemon_RegularAnim
+ call SwapTurn
+ ret
+; 0x2d94f
+
+SleepingGasEffect: ; 2d94f (b:594f)
+ call Sleep50PercentEffect
+ call nc, SetNoEffectFromStatus
+ ret
+; 0x2d956
+
+DestinyBond_CheckEnergy: ; 2d956 (b:5956)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wAttachedEnergies + PSYCHIC]
+ ldtx hl, NotEnoughPsychicEnergyText
+ cp 1
+ ret
+; 0x2d964
+
+DestinyBond_PlayerSelectEffect: ; 2d964 (b:5964)
+; handle input and display of Energy card list
+ ld a, TYPE_ENERGY_PSYCHIC
+ call CreateListOfEnergyAttachedToArena
+ xor a
+ bank1call DisplayEnergyDiscardScreen
+ bank1call HandleEnergyDiscardMenuInput
+ ret c
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTempList], a
+ ret
+; 0x2d976
+
+DestinyBond_AISelectEffect: ; 2d976 (b:5976)
+; pick first card in list
+ ld a, TYPE_ENERGY_PSYCHIC
+ call CreateListOfEnergyAttachedToArena
+ ld a, [wDuelTempList]
+ ldh [hTempList], a
+ ret
+; 0x2d981
+
+DestinyBond_DiscardEffect: ; 2d981 (b:5981)
+ ldh a, [hTempList]
+ call PutCardInDiscardPile
+ ret
+; 0x2d987
+
+DestinyBond_DestinyBondEffect: ; 2d987 (b:5987)
+ ld a, SUBSTATUS1_DESTINY_BOND
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2d98d
+
+; returns carry if no Energy cards in Discard Pile.
+EnergyConversion_CheckEnergy: ; 2d98d (b:598d)
+ call CreateEnergyCardListFromDiscardPile_AllEnergy
+ ldtx hl, ThereAreNoEnergyCardsInDiscardPileText
+ ret
+; 0x2d994
+
+EnergyConversion_PlayerSelectEffect: ; 2d994 (b:5994)
+ ldtx hl, Choose2EnergyCardsFromDiscardPileForHandText
+ call HandleEnergyCardsInDiscardPileSelection
+ ret
+; 0x2d99b
+
+EnergyConversion_AISelectEffect: ; 2d99b (b:599b)
+ call CreateEnergyCardListFromDiscardPile_AllEnergy
+ ld hl, wDuelTempList
+ ld de, hTempList
+ ld c, 2
+; select the first two energy cards found in Discard Pile
+.loop
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop
+.done
+ ld a, $ff
+ ld [de], a
+ ret
+; 0x2d9b4
+
+EnergyConversion_AddToHandEffect: ; 2d9b4 (b:59b4)
+; damage itself
+ ld a, 10
+ call DealRecoilDamageToSelf
+
+; loop cards that were chosen
+; until $ff is reached,
+; and move them to the hand.
+ ld hl, hTempList
+ ld de, wDuelTempList
+.loop_cards
+ ld a, [hli]
+ ld [de], a
+ inc de
+ cp $ff
+ jr z, .done
+ call MoveDiscardPileCardToHand
+ call AddCardToHand
+ jr .loop_cards
+
+.done
+ call IsPlayerTurn
+ ret c
+ bank1call Func_4b38
+ ret
+; 0x2d9d6
+
+; return carry if Defending Pokemon is not asleep
+DreamEaterEffect: ; 2d9d6 (b:59d6)
+ ld a, DUELVARS_ARENA_CARD_STATUS
+ call GetNonTurnDuelistVariable
+ and CNF_SLP_PRZ
+ cp ASLEEP
+ ret z ; return if asleep
+; not asleep, set carry and load text
+ ldtx hl, OpponentIsNotAsleepText
+ scf
+ ret
+; 0x2d9e5
+
+TransparencyEffect: ; 2d9e5 (b:59e5)
+ scf
+ ret
+; 0x2d9e7
+
+; returns carry if neither the Turn Duelist or
+; the non-Turn Duelist have any deck cards.
+Prophecy_CheckDeck: ; 2d9e7 (b:59e7)
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ cp DECK_SIZE
+ jr c, .no_carry
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetNonTurnDuelistVariable
+ cp DECK_SIZE
+ jr c, .no_carry
+ ldtx hl, NoCardsLeftInTheDeckText
+ scf
+ ret
+.no_carry
+ or a
+ ret
+; 0x2da00
+
+Prophecy_PlayerSelectEffect: ; 2da00 (b:5a00)
+ ldtx hl, ProcedureForProphecyText
+ bank1call DrawWholeScreenTextBox
+.select_deck
+ bank1call DrawDuelMainScene
+ ldtx hl, PleaseSelectTheDeckText
+ call TwoItemHorizontalMenu
+ ldh a, [hKeysHeld]
+ and B_BUTTON
+ jr nz, Prophecy_PlayerSelectEffect ; loop back to start
+
+ ldh a, [hCurMenuItem]
+ ldh [hTempList], a ; store selection in first position in list
+ or a
+ jr z, .turn_duelist
+
+; non-turn duelist
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetNonTurnDuelistVariable
+ cp DECK_SIZE
+ jr nc, .select_deck ; no cards, go back to deck selection
+ call SwapTurn
+ call HandleProphecyScreen
+ call SwapTurn
+ ret
+
+.turn_duelist
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ cp DECK_SIZE
+ jr nc, .select_deck ; no cards, go back to deck selection
+ call HandleProphecyScreen
+ ret
+; 0x2da3c
+
+Prophecy_AISelectEffect: ; 2da3c (b:5a3c)
+; AI doesn't ever choose this attack
+; so this it does no sorting.
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2da41
+
+Prophecy_ReorderDeckEffect: ; 2da41 (b:5a41)
+ ld hl, hTempList
+ ld a, [hli]
+ or a
+ jr z, .ReorderCards ; turn duelist's deck
+ cp $ff
+ ret z
+
+ ; non-turn duelist's deck
+ call SwapTurn
+ call .ReorderCards
+ call SwapTurn
+ ret
+
+.ReorderCards
+ ld c, 0
+; add selected cards to hand in the specified order
+.loop_add_hand
+ ld a, [hli]
+ cp $ff
+ jr z, .dec_hl
+ call SearchCardInDeckAndAddToHand
+ inc c
+ jr .loop_add_hand
+
+.dec_hl
+; go to last card that was in the list
+ dec hl
+ dec hl
+
+.loop_return_deck
+; return the cards to the top of the deck
+ ld a, [hld]
+ call ReturnCardToDeck
+ dec c
+ jr nz, .loop_return_deck
+ call IsPlayerTurn
+ ret c
+ ; print text in case it was the opponent
+ ldtx hl, ExchangedCardsInDuelistsHandText
+ call DrawWideTextBox_WaitForInput
+ ret
+; 0x2da76
+
+; draw and handle Player selection for reordering
+; the top 3 cards of Deck.
+; the resulting list is output in order in hTempList.
+HandleProphecyScreen: ; 2da76 (b:5a76)
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ ld b, a
+ ld a, DECK_SIZE
+ sub [hl] ; a = number of cards in deck
+
+; store in c the number of cards that will be reordered.
+; this number is 3, unless the deck as fewer cards than
+; that in which case it will be the number of cards remaining.
+ ld c, 3
+ cp c
+ jr nc, .got_number_cards
+ ld c, a ; store number of remaining cards in c
+.got_number_cards
+ ld a, c
+ inc a
+ ld [wNumberOfCardsToOrder], a
+
+; store in wDuelTempList the cards
+; at top of Deck to be reordered.
+ ld a, b
+ add DUELVARS_DECK_CARDS
+ ld l, a
+ ld de, wDuelTempList
+.loop_top_cards
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop_top_cards
+ ld a, $ff ; terminating byte
+ ld [de], a
+
+.start
+ call CountCardsInDuelTempList
+ ld b, a
+ ld a, 1 ; start at 1
+ ldh [hCurSelectionItem], a
+
+; initialize buffer ahead in wDuelTempList.
+ ld hl, wDuelTempList + 10
+ xor a
+.loop_init_buffer
+ ld [hli], a
+ dec b
+ jr nz, .loop_init_buffer
+ ld [hl], $ff
+
+ bank1call InitAndDrawCardListScreenLayout
+ ldtx hl, ChooseTheOrderOfTheCardsText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+ bank1call Func_5735
+
+.loop_selection
+ bank1call DisplayCardList
+ jr c, .clear
+
+; first check if this card was already selected
+ ldh a, [hCurMenuItem]
+ ld e, a
+ ld d, $00
+ ld hl, wDuelTempList + 10
+ add hl, de
+ ld a, [hl]
+ or a
+ jr nz, .loop_selection ; already chosen
+
+; being here means card hasn't been selected yet,
+; so add its order number to buffer and increment
+; the sort number for the next card.
+ ldh a, [hCurSelectionItem]
+ ld [hl], a
+ inc a
+ ldh [hCurSelectionItem], a
+ bank1call Func_5744
+ ldh a, [hCurSelectionItem]
+ ld hl, wNumberOfCardsToOrder
+ cp [hl]
+ jr c, .loop_selection ; still more cards
+
+; confirm that the ordering has been completed
+ call EraseCursor
+ ldtx hl, IsThisOKText
+ call YesOrNoMenuWithText_LeftAligned
+ jr c, .start ; if not, return back to beginning of selection
+
+; write in hTempList the card list
+; in order that was selected.
+ ld hl, wDuelTempList + 10
+ ld de, wDuelTempList
+ ld c, 0
+.loop_order
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+ push hl
+ push bc
+ ld c, a
+ ld b, $00
+ ld hl, hTempList
+ add hl, bc
+ ld a, [de]
+ ld [hl], a
+ pop bc
+ pop hl
+ inc de
+ inc c
+ jr .loop_order
+; now hTempList has the list of card deck indices
+; in the order selected to be place on top of the deck.
+
+.done
+ ld b, $00
+ ld hl, hTempList + 1
+ add hl, bc
+ ld [hl], $ff ; terminating byte
+ or a
+ ret
+
+.clear
+; check if any reordering was done.
+ ld hl, hCurSelectionItem
+ ld a, [hl]
+ cp 1
+ jr z, .loop_selection ; none done, go back
+; clear the order that was selected thus far.
+ dec a
+ ld [hl], a
+ ld c, a
+ ld hl, wDuelTempList + 10
+.loop_clear
+ ld a, [hli]
+ cp c
+ jr nz, .loop_clear
+ ; clear this byte
+ dec hl
+ ld [hl], $00
+ bank1call Func_5744
+ jr .loop_selection
+; 0x2db2b
+
+HypnoDarkMind_PlayerSelectEffect: ; 2db2b (b:5b2b)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp 2
+ jr nc, .has_bench
+; no bench Pokemon to damage.
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ret
+
+.has_bench
+; opens Play Area screen to select Bench Pokemon
+; to damage, and store it before returning.
+ ldtx hl, ChoosePkmnInTheBenchToGiveDamageText
+ call DrawWideTextBox_WaitForInput
+ call SwapTurn
+ bank1call HasAlivePokemonInBench
+.loop_input
+ bank1call OpenPlayAreaScreenForSelection
+ jr c, .loop_input
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ call SwapTurn
+ ret
+; 0x2db52
+
+HypnoDarkMind_AISelectEffect: ; 2db52 (b:5b52)
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp 2
+ ret c ; return if no Bench Pokemon
+; just pick Pokemon with lowest remaining HP.
+ call GetBenchPokemonWithLowestHP
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2db64
+
+HypnoDarkMind_DamageBenchEffect: ; 2db64 (b:5b64)
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ ret z ; no target chosen
+ call SwapTurn
+ ld b, a
+ ld de, 10
+ call DealDamageToPlayAreaPokemon_RegularAnim
+ call SwapTurn
+ ret
+; 0x2db77
+
+InvisibleWallEffect: ; 2db77 (b:5b77)
+ scf
+ ret
+; 0x2db79
+
+MrMimeMeditate_AIEffect: ; 2db79 (b:5b79)
+ call MrMimeMeditate_DamageBoostEffect
+ jp SetMinMaxDamageSameAsDamage
+; 0x2db7f
+
+MrMimeMeditate_DamageBoostEffect: ; 2db7f (b:5b7f)
+; add damage counters of Defending card to damage
+ call SwapTurn
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ call SwapTurn
+ call AddToDamage
+ ret
+; 0x2db8e
+
+; returns carry if Damage Swap cannot be used.
+DamageSwap_CheckDamage: ; 2db8e (b:5b8e)
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ call CheckIfPlayAreaHasAnyDamage
+ jr c, .no_damage
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ ret
+.no_damage
+ ldtx hl, NoPokemonWithDamageCountersText
+ scf
+ ret
+; 0x2dba2
+
+DamageSwap_SelectAndSwapEffect: ; 2dba2 (b:5ba2)
+ ld a, DUELVARS_DUELIST_TYPE
+ call GetTurnDuelistVariable
+ cp DUELIST_TYPE_PLAYER
+ jr z, .player
+; non-player
+ bank1call Func_61a1
+ bank1call PrintPlayAreaCardList_EnableLCD
+ ret
+
+.player
+ ldtx hl, ProcedureForDamageSwapText
+ bank1call DrawWholeScreenTextBox
+ xor a
+ ldh [hCurSelectionItem], a
+ bank1call Func_61a1
+
+.start
+ bank1call PrintPlayAreaCardList_EnableLCD
+ push af
+ ldh a, [hCurSelectionItem]
+ ld hl, PlayAreaSelectionMenuParameters
+ call InitializeMenuParameters
+ pop af
+ ld [wNumMenuItems], a
+
+; handle selection of Pokemon to take damage from
+.loop_input_first
+ call DoFrame
+ call HandleMenuInput
+ jr nc, .loop_input_first
+ cp $ff
+ ret z ; quit when B button is pressed
+
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ldh [hCurSelectionItem], a
+
+; if card has no damage, play sfx and return to start
+ call GetCardDamageAndMaxHP
+ or a
+ jr z, .no_damage
+
+; take damage away temporarily to draw UI.
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ push af
+ push hl
+ add 10
+ ld [hl], a
+ bank1call PrintPlayAreaCardList_EnableLCD
+ pop hl
+ pop af
+ ld [hl], a
+
+; draw damage counter in cursor
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ld b, SYM_HP_NOK
+ call DrawSymbolOnPlayAreaCursor
+
+; handle selection of Pokemon to give damage to
+.loop_input_second
+ call DoFrame
+ call HandleMenuInput
+ jr nc, .loop_input_second
+ ; if B is pressed, return damage counter
+ ; to card that it was taken from
+ cp $ff
+ jr z, .update_ui
+
+; try to give the card selected the damage counter
+; if it would KO, ignore it.
+ ldh [hPlayAreaEffectTarget], a
+ ldh [hCurSelectionItem], a
+ call TryGiveDamageCounter_DamageSwap
+ jr c, .loop_input_second
+
+ ld a, OPPACTION_6B15
+ call SetOppAction_SerialSendDuelData
+
+.update_ui
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ld b, SYM_SPACE
+ call DrawSymbolOnPlayAreaCursor
+ call EraseCursor
+ jr .start
+
+.no_damage
+ call Func_3794
+ jr .loop_input_first
+; 0x2dc27
+
+; tries to give damage counter to hPlayAreaEffectTarget,
+; and if successful updates UI screen.
+DamageSwap_SwapEffect: ; 2dc27 (b:5c27)
+ call TryGiveDamageCounter_DamageSwap
+ ret c
+ bank1call PrintPlayAreaCardList_EnableLCD
+ or a
+ ret
+; 0x2dc30
+
+; tries to give the damage counter to the target
+; chosen by the Player (hPlayAreaEffectTarget).
+; if the damage counter would KO card, then do
+; not give the damage counter and return carry.
+TryGiveDamageCounter_DamageSwap: ; 2dc30 (b:5c30)
+ ldh a, [hPlayAreaEffectTarget]
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ sub 10
+ jr z, .set_carry ; would bring HP to zero?
+; has enough HP to receive a damage counter
+ ld [hl], a
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ add DUELVARS_ARENA_CARD_HP
+ ld l, a
+ ld a, 10
+ add [hl]
+ ld [hl], a
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x2dc49
+
+PsywaveEffect: ; 2dc49 (b:5c49)
+ call GetEnergyAttachedMultiplierDamage
+ ld hl, wDamage
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+; 0x2dc53
+
+; returns carry if neither Duelist has evolved Pokemon.
+DevolutionBeam_CheckPlayArea: ; 2dc53 (b:5c53)
+ call CheckIfTurnDuelistHasEvolvedCards
+ ret nc
+ call SwapTurn
+ call CheckIfTurnDuelistHasEvolvedCards
+ call SwapTurn
+ ldtx hl, ThereAreNoStage1PokemonText
+ ret
+; 0x2dc64
+
+; returns carry of Player cancelled selection.
+; otherwise, output in hTemp_ffa0 which Play Area
+; was selected ($0 = own Play Area, $1 = opp. Play Area)
+; and in hTempPlayAreaLocation_ffa1 selected card.
+DevolutionBeam_PlayerSelectEffect: ; 2dc64 (b:5c64)
+ ldtx hl, ProcedureForDevolutionBeamText
+ bank1call DrawWholeScreenTextBox
+
+.start
+ bank1call DrawDuelMainScene
+ ldtx hl, PleaseSelectThePlayAreaText
+ call TwoItemHorizontalMenu
+ ldh a, [hKeysHeld]
+ and B_BUTTON
+ jr nz, .set_carry
+
+; a Play Area was selected
+ ldh a, [hCurMenuItem]
+ or a
+ jr nz, .opp_chosen
+
+; player chosen
+ call HandleEvolvedCardSelection
+ jr c, .start
+
+ xor a
+.store_selection
+ ld hl, hTemp_ffa0
+ ld [hli], a ; store which Duelist Play Area selected
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld [hl], a ; store which card selected
+ or a
+ ret
+
+.opp_chosen
+ call SwapTurn
+ call HandleEvolvedCardSelection
+ call SwapTurn
+ jr c, .start
+ ld a, $01
+ jr .store_selection
+
+.set_carry
+ scf
+ ret
+; 0x2dc9e
+
+DevolutionBeam_AISelectEffect: ; 2dc9e (b:5c9e)
+ ld a, $01
+ ldh [hTemp_ffa0], a
+ call SwapTurn
+ call FindFirstNonBasicCardInPlayArea
+ call SwapTurn
+ jr c, .found
+ xor a
+ ldh [hTemp_ffa0], a
+ call FindFirstNonBasicCardInPlayArea
+.found
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ret
+; 0x2dcb6
+
+DevolutionBeam_LoadAnimation: ; 2dcb6 (b:5cb6)
+ xor a
+ ld [wLoadedMoveAnimation], a
+ ret
+; 0x2dcbb
+
+DevolutionBeam_DevolveEffect: ; 2dcbb (b:5cbb)
+ ldh a, [hTemp_ffa0]
+ or a
+ jr z, .DevolvePokemon
+ cp $ff
+ ret z
+
+; opponent's Play Area
+ call SwapTurn
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ jr nz, .skip_handle_no_damage_effect
+ call HandleNoDamageOrEffect
+ jr c, .unaffected
+.skip_handle_no_damage_effect
+ call .DevolvePokemon
+.unaffected
+ call SwapTurn
+ ret
+
+.DevolvePokemon
+ ld a, $5d
+ ld [wLoadedMoveAnimation], a
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ld b, a
+ ld c, $00
+ ldh a, [hWhoseTurn]
+ ld h, a
+ bank1call PlayMoveAnimation
+ bank1call WaitMoveAnimation
+
+; load selected card's data
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ldh [hTempPlayAreaLocation_ff9d], a
+ ld [wTempPlayAreaLocation_cceb], a
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+
+; check if car is affected
+ ld a, [wLoadedCard1ID]
+ ld [wTempNonTurnDuelistCardID], a
+ ld de, $0
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ or a
+ jr nz, .skip_substatus_check
+ call HandleNoDamageOrEffectSubstatus
+ jr c, .check_no_damage_effect
+.skip_substatus_check
+ call HandleDamageReductionOrNoDamageFromPkmnPowerEffects
+.check_no_damage_effect
+ call CheckNoDamageOrEffect
+ jr nc, .devolve
+ call DrawWideTextBox_WaitForInput
+ ret
+
+.devolve
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ldh [hTempPlayAreaLocation_ff9d], a
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ bank1call GetCardOneStageBelow
+ call PrintDevolvedCardNameAndLevelText
+
+ ld a, d
+ call UpdateDevolvedCardHPAndStage
+ call ResetDevolvedCardStatus
+
+; add the evolved card to the hand
+ ld a, e
+ call AddCardToHand
+
+; check if this devolution KO's card
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ call PrintPlayAreaCardKnockedOutIfNoHP
+
+ xor a
+ ld [wDuelDisplayedScreen], a
+ ret
+; 0x2dd3b
+
+; returns carry if Turn Duelist
+; has no Stage1 or Stage2 cards in Play Area.
+CheckIfTurnDuelistHasEvolvedCards: ; 2dd3b (b:5d3b)
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ ld d, h
+ ld e, DUELVARS_ARENA_CARD_STAGE
+.loop
+ ld a, [hli]
+ cp $ff
+ jr z, .set_carry
+ ld a, [de]
+ inc de
+ or a
+ jr z, .loop ; is Basic Stage
+ ret
+.set_carry
+ scf
+ ret
+; 0x2dd50
+
+; handles Player selection of an evolved card in Play Area.
+; returns carry if Player cancelled operation.
+HandleEvolvedCardSelection: ; 2dd50 (b:5d50)
+ bank1call HasAlivePokemonInPlayArea
+.loop
+ bank1call OpenPlayAreaScreenForSelection
+ ret c
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ add DUELVARS_ARENA_CARD_STAGE
+ call GetTurnDuelistVariable
+ or a
+ jr z, .loop ; if Basic, loop
+ ret
+; 0x2dd62
+
+; finds first occurrence in Play Area
+; of Stage 1 or 2 card, and outputs its
+; Play Area location in a, with carry set.
+; if none found, don't return carry set.
+FindFirstNonBasicCardInPlayArea: ; 2dd62 (b:5d62)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld c, a
+
+ ld b, PLAY_AREA_ARENA
+ ld l, DUELVARS_ARENA_CARD_STAGE
+.loop
+ ld a, [hli]
+ or a
+ jr nz, .not_basic
+ inc b
+ dec c
+ jr nz, .loop
+ or a
+ ret
+.not_basic
+ ld a, b
+ scf
+ ret
+; 0x2dd79
+
+NeutralizingShieldEffect: ; 2dd79 (b:5d79)
+ scf
+ ret
+; 0x2dd7b
+
+Psychic_AIEffect: ; 2dd7b (b:5d7b)
+ call Psychic_DamageBoostEffect
+ jp SetMinMaxDamageSameAsDamage
+; 0x2dd81
+
+Psychic_DamageBoostEffect: ; 2dd81 (b:5d81)
+ call GetEnergyAttachedMultiplierDamage
+ ld hl, wDamage
+ ld a, e
+ add [hl]
+ ld [hli], a
+ ld a, d
+ adc [hl]
+ ld [hl], a
+ ret
+; 0x2dd8e
+
+; return carry if no Psychic Energy attached
+Barrier_CheckEnergy: ; 2dd8e (b:5d8e)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wAttachedEnergies + PSYCHIC]
+ ldtx hl, NotEnoughPsychicEnergyText
+ cp 1
+ ret
+; 0x2dd9c
+
+Barrier_PlayerSelectEffect: ; 2dd9c (b:5d9c)
+ ld a, TYPE_ENERGY_PSYCHIC
+ call CreateListOfEnergyAttachedToArena
+ xor a ; PLAY_AREA_ARENA
+ bank1call DisplayEnergyDiscardScreen
+ bank1call HandleEnergyDiscardMenuInput
+ ret c
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2ddae
+
+Barrier_AISelectEffect: ; 2ddae (b:5dae)
+; AI picks the first energy in list
+ ld a, TYPE_ENERGY_PSYCHIC
+ call CreateListOfEnergyAttachedToArena
+ ld a, [wDuelTempList]
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2ddb9
+
+Barrier_DiscardEffect: ; 2ddb9 (b:5db9)
+ ldh a, [hTemp_ffa0]
+ call PutCardInDiscardPile
+ ret
+; 0x2ddbf
+
+Barrier_BarrierEffect: ; 2ddbf (b:5dbf)
+ ld a, SUBSTATUS1_BARRIER
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2ddc5
+
+Mewtwo3EnergyAbsorption_CheckDiscardPile: ; 2ddc5 (b:5dc5)
+ call CreateEnergyCardListFromDiscardPile_AllEnergy
+ ldtx hl, ThereAreNoEnergyCardsInDiscardPileText
+ ret
+; 0x2ddcc
+
+Mewtwo3EnergyAbsorption_PlayerSelectEffect: ; 2ddcc (b:5dcc)
+ ldtx hl, Choose2EnergyCardsFromDiscardPileToAttachText
+ call HandleEnergyCardsInDiscardPileSelection
+ ret
+; 0x2ddd3
+
+Mewtwo3EnergyAbsorption_AISelectEffect: ; 2ddd3 (b:5dd3)
+; AI picks first 2 energy cards
+ call CreateEnergyCardListFromDiscardPile_AllEnergy
+ ld hl, wDuelTempList
+ ld de, hTempList
+ ld c, 2
+.loop
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop
+.done
+ ld a, $ff ; terminating byte
+ ld [de], a
+ ret
+; 0x2ddec
+
+Mewtwo3EnergyAbsorption_AddToHandEffect: ; 2ddec (b:5dec)
+ ld hl, hTempList
+.loop
+ ld a, [hli]
+ cp $ff
+ ret z
+ push hl
+ call MoveDiscardPileCardToHand
+ call GetTurnDuelistVariable
+ ld [hl], CARD_LOCATION_ARENA
+ pop hl
+ jr .loop
+; 0x2ddff
+
+Mewtwo2EnergyAbsorption_CheckDiscardPile: ; 2ddff (b:5dff)
+ call CreateEnergyCardListFromDiscardPile_AllEnergy
+ ldtx hl, ThereAreNoEnergyCardsInDiscardPileText
+ ret
+; 0x2de06
+
+Mewtwo2EnergyAbsorption_PlayerSelectEffect: ; 2de06 (b:5e06)
+ ldtx hl, Choose2EnergyCardsFromDiscardPileToAttachText
+ call HandleEnergyCardsInDiscardPileSelection
+ ret
+; 0x2de0d
+
+Mewtwo2EnergyAbsorption_AISelectEffect: ; 2de0d (b:5e0d)
+; AI picks first 2 energy cards
+ call CreateEnergyCardListFromDiscardPile_AllEnergy
+ ld hl, wDuelTempList
+ ld de, hTempList
+ ld c, 2
+.loop
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop
+.done
+ ld a, $ff ; terminating byte
+ ld [de], a
+ ret
+; 0x2de26
+
+Mewtwo2EnergyAbsorption_AddToHandEffect: ; 2de26 (b:5e26)
+ ld hl, hTempList
+.loop
+ ld a, [hli]
+ cp $ff
+ ret z
+ push hl
+ call MoveDiscardPileCardToHand
+ call GetTurnDuelistVariable
+ ld [hl], CARD_LOCATION_ARENA
+ pop hl
+ jr .loop
+; 0x2de39
+
+; returns carry if Strange Behavior cannot be used.
+StrangeBehavior_CheckDamage: ; 2de39 (b:5e39)
+; does Play Area have any damage counters?
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ call CheckIfPlayAreaHasAnyDamage
+ ldtx hl, NoPokemonWithDamageCountersText
+ jr c, .set_carry
+; can Slowbro receive any damage counters without KO-ing?
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ ldtx hl, CannotUseBecauseItWillBeKnockedOutText
+ cp 10 + 10
+ jr c, .set_carry
+; can Pkmn Power be used?
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ ret
+
+.set_carry
+ scf
+ ret
+; 0x2de5b
+
+StrangeBehavior_SelectAndSwapEffect: ; 2de5b (b:5e5b)
+ ld a, DUELVARS_DUELIST_TYPE
+ call GetTurnDuelistVariable
+ cp DUELIST_TYPE_PLAYER
+ jr z, .player
+
+; not player
+ bank1call Func_61a1
+ bank1call PrintPlayAreaCardList_EnableLCD
+ ret
+
+.player
+ ldtx hl, ProcedureForStrangeBehaviorText
+ bank1call DrawWholeScreenTextBox
+
+ xor a
+ ldh [hCurSelectionItem], a
+ bank1call Func_61a1
+.start
+ bank1call PrintPlayAreaCardList_EnableLCD
+ push af
+ ldh a, [hCurSelectionItem]
+ ld hl, PlayAreaSelectionMenuParameters
+ call InitializeMenuParameters
+ pop af
+
+ ld [wNumMenuItems], a
+.loop_input
+ call DoFrame
+ call HandleMenuInput
+ jr nc, .loop_input
+ cp -1
+ ret z ; return when B button is pressed
+
+ ldh [hCurSelectionItem], a
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld hl, hTemp_ffa0
+ cp [hl]
+ jr z, .play_sfx ; can't select Slowbro itself
+
+ call GetCardDamageAndMaxHP
+ or a
+ jr z, .play_sfx ; can't select card without damage
+
+ call TryGiveDamageCounter_StrangeBehavior
+ jr c, .play_sfx
+ ld a, OPPACTION_6B15
+ call SetOppAction_SerialSendDuelData
+ jr .start
+
+.play_sfx
+ call Func_3794
+ jr .loop_input
+; 0x2deb3
+
+StrangeBehavior_SwapEffect: ; 2deb3 (b:5eb3)
+ call TryGiveDamageCounter_StrangeBehavior
+ ret c
+ bank1call PrintPlayAreaCardList_EnableLCD
+ or a
+ ret
+; 0x2debc
+
+; tries to give the damage counter to the target
+; chosen by the Player (hTemp_ffa0).
+; if the damage counter would KO card, then do
+; not give the damage counter and return carry.
+TryGiveDamageCounter_StrangeBehavior: ; 2debc (b:5ebc)
+ ldh a, [hTemp_ffa0]
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ sub 10
+ jr z, .set_carry ; would bring HP to zero?
+; has enough HP to receive a damage counter
+ ld [hl], a
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ add DUELVARS_ARENA_CARD_HP
+ ld l, a
+ ld a, 10
+ add [hl]
+ ld [hl], a
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x2ded5
+
+; returns carry if has no damage counters.
+SpacingOut_CheckDamage: ; 2ded5 (b:5ed5)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ ldtx hl, NoDamageCountersText
+ cp 10
+ ret
+; 0x2dee0
+
+SpacingOut_Success50PercentEffect: ; 2dee0 (b:5ee0)
+ ldtx de, SuccessCheckIfHeadsAttackIsSuccessfulText
+ call TossCoin_BankB
+ ldh [hTemp_ffa0], a
+ jp nc, SetWasUnsuccessful
+ ld a, $58
+ ld [wLoadedMoveAnimation], a
+ ret
+; 0x2def1
+
+SpacingOut_HealEffect: ; 2def1 (b:5ef1)
+ ldh a, [hTemp_ffa0]
+ or a
+ ret z ; coin toss was tails
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ or a
+ ret z ; no damage counters
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ add 10
+ ld [hl], a
+ ret
+; 0x2df05
+
+; sets carry if no Trainer cards in the Discard Pile.
+Scavenge_CheckDiscardPile: ; 2df05 (b:5f05)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wAttachedEnergies + PSYCHIC]
+ ldtx hl, NotEnoughPsychicEnergyText
+ cp 1
+ ret c ; return if no Psychic energy attached
+ call CreateTrainerCardListFromDiscardPile
+ ldtx hl, ThereAreNoTrainerCardsInDiscardPileText ; this is redundant
+ ret
+; 0x2df1a
+
+Scavenge_PlayerSelectEnergyEffect: ; 2df1a (b:5f1a)
+ ld a, TYPE_ENERGY_PSYCHIC
+ call CreateListOfEnergyAttachedToArena
+ xor a ; PLAY_AREA_ARENA
+ bank1call DisplayEnergyDiscardScreen
+ bank1call HandleEnergyDiscardMenuInput
+ ret c
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+; 0x2df2d
+
+Scavenge_AISelectEffect: ; 2df2d (b:5f2d)
+; AI picks first Energy card in list
+ ld a, TYPE_ENERGY_PSYCHIC
+ call CreateListOfEnergyAttachedToArena
+ ld a, [wDuelTempList]
+ ldh [hTemp_ffa0], a
+; AI picks first Trainer card in list
+ call CreateTrainerCardListFromDiscardPile
+ ld a, [wDuelTempList]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ret
+; 0x2df40
+
+Scavenge_DiscardEffect: ; 2df40 (b:5f40)
+ ldh a, [hTemp_ffa0]
+ call PutCardInDiscardPile
+ ret
+; 0x2df46
+
+Scavenge_PlayerSelectTrainerEffect: ; 2df46 (b:5f46)
+ call CreateTrainerCardListFromDiscardPile
+ bank1call Func_5591
+ ldtx hl, PleaseSelectCardText
+ ldtx de, PlayerDiscardPileText
+ bank1call SetCardListHeaderText
+.loop_input
+ bank1call DisplayCardList
+ jr c, .loop_input
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ret
+; 0x2df5f
+
+Scavenge_AddToHandEffect: ; 2df5f (b:5f5f)
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ call MoveDiscardPileCardToHand
+ call AddCardToHand
+ call IsPlayerTurn
+ ret c
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ldtx hl, WasPlacedInTheHandText
+ bank1call DisplayCardDetailScreen
+ ret
+; 0x2df74
+
+; returns carry if Defending Pokemon has no attacks
+SlowpokeAmnesia_CheckAttacks: ; 2df74 (b:5f74)
+ call CheckIfDefendingPokemonHasAnyAttack
+ ldtx hl, NoAttackMayBeChoosenText
+ ret
+; 0x2df7b
+
+SlowpokeAmnesia_PlayerSelectEffect: ; 2df7b (b:5f7b)
+ call PlayerPickAttackForAmnesia
+ ret
+; 0x2df7f
+
+SlowpokeAmnesia_AISelectEffect: ; 2df7f (b:5f7f)
+ call AIPickAttackForAmnesia
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2df85
+
+SlowpokeAmnesia_DisableEffect: ; 2df85 (b:5f85)
+ call ApplyAmnesiaToAttack
+ ret
+; 0x2df89
+
+; returns carry if Arena card has no Psychic Energy attached
+; or if it doesn't have any damage counters.
+KadabraRecover_CheckEnergyHP: ; 2df89 (b:5f89)
+ ld e, PLAY_AREA_ARENA
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wAttachedEnergies + PSYCHIC]
+ ldtx hl, NotEnoughPsychicEnergyText
+ cp 1
+ ret c ; return if not enough energy
+ call GetCardDamageAndMaxHP
+ ldtx hl, NoDamageCountersText
+ cp 10
+ ret ; return carry if no damage
+; 0x2dfa0
+
+KadabraRecover_PlayerSelectEffect: ; 2dfa0 (b:5fa0)
+ ld a, TYPE_ENERGY_PSYCHIC
+ call CreateListOfEnergyAttachedToArena
+ xor a ; PLAY_AREA_ARENA
+ bank1call DisplayEnergyDiscardScreen
+ bank1call HandleEnergyDiscardMenuInput
+ ret c
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a ; store card chosen
+ ret
+; 0x2dfb2
+
+KadabraRecover_AISelectEffect: ; 2dfb2 (b:5fb2)
+ ld a, TYPE_ENERGY_PSYCHIC
+ call CreateListOfEnergyAttachedToArena
+ ld a, [wDuelTempList] ; pick first card
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2dfbd
+
+KadabraRecover_DiscardEffect: ; 2dfbd (b:5fbd)
+ ldh a, [hTemp_ffa0]
+ call PutCardInDiscardPile
+ ret
+; 0x2dfc3
+
+KadabraRecover_HealEffect: ; 2dfc3 (b:5fc3)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ ld e, a ; all damage for recovery
+ ld d, 0
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2dfd7
+
+JynxDoubleslap_AIEffect: ; 2dfd7 (b:5fd7)
+ ld a, 20 / 2
+ lb de, 0, 20
+ jp SetExpectedAIDamage
+; 0x2dfcf
+
+JynxDoubleslap_MultiplierEffect: ; 2dfcf (b:5fcf)
+ ld hl, 10
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 2
+ call TossCoinATimes_BankB
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2dff2
+
+JynxMeditate_AIEffect: ; 2dff2 (b:5ff2)
+ call JynxMeditate_DamageBoostEffect
+ jp SetMinMaxDamageSameAsDamage
+; 0x2dfec
+
+JynxMeditate_DamageBoostEffect: ; 2dfec (b:5fec)
+; add damage counters of Defending card to damage
+ call SwapTurn
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ call SwapTurn
+ call AddToDamage
+ ret
+; 0x2e001
+
+MysteryAttack_AIEffect: ; 2e001 (b:6001)
+ ld a, 10
+ lb de, 0, 20
+ jp SetExpectedAIDamage
+; 0x2e009
+
+MysteryAttack_RandomEffect: ; 2e009 (b:6009)
+ ld a, 10
+ call SetDefiniteDamage
+
+; chooses a random effect from 8 possible options.
+ call UpdateRNGSources
+ and %111
+ ldh [hTemp_ffa0], a
+ ld hl, .random_effect
+ jp JumpToFunctionInTable
+
+.random_effect
+ dw ParalysisEffect
+ dw PoisonEffect
+ dw SleepEffect
+ dw ConfusionEffect
+ dw .no_effect ; this will actually activate recovery effect afterwards
+ dw .no_effect
+ dw .more_damage
+ dw .no_damage
+
+.more_damage
+ ld a, 20
+ call SetDefiniteDamage
+ ret
+
+.no_damage
+ ld a, $5b
+ ld [wLoadedMoveAnimation], a
+ xor a
+ call SetDefiniteDamage
+ call SetNoEffectFromStatus
+.no_effect
+ ret
+; 0x2e03e
+
+MysteryAttack_RecoverEffect: ; 2e03e (b:603e)
+; in case the 5th option was chosen for random effect,
+; trigger recovery effect for 10 HP.
+ ldh a, [hTemp_ffa0]
+ cp 4
+ ret nz
+ lb de, 0, 10
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2e04a
+
+StoneBarrage_AIEffect: ; 2e04a (b:604a)
+ ld a, 10
+ lb de, 0, 100
+ jp SetExpectedAIDamage
+; 0x2e052
+
+StoneBarrage_MultiplierEffect: ; 2e052 (b:6052)
+ xor a
+ ldh [hTemp_ffa0], a
+.loop_coin_toss
+ ldtx de, FlipUntilFailAppears10DamageForEachHeadsText
+ xor a
+ call TossCoinATimes_BankB
+ jr nc, .tails
+ ld hl, hTemp_ffa0
+ inc [hl] ; increase heads count
+ jr .loop_coin_toss
+
+.tails
+; store resulting damage
+ ldh a, [hTemp_ffa0]
+ ld l, a
+ ld h, 10
+ call HtimesL
+ ld de, wDamage
+ ld a, l
+ ld [de], a
+ inc de
+ ld a, h
+ ld [de], a
+ ret
+; 0x2e075
+
+OnixHardenEffect: ; 2e075 (b:6075)
+ ld a, SUBSTATUS1_HARDEN
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2e07b
+
+PrimeapeFurySwipes_AIEffect: ; 2e07b (b:607b)
+ ld a, 60 / 2
+ lb de, 0, 60
+ jp SetExpectedAIDamage
+; 0x2e083
+
+PrimeapeFurySwipes_MultiplierEffect: ; 2e083 (b:6083)
+ ld hl, 20
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 3
+ call TossCoinATimes_BankB
+ add a
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2e099
+
+TantrumEffect: ; 2e099 (b:6099)
+ ldtx de, IfTailsYourPokemonBecomesConfusedText
+ call TossCoin_BankB
+ ret c ; return if heads
+; confuse Pokemon
+ ld a, $29
+ ld [wLoadedMoveAnimation], a
+ call SwapTurn
+ call ConfusionEffect
+ call SwapTurn
+ ret
+; 0x2e0af
+
+StrikesBackEffect: ; 2e0af (b:60af)
+ scf
+ ret
+; 0x2e0b1
+
+KabutoArmorEffect: ; 2e0b1 (b:60b1)
+ scf
+ ret
+; 0x2e0b3
+
+AbsorbEffect: ; 2e0b3 (b:60b3)
+ ld hl, wDealtDamage
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ srl h
+ rr l
+ bit 0, l
+ jr z, .rounded
+ ; round up to nearest 10
+ ld de, 5
+ add hl, de
+.rounded
+ ld e, l
+ ld d, h
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2e0cb
+
+SnivelEffect: ; 2e0cb (b:60cb)
+ ld a, SUBSTATUS2_REDUCE_BY_20
+ call ApplySubstatus2ToDefendingCard
+ ret
+; 0x2e0d1
+
+CuboneRage_AIEffect: ; 2e0d1 (b:60d1)
+ call CuboneRage_DamageBoostEffect
+ jp SetMinMaxDamageSameAsDamage
+; 0x2e0d7
+
+CuboneRage_DamageBoostEffect: ; 2e0d7 (b:60d7)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ call AddToDamage
+ ret
+; 0x2e0e0
+
+Bonemerang_AIEffect: ; 2e0e0 (b:60e0)
+ ld a, 60 / 2
+ lb de, 0, 60
+ jp SetExpectedAIDamage
+; 0x2e0e8
+
+Bonemerang_MultiplierEffect: ; 2e0e8 (b:60e8)
+ ld hl, 30
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 2
+ call TossCoinATimes_BankB
+ ld e, a
+ add a ; a = 2 * heads
+ add e ; a = 3 * heads
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2e100
+
+; returns carry if can't add Pokemon from deck
+MarowakCallForFamily_CheckDeckAndPlayArea: ; 2e100 (b:6100)
+ call CheckIfDeckIsEmpty
+ ret c ; no cards in deck
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, NoSpaceOnTheBenchText
+ cp MAX_PLAY_AREA_POKEMON
+ ccf
+ ret
+; 0x2e110
+
+MarowakCallForFamily_PlayerSelectEffect: ; 2e110 (b:6110)
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+
+ call CreateDeckCardList
+ ldtx hl, ChooseBasicFightingPokemonFromDeckText
+ ldtx bc, FightingPokemonDeckText
+ lb de, SEARCHEFFECT_BASIC_FIGHTING, $00
+ call LookForCardsInDeck
+ ret c
+
+; draw Deck list interface and print text
+ bank1call Func_5591
+ ldtx hl, ChooseBasicFightingPokemonText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+
+.loop
+ bank1call DisplayCardList
+ jr c, .pressed_b
+
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp FIGHTING
+ jr nz, .play_sfx ; is Fighting?
+ ld a, [wLoadedCard2Stage]
+ or a
+ jr nz, .play_sfx ; is Basic?
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+
+.play_sfx
+ ; play SFX and loop back
+ call Func_3794
+ jr .loop
+
+.pressed_b
+; figure if Player can exit the screen without selecting,
+; that is, if the Deck has no Basic Fighting Pokemon.
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop_b_press
+ ld a, [hl]
+ cp CARD_LOCATION_DECK
+ jr nz, .next
+ ld a, l
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard1Type]
+ cp FIGHTING
+ jr nz, .next ; found, go back to top loop
+ ld a, [wLoadedCard1Stage]
+ or a
+ jr z, .play_sfx ; found, go back to top loop
+.next
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_b_press
+
+; no valid card in Deck, can safely exit screen
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+; 0x2e177
+
+MarowakCallForFamily_AISelectEffect: ; 2e177 (b:6177)
+ call CreateDeckCardList
+ ld hl, wDuelTempList
+.loop_deck
+ ld a, [hli]
+ ldh [hTemp_ffa0], a
+ cp $ff
+ ret z ; none found
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp FIGHTING
+ jr nz, .loop_deck
+ ld a, [wLoadedCard2Stage]
+ or a
+ jr nz, .loop_deck
+; found
+ ret
+; 0x2e194
+
+MarowakCallForFamily_PutInPlayAreaEffect: ; 2e194 (b:6194)
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ jr z, .shuffle
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ call PutHandPokemonCardInPlayArea
+ call IsPlayerTurn
+ jr c, .shuffle
+ ; display card on screen
+ ldh a, [hTemp_ffa0]
+ ldtx hl, PlacedOnTheBenchText
+ bank1call DisplayCardDetailScreen
.shuffle
- call Func_2c0bd
- ld a, $07
- bank1call $4935
- ld c, $07
+ call Func_2c0bd
+ ret
+; 0x2c1b4
+
+KarateChop_AIEffect: ; 2e1b4 (b:61b4)
+ call KarateChop_DamageSubtractionEffect
+ jp SetMinMaxDamageSameAsDamage
+; 0x2e1ba
+
+KarateChop_DamageSubtractionEffect: ; 2e1ba (b:61ba)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ ld e, a
+ ld hl, wDamage
+ ld a, [hl]
+ sub e
+ ld [hli], a
+ ld a, [hl]
+ sbc 0
+ ld [hl], a
+ rla
+ ret nc
+; cap it to 0 damage
+ xor a
+ call SetDefiniteDamage
+ ret
+; 0x2e1d1
+
+SubmissionEffect: ; 2e1d1 (b:61d1)
+ ld a, 20
+ call DealRecoilDamageToSelf
+ ret
+; 0x2e1d7
+
+GolemSelfdestructEffect: ; 2e1d7 (b:61d7)
+ ld a, 100
+ call DealRecoilDamageToSelf
+ ld a, $01
+ ld [wIsDamageToSelf], a
+ ld a, 20
+ call DealDamageToAllBenchedPokemon
+ call SwapTurn
+ xor a
+ ld [wIsDamageToSelf], a
+ ld a, 20
+ call DealDamageToAllBenchedPokemon
+ call SwapTurn
+ ret
+; 0x2e1f6
+
+GravelerHardenEffect: ; 2e1f6 (b:61f6)
+ ld a, SUBSTATUS1_HARDEN
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2e1fc
+
+Ram_SelectSwitchEffect: ; 2e1fc (b:61fc)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp 2
+ jr c, .no_bench
+ call DuelistSelectForcedSwitch
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ret
+.no_bench
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2e212
+
+Ram_RecoilSwitchEffect: ; 2e212 (b:6212)
+ ld a, 20
+ call DealRecoilDamageToSelf
+ ldh a, [hTemp_ffa0]
+ call HandleSwitchDefendingPokemonEffect
+ ret
+; 0x2e21d
+
+LeerEffect: ; 2e21d (b:621d)
+ ldtx de, IfHeadsOpponentCannotAttackText
+ call TossCoin_BankB
+ jp nc, SetWasUnsuccessful
+ ld a, $74
+ ld [wLoadedMoveAnimation], a
+ ld a, SUBSTATUS2_LEER
+ call ApplySubstatus2ToDefendingCard
+ ret
+; 0x2e231
+
+; return carry if opponent has no Bench Pokemon.
+StretchKick_CheckBench: ; 2e231 (b:6231)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ ldtx hl, EffectNoPokemonOnTheBenchText
+ cp 2
+ ret
+; 0x2e23c
+
+StretchKick_PlayerSelectEffect: ; 2e23c (b:623c)
+ ldtx hl, ChoosePkmnInTheBenchToGiveDamageText
+ call DrawWideTextBox_WaitForInput
+ call SwapTurn
+ bank1call HasAlivePokemonInBench
+.loop_input
+ bank1call OpenPlayAreaScreenForSelection
+ jr c, .loop_input
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ call SwapTurn
+ ret
+; 0x2e255
+
+StretchKick_AISelectEffect: ; 2e255 (b:6255)
+; chooses Bench Pokemon with least amount of remaining HP
+ call GetBenchPokemonWithLowestHP
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2e25b
+
+StretchKick_BenchDamageEffect: ; 2e25b (b:625b)
+ call SwapTurn
+ ldh a, [hTemp_ffa0]
+ ld b, a
+ ld de, 20
+ call DealDamageToPlayAreaPokemon_RegularAnim
+ call SwapTurn
+ ret
+; 0x2e26b
+
+SandAttackEffect: ; 2e26b (b:626b)
+ ld a, SUBSTATUS2_SAND_ATTACK
+ call ApplySubstatus2ToDefendingCard
+ ret
+; 0x2e271
+
+SandslashFurySwipes_AIEffect: ; 2e271 (b:6271)
+ ld a, 60 / 2
+ lb de, 0, 60
+ jp SetExpectedAIDamage
+; 0x2e279
+
+SandslashFurySwipes_MultiplierEffect: ; 2e279 (b:6279)
+ ld hl, 20
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 3
+ call TossCoinATimes_BankB
+ add a
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2e28f
+
+EarthquakeEffect: ; 2e28f (b:628f)
+ ld a, $01
+ ld [wIsDamageToSelf], a
+ ld a, 10
+ call DealDamageToAllBenchedPokemon
+ ret
+; 0x2e29a
+
+PrehistoricPowerEffect: ; 2e29a (b:629a)
+ scf
+ ret
+; 0x2e29c
+
+; returns carry if Pkmn Power can't be used.
+Peek_OncePerTurnCheck: ; 2e29c (b:629c)
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ and USED_PKMN_POWER_THIS_TURN
+ jr nz, .already_used
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ ret
+.already_used
+ ldtx hl, OnlyOncePerTurnText
+ scf
+ ret
+; 0x2e2b4
+
+Peek_SelectEffect: ; 2e2b4 (b:62b4)
+; set Pkmn Power used flag
+ ldh a, [hTemp_ffa0]
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ set USED_PKMN_POWER_THIS_TURN_F, [hl]
+
+ ld a, DUELVARS_DUELIST_TYPE
+ call GetTurnDuelistVariable
+ cp DUELIST_TYPE_LINK_OPP
+ jr z, .link_opp
+ and DUELIST_TYPE_AI_OPP
+ jr nz, .ai_opp
+
+; player
+ call Func_3b31
+ call Func_30e7
+ ldh [hAIPkmnPowerEffectParam], a
+ call SerialSend8Bytes
+ ret
+
+.link_opp
+ call SerialRecv8Bytes
+ ldh [hAIPkmnPowerEffectParam], a
+
+.ai_opp
+ ldh a, [hAIPkmnPowerEffectParam]
+ bit AI_PEEK_TARGET_HAND_F, a
+ jr z, .prize_or_deck
+ and (~AI_PEEK_TARGET_HAND & $ff) ; unset bit to get deck index
+; if masked value is higher than $40, then it means
+; that AI chose to look at Player's deck.
+; all deck indices will be smaller than $40.
+ cp $40
+ jr c, .hand
+ ldh a, [hAIPkmnPowerEffectParam]
+ jr .prize_or_deck
+
+.hand
+; AI chose to look at random card in hand,
+; so display it to the Player on screen.
+ call SwapTurn
+ ldtx hl, PeekWasUsedToLookInYourHandText
+ bank1call DisplayCardDetailScreen
+ call SwapTurn
+ ret
+
+.prize_or_deck
+; AI chose either a prize card or Player's top deck card,
+; so show Play Area and draw cursor appropriately.
+ call Func_3b31
+ call SwapTurn
+ ldh a, [hAIPkmnPowerEffectParam]
+ xor $80
+ call Func_30f9
+ call SwapTurn
+ ldtx hl, CardPeekWasUsedOnText
+ call DrawWideTextBox_WaitForInput
+ ret
+; 0x2e30f
+
+BoneAttackEffect: ; 2e30f (b:630f)
+ ldtx de, IfHeadsOpponentCannotAttackText
+ call TossCoin_BankB
+ ret nc
+ ld a, SUBSTATUS2_BONE_ATTACK
+ call ApplySubstatus2ToDefendingCard
+ ret
+; 0x2e31c
+
+; return carry if neither Play Area
+; has room for more Bench Pokemon.
+Wail_BenchCheck: ; 2e31c (b:631c)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp MAX_PLAY_AREA_POKEMON
+ jr c, .no_carry
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp MAX_PLAY_AREA_POKEMON
+ jr c, .no_carry
+ ldtx hl, NoSpaceOnTheBenchText
+ scf
+ ret
+.no_carry
+ or a
+ ret
+; 0x2e335
+
+Wail_FillBenchEffect: ; 2e335 (b:6335)
+ call SwapTurn
+ call .FillBench
+ call SwapTurn
+ call .FillBench
+
+; display both Play Areas
+ ldtx hl, BasicPokemonWasPlacedOnEachBenchText
+ call DrawWideTextBox_WaitForInput
+ bank1call HasAlivePokemonInPlayArea
+ bank1call OpenPlayAreaScreenForSelection
+ call SwapTurn
+ bank1call HasAlivePokemonInPlayArea
+ bank1call OpenPlayAreaScreenForSelection
+ call SwapTurn
+ ret
+
+.FillBench ; 2e35a (b:635a)
+ call CreateDeckCardList
+ ret c
+ ld hl, wDuelTempList
+ call ShuffleCards
+
+; if no more space in the Bench, then return.
+.check_bench
+ push hl
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ pop hl
+ cp MAX_PLAY_AREA_POKEMON
+ jr nc, .done
+
+; there's still space, so look for the next
+; Basic Pokemon card to put in the Bench.
+.loop
+ ld a, [hli]
+ ldh [hTempCardIndex_ff98], a
+ cp $ff
+ jr z, .done
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ jr nc, .loop ; is Pokemon card?
+ ld a, [wLoadedCard2Stage]
+ or a
+ jr nz, .loop ; is Basic?
+; place card in Bench
+ push hl
+ ldh a, [hTempCardIndex_ff98]
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ call PutHandPokemonCardInPlayArea
+ pop hl
+ jr .check_bench
+
+.done
+ call Func_2c0bd
+ ret
+; 0x2e399
+
+Thunderpunch_AIEffect: ; 2e399 (b:6399)
+ ld a, (30 + 40) / 2
+ lb de, 30, 40
+ jp SetExpectedAIDamage
+; 0x2e3a1
+
+Thunderpunch_ModifierEffect: ; 2e3a1 (b:63a1)
+ ldtx de, IfHeadPlus10IfTails10ToYourselfText
+ call TossCoin_BankB
+ ldh [hTemp_ffa0], a
+ ret nc ; return if got tails
+ ld a, 10
+ call AddToDamage
+ ret
+; 0x2e3b0
+
+Thunderpunch_RecoilEffect: ; 2e3b0 (b:63b0)
+ ldh a, [hTemp_ffa0]
+ or a
+ ret nz ; return if got heads
+ ld a, 10
+ call DealRecoilDamageToSelf
+ ret
+; 0x2e3ba
+
+LightScreenEffect: ; 2e3ba (b:63ba)
+ ld a, SUBSTATUS1_HALVE_DAMAGE
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2e3c0
+
+ElectabuzzQuickAttack_AIEffect: ; 2e3c0 (b:63c0)
+ ld a, (10 + 30) / 2
+ lb de, 10, 30
+ jp SetExpectedAIDamage
+; 0x2e3c8
+
+ElectabuzzQuickAttack_DamageBoostEffect: ; 2e3c8 (b:63c8)
+ ld hl, 20
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsPlusDamageText
+ call TossCoin_BankB
+ ret nc ; return if tails
+ ld a, 20
+ call AddToDamage
+ ret
+; 0x2e3db
+
+MagnemiteSelfdestructEffect: ; 2e3db (b:63db)
+ ld a, 40
+ call DealRecoilDamageToSelf
+
+ ld a, $01
+ ld [wIsDamageToSelf], a
+ ld a, 10
+ call DealDamageToAllBenchedPokemon
+ call SwapTurn
+
+ xor a
+ ld [wIsDamageToSelf], a
+ ld a, 10
+ call DealDamageToAllBenchedPokemon
+ call SwapTurn
+ ret
+; 0x2e3fa
+
+ZapdosThunder_Recoil50PercentEffect: ; 2e3fa (b:63fa)
+ ld hl, 30
+ call LoadTxRam3
+ ldtx de, IfTailsDamageToYourselfTooText
+ call TossCoin_BankB
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2e409
+
+ZapdosThunder_RecoilEffect: ; 2e409 (b:6409)
+ ld hl, 30
+ call LoadTxRam3
+ ldh a, [hTemp_ffa0]
+ or a
+ ret nz ; return if got heads
+ ld a, 30
+ call DealRecoilDamageToSelf
+ ret
+; 0x2e419
+
+ThunderboltEffect: ; 2e419 (b:6419)
+ xor a
+ call CreateArenaOrBenchEnergyCardList
+ ld hl, wDuelTempList
+; put all energy cards in Discard Pile
+.loop
+ ld a, [hli]
+ cp $ff
+ ret z
+ call PutCardInDiscardPile
+ jr .loop
+; 0x2e429
+
+ThunderstormEffect: ; 2e429 (b:6429)
+ ld a, 1
+ ldh [hCurSelectionItem], a
+
+ call SwapTurn
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld c, a
+ ld b, 0
+ ld e, b
+ jr .next_pkmn
+
+.check_damage
+ push de
+ push bc
+ call .DisplayText
+ ld de, $0
+ call SwapTurn
+ call TossCoin_BankB
+ call SwapTurn
+ push af
+ call GetNextPositionInTempList
+ pop af
+ ld [hl], a ; store result in list
+ pop bc
+ pop de
+ jr c, .next_pkmn
+ inc b ; increase number of tails
+
+.next_pkmn
+ inc e
+ dec c
+ jr nz, .check_damage
+
+; all coins were tossed for each Benched Pokemon
+ call GetNextPositionInTempList
+ ld [hl], $ff
+ ld a, b
+ ldh [hTemp_ffa0], a
+ call Func_3b21
+ call SwapTurn
+
+; tally recoil damage
+ ldh a, [hTemp_ffa0]
+ or a
+ jr z, .skip_recoil
+ ; deal number of tails times 10 to self
+ call ATimes10
+ call DealRecoilDamageToSelf
+.skip_recoil
+
+; deal damage for Bench Pokemon that got heads
+ call SwapTurn
+ ld hl, hTempPlayAreaLocation_ffa1
+ ld b, PLAY_AREA_BENCH_1
+.loop_bench
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+ or a
+ jr z, .skip_damage ; skip if tails
+ ld de, 20
+ call DealDamageToPlayAreaPokemon_RegularAnim
+.skip_damage
+ inc b
+ jr .loop_bench
+
+.done
+ call SwapTurn
+ ret
+; 0x2e491
+
+; displays text for current Bench Pokemon,
+; printing its Bench number and name.
+.DisplayText ; 2e491 (b:6491)
+ ld b, e
+ ldtx hl, BenchText
+ ld de, wDefaultText
+ call CopyText
+ ld a, $30 ; 0 FW character
+ add b
+ ld [de], a
+ inc de
+ ld a, $20 ; space FW character
+ ld [de], a
+ inc de
+
+ ld a, DUELVARS_ARENA_CARD
+ add b
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld hl, wLoadedCard2Name
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call CopyText
+
+ xor a
+ ld [wDuelDisplayedScreen], a
+ ret
+; 0x2e4bb
+
+JolteonQuickAttack_AIEffect: ; 2e4bb (b:64bb)
+ ld a, (10 + 30) / 2
+ lb de, 10, 30
+ jp SetExpectedAIDamage
+; 0x2e4c3
+
+JolteonQuickAttack_DamageBoostEffect: ; 2e4c3 (b:64c3)
+ ld hl, 20
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsPlusDamageText
+ call TossCoin_BankB
+ ret nc ; return if tails
+ ld a, 20
+ call AddToDamage
+ ret
+; 0x2e3d6
+
+PinMissile_AIEffect: ; 2e4d6 (b:64d6)
+ ld a, (20 * 4) / 2
+ lb de, 0, 80
+ jp SetExpectedAIDamage
+; 0x2e4de
+
+PinMissile_MultiplierEffect: ; 2e4de (b:64de)
+ ld hl, 20
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 4
+ call TossCoinATimes_BankB
+ add a ; a = 2 * heads
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2e4f4
+
+Fly_AIEffect: ; 2e4f4 (b:64f4)
+ ld a, 30 / 2
+ lb de, 0, 30
+ jp SetExpectedAIDamage
+; 0x2e4fc
+
+Fly_Success50PercentEffect: ; 2e4fc (b:64fc)
+ ldtx de, SuccessCheckIfHeadsAttackIsSuccessfulText
+ call TossCoin_BankB
+ jr c, .heads
+ xor a
+ ld [wLoadedMoveAnimation], a
+ call SetDefiniteDamage
+ call SetWasUnsuccessful
+ ret
+.heads
+ ld a, $52
+ ld [wLoadedMoveAnimation], a
+ ld a, SUBSTATUS1_FLY
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2e51a
+
+ThunderJolt_Recoil50PercentEffect: ; 2e51a (b:651a)
+ ld hl, 10
+ call LoadTxRam3
+ ldtx de, IfTailsDamageToYourselfTooText
+ call TossCoin_BankB
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2e529
+
+ThunderJolt_RecoilEffect: ; 2e529 (b:6529)
+ ld hl, 10
+ call LoadTxRam3
+ ldh a, [hTemp_ffa0]
+ or a
+ ret nz ; return if was heads
+ ld a, 10
+ call DealRecoilDamageToSelf
+ ret
+; 0x2e539
+
+Spark_PlayerSelectEffect: ; 2e539 (b:6539)
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp 2
+ ret c ; has no Bench Pokemon
+
+ ldtx hl, ChoosePkmnInTheBenchToGiveDamageText
+ call DrawWideTextBox_WaitForInput
+ call SwapTurn
+ bank1call HasAlivePokemonInBench
+
+ ; the following two instructions can be removed
+ ; since Player selection will overwrite it.
+ ld a, PLAY_AREA_BENCH_1
+ ldh [hTempPlayAreaLocation_ff9d], a
+
+.loop_input
+ bank1call OpenPlayAreaScreenForSelection
+ jr c, .loop_input
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ call SwapTurn
+ ret
+; 0x2e562
+
+Spark_AISelectEffect: ; 2e562 (b:6562)
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp 2
+ ret c ; has no Bench Pokemon
+; AI always picks Pokemon with lowest HP remaining
+ call GetBenchPokemonWithLowestHP
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2e574
+
+Spark_BenchDamageEffect: ; 2e574 (b:6574)
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ ret z
+ call SwapTurn
+ ldh a, [hTemp_ffa0]
+ ld b, a
+ ld de, 10
+ call DealDamageToPlayAreaPokemon_RegularAnim
+ call SwapTurn
+ ret
+; 0x2e589
+
+Pikachu3GrowlEffect: ; 2e589 (b:6589)
+ ld a, SUBSTATUS2_GROWL
+ call ApplySubstatus2ToDefendingCard
+ ret
+; 0x2e58f
+
+Pikachu4GrowlEffect: ; 2e58f (b:658f)
+ ld a, SUBSTATUS2_GROWL
+ call ApplySubstatus2ToDefendingCard
+ ret
+; 0x2e595
+
+ChainLightningEffect: ; 2e595 (b:6595)
+ ld a, 10
+ call SetDefiniteDamage
+ call SwapTurn
+ call GetArenaCardColor
+ call SwapTurn
+ ldh [hCurSelectionItem], a
+ cp COLORLESS
+ ret z ; don't damage if colorless
+
+; opponent's Bench
+ call SwapTurn
+ call .DamageSameColorBench
+ call SwapTurn
+
+; own Bench
+ ld a, $01
+ ld [wIsDamageToSelf], a
+ call .DamageSameColorBench
+ ret
+; 0x2e5ba
+
+.DamageSameColorBench ; 2e5ba (b:65ba)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld e, a
+ ld d, PLAY_AREA_ARENA
+ jr .next_bench
+
+.check_damage
+ ld a, d
+ call GetPlayAreaCardColor
+ ld c, a
+ ldh a, [hCurSelectionItem]
+ cp c
+ jr nz, .next_bench ; skip if not same color
+; apply damage to this Bench card
+ push de
+ ld b, d
+ ld de, 10
+ call DealDamageToPlayAreaPokemon_RegularAnim
+ pop de
+
+.next_bench
+ inc d
+ dec e
+ jr nz, .check_damage
+ ret
+; 0x2e5dc
+
+RaichuAgilityEffect: ; 2e5dc (b:65dc)
+ ldtx de, IfHeadsDoNotReceiveDamageOrEffectText
+ call TossCoin_BankB
+ ret nc ; skip if got tails
+ ld a, $52
+ ld [wLoadedMoveAnimation], a
+ ld a, SUBSTATUS1_AGILITY
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2e5ee
+
+RaichuThunder_Recoil50PercentEffect: ; 2e5ee (b:65ee)
+ ld hl, 30
+ call LoadTxRam3
+ ldtx de, IfTailsDamageToYourselfTooText
+ call TossCoin_BankB
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2e5fd
+
+RaichuThunder_RecoilEffect: ; 2e5fd (b:65fd)
+ ld hl, 30
+ call LoadTxRam3
+ ldh a, [hTemp_ffa0]
+ or a
+ ret nz ; return if got heads
+ ld a, 30
+ call DealRecoilDamageToSelf
+ ret
+; 0x2e60d
+
+Gigashock_PlayerSelectEffect: ; 2e60d (b:660d)
+ call SwapTurn
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp 2
+ jr nc, .has_bench
+ call SwapTurn
+ ld a, $ff
+ ldh [hTempList], a
+ ret
+
+.has_bench
+ ldtx hl, ChooseUpTo3PkmnOnBenchToGiveDamageText
+ call DrawWideTextBox_WaitForInput
+
+; init number of items in list and cursor position
+ xor a
+ ldh [hCurSelectionItem], a
+ ld [wce72], a
+ bank1call Func_61a1
+.start
+ bank1call PrintPlayAreaCardList_EnableLCD
+ push af
+ ld a, [wce72]
+ ld hl, BenchSelectionMenuParameters
+ call InitializeMenuParameters
+ pop af
+
+; exclude Arena Pokemon from number of items
+ dec a
+ ld [wNumMenuItems], a
+
+.loop_input
+ call DoFrame
+ call HandleMenuInput
+ jr nc, .loop_input
+ cp -1
+ jr z, .try_cancel
+
+ ld [wce72], a
+ call .CheckIfChosenAlready
+ jr nc, .not_chosen
+ ; play SFX
+ call Func_3794
+ jr .loop_input
+
+.not_chosen
+; mark this Play Area location
+ ldh a, [hCurMenuItem]
+ inc a
+ ld b, SYM_LIGHTNING
+ call DrawSymbolOnPlayAreaCursor
+; store it in the list of chosen Bench Pokemon
+ call GetNextPositionInTempList
+ ldh a, [hCurMenuItem]
+ inc a
+ ld [hl], a
+
+; check if 3 were chosen already
+ ldh a, [hCurSelectionItem]
+ ld c, a
+ cp 3
+ jr nc, .chosen ; check if already chose 3
+
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ dec a
+ cp c
+ jr nz, .start ; if sill more options available, loop back
+ ; fallthrough if no other options available to choose
+
+.chosen
+ ldh a, [hCurMenuItem]
+ inc a
+ call Func_2c10b
+ ldh a, [hKeysPressed]
+ and B_BUTTON
+ jr nz, .try_cancel
+ call SwapTurn
+ call GetNextPositionInTempList
+ ld [hl], $ff ; terminating byte
+ ret
+
+.try_cancel
+ ldh a, [hCurSelectionItem]
+ or a
+ jr z, .start ; none selected, can safely loop back to start
+
+; undo last selection made
+ dec a
+ ldh [hCurSelectionItem], a
+ ld e, a
+ ld d, $00
+ ld hl, hTempList
+ add hl, de
+ ld a, [hl]
+
+ push af
+ ld b, SYM_SPACE
+ call DrawSymbolOnPlayAreaCursor
+ call EraseCursor
+ pop af
+
+ dec a
+ ld [wce72], a
+ jr .start
+; 0x2e6af
+
+; returns carry if Bench Pokemon
+; in register a was already chosen.
+.CheckIfChosenAlready: ; 2e6af (b:66af)
+ inc a
+ ld c, a
+ ldh a, [hCurSelectionItem]
+ ld b, a
+ ld hl, hTempList
+ inc b
+ jr .next_check
+.check_chosen
+ ld a, [hli]
+ cp c
+ scf
+ ret z ; return if chosen already
+.next_check
+ dec b
+ jr nz, .check_chosen
+ or a
+ ret
+; 0x2e6c3
+
+Gigashock_AISelectEffect: ; 2e6c3 (b:66c3)
+; if Bench has 3 Pokemon or less, no need for selection,
+; since AI will choose them all.
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp MAX_PLAY_AREA_POKEMON - 1
+ jr nc, .start_selection
+
+; select them all
+ ld hl, hTempList
+ ld b, PLAY_AREA_ARENA
+ jr .next_bench
+.select_bench
+ ld [hl], b
+ inc hl
+.next_bench
+ inc b
+ dec a
+ jr nz, .select_bench
+ ld [hl], $ff ; terminating byte
+ ret
+
+.start_selection
+; has more than 3 Bench cards,proceed to sort them
+; by lowest remaining HP to highest, and pick first 3.
+ call SwapTurn
+ dec a
+ ld c, a
+ ld b, PLAY_AREA_BENCH_1
+
+; first select all of the Bench Pokemon and write to list
+ ld hl, hTempList
+.loop_all
+ ld [hl], b
+ inc hl
+ inc b
+ dec c
+ jr nz, .loop_all
+ ld [hl], $00 ; end list with $00
+
+; then check each of the Bench Pokemon HP
+; sort them from lowest remaining HP to highest.
+ ld de, hTempList
+.loop_outer
+ ld a, [de]
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ ld c, a
+ ld l, e
+ ld h, d
+ inc hl
+
+.loop_inner
+ ld a, [hli]
+ or a
+ jr z, .next ; reaching $00 means it's end of list
+
+ push hl
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ pop hl
+ cp c
+ jr c, .loop_inner
+ ; a Bench Pokemon was found with less HP
+ ld c, a ; store its HP
+
+; switch the two
+ dec hl
+ ld b, [hl]
+ ld a, [de]
+ ld [hli], a
+ ld a, b
+ ld [de], a
+ jr .loop_inner
+
+.next
+ inc de
+ ld a, [de]
+ or a
+ jr nz, .loop_outer
+
+; done
+ ld a, $ff ; terminating byte
+ ldh [hTempList + 3], a
+ call SwapTurn
+ ret
+; 0x2e71f
+
+Gigashock_BenchDamageEffect: ; 2e71f (b:671f)
+ call SwapTurn
+ ld hl, hTempList
+.loop_selection
+ ld a, [hli]
+ cp $ff
+ jr z, .done
+ push hl
+ ld b, a
+ ld de, 10
+ call DealDamageToPlayAreaPokemon_RegularAnim
+ pop hl
+ jr .loop_selection
+.done
+ call SwapTurn
+ ret
+; 0x2e739
+
+Magneton1SelfdestructEffect: ; 2e739 (b:6739)
+ ld a, 80
+ call DealRecoilDamageToSelf
+
+; own bench
+ ld a, $01
+ ld [wIsDamageToSelf], a
+ ld a, 20
+ call DealDamageToAllBenchedPokemon
+
+; opponent's bench
+ call SwapTurn
+ xor a
+ ld [wIsDamageToSelf], a
+ ld a, 20
+ call DealDamageToAllBenchedPokemon
+ call SwapTurn
+ ret
+; 0x2e758
+
+MagnetonSonicboom_UnaffectedByColorEffect: ; 2e758 (b:6758)
+ ld hl, wDamage + 1
+ set UNAFFECTED_BY_WEAKNESS_RESISTANCE_F, [hl]
+ ret
+; 0x2e75e
+
+MagnetonSonicboom_NullEffect: ; 2e75e (b:675e)
+ ret
+; 0x2e75f
+
+Magneton2SelfdestructEffect: ; 2e75f (b:675f)
+ ld a, 100
+ call DealRecoilDamageToSelf
+
+; own bench
+ ld a, $01
+ ld [wIsDamageToSelf], a
+ ld a, 20
+ call DealDamageToAllBenchedPokemon
+
+; opponent's bench
+ call SwapTurn
+ xor a
+ ld [wIsDamageToSelf], a
+ ld a, 20
+ call DealDamageToAllBenchedPokemon
+ call SwapTurn
+ ret
+; 0x2e77e
+
+PealOfThunder_InitialEffect: ; 2e77e (b:677e)
+ scf
+ ret
+; 0x2e780
+
+PealOfThunder_RandomlyDamageEffect: ; 2e780 (b:6780)
+ call ExchangeRNG
+ ld de, 30 ; damage to inflict
+ call RandomlyDamagePlayAreaPokemon
+ bank1call Func_6e49
+ ret
+; 0x2e78d
+
+; randomly damages a Pokemon in play, except
+; card that is in [hTempPlayAreaLocation_ff9d].
+; plays thunder animation when Play Area is shown.
+; input:
+; de = amount of damage to deal
+RandomlyDamagePlayAreaPokemon: ; 2e78d (b:678d)
+ xor a
+ ld [wNoDamageOrEffect], a
+
+; choose randomly which Play Area to attack
+ call UpdateRNGSources
+ and 1
+ jr nz, .opp_play_area
+
+; own Play Area
+ ld a, $01
+ ld [wIsDamageToSelf], a
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ call Random
+ ld b, a
+ ; can't select Zapdos
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ cp b
+ jr z, RandomlyDamagePlayAreaPokemon ; re-roll Pokemon to attack
+
+.damage
+ ld a, $82
+ ld [wLoadedMoveAnimation], a
+ call DealDamageToPlayAreaPokemon
+ ret
+
+.opp_play_area
+ xor a
+ ld [wIsDamageToSelf], a
+ call SwapTurn
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ call Random
+ ld b, a
+ call .damage
+ call SwapTurn
+ ret
+; 0x2e7cb
+
+BigThunderEffect: ; 2e7cb (b:67cb)
+ call ExchangeRNG
+ ld de, 70 ; damage to inflict
+ call RandomlyDamagePlayAreaPokemon
+ ret
+; 0x2e7d5
+
+MagneticStormEffect: ; 2e7d5 (b:67d5)
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+
+; writes in wDuelTempList all deck indices
+; of Energy cards attached to Pokemon
+; in the Turn Duelist's Play Area.
+ ld de, wDuelTempList
+ ld c, 0
+.loop_card_locations
+ ld a, [hl]
+ and CARD_LOCATION_PLAY_AREA
+ jr z, .next_card_location
+
+; is a card that is in the Play Area
+ push hl
+ push de
+ push bc
+ ld a, l
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ pop bc
+ pop de
+ pop hl
+ and TYPE_ENERGY
+ jr z, .next_card_location
+; is an Energy card attached to Pokemon in Play Area
+ ld a, l
+ ld [de], a
+ inc de
+ inc c
+.next_card_location
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_card_locations
+ ld a, $ff ; terminating byte
+ ld [de], a
+
+; divide number of energy cards
+; by number of Pokemon in Play Area
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld b, a
+ ld a, c
+ ld c, -1
+.loop_division
+ inc c
+ sub b
+ jr nc, .loop_division
+ ; c = floor(a / b)
+
+; evenly divides the Energy cards randomly
+; to every Pokemon in the Play Area.
+ push bc
+ ld hl, wDuelTempList
+ call CountCardsInDuelTempList
+ call ShuffleCards
+ ld d, c
+ ld e, PLAY_AREA_ARENA
+.start_attach
+ ld c, d
+ inc c
+ jr .check_done
+.attach_energy
+ ld a, [hli]
+ push hl
+ push de
+ push bc
+ call AddCardToHand
+ call PutHandCardInPlayArea
+ pop bc
+ pop de
+ pop hl
+.check_done
+ dec c
+ jr nz, .attach_energy
+; go to next Pokemon in Play Area
+ inc e ; next in Play Area
+ dec b
+ jr nz, .start_attach
+ pop bc
+
+ push hl
+ ld hl, hTempList
+
+; fill hTempList with PLAY_AREA_* locations
+; that have Pokemon in them.
+ push hl
+ xor a
+.loop_init
+ ld [hli], a
+ inc a
+ cp b
+ jr nz, .loop_init
+ pop hl
+
+; shuffle them and distribute
+; the remaining cards in random order.
+ ld a, b
+ call ShuffleCards
+ pop hl
+ ld de, hTempList
+.next_random_pokemon
+ ld a, [hl]
+ cp $ff
+ jr z, .done
+ push hl
+ push de
+ ld a, [de]
+ ld e, a
+ ld a, [hl]
+ call AddCardToHand
+ call PutHandCardInPlayArea
+ pop de
+ pop hl
+ inc hl
+ inc de
+ jr .next_random_pokemon
+
+.done
+ bank1call DrawDuelMainScene
+ bank1call DrawDuelHUDs
+ ldtx hl, TheEnergyCardFromPlayAreaWasMovedText
+ call DrawWideTextBox_WaitForInput
+ xor a
+ call Func_2c10b
+ ret
+; 0x2e870
+
+ElectrodeSonicboom_UnaffectedByColorEffect: ; 2e870 (b:6870)
+ ld hl, wDamage + 1
+ set UNAFFECTED_BY_WEAKNESS_RESISTANCE_F, [hl]
+ ret
+; 0x2e876
+
+ElectrodeSonicboom_NullEffect: ; 2e876 (b:6876)
+ ret
+; 0x2e877
+
+; return carry if no cards in Deck
+EnergySpike_DeckCheck: ; 2e877 (b:6877)
+ call CheckIfDeckIsEmpty
+ ret
+; 0x2e87b
+
+EnergySpike_PlayerSelectEffect: ; 2e87b (b:687b)
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+
+; search cards in Deck
+ call CreateDeckCardList
+ ldtx hl, Choose1BasicEnergyCardFromDeckText
+ ldtx bc, BasicEnergyText
+ lb de, SEARCHEFFECT_BASIC_ENERGY, 0
+ call LookForCardsInDeck
+ ret c
+
+ bank1call Func_5591
+ ldtx hl, ChooseBasicEnergyCardText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+.select_card
+ bank1call DisplayCardList
+ jr c, .try_cancel
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ cp TYPE_ENERGY_DOUBLE_COLORLESS
+ jr nc, .select_card ; not a Basic Energy card
+ and TYPE_ENERGY
+ jr z, .select_card ; not a Basic Energy card
+ ; Energy card selected
+
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ call EmptyScreen
+ ldtx hl, ChoosePokemonToAttachEnergyCardText
+ call DrawWideTextBox_WaitForInput
+
+; choose a Pokemon in Play Area to attach card
+ bank1call HasAlivePokemonInPlayArea
+.loop_input
+ bank1call OpenPlayAreaScreenForSelection
+ jr c, .loop_input
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ret
+
+.play_sfx
+ call Func_3794
+ jr .select_card
+
+.try_cancel
+; Player tried exiting screen, if there are
+; any Basic Energy cards, Player is forced to select them.
+; otherwise, they can safely exit.
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop_deck
+ ld a, [hl]
+ cp CARD_LOCATION_DECK
+ jr nz, .next_card
+ ld a, l
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ and TYPE_ENERGY
+ jr z, .next_card
+ cp TYPE_ENERGY_DOUBLE_COLORLESS
+ jr c, .play_sfx
+.next_card
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_deck
+ ; can exit
+
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2e8f1
+
+EnergySpike_AISelectEffect: ; 2e8f1 (b:68f1)
+; AI doesn't select any card
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2e8f6
+
+EnergySpike_AttachEnergyEffect: ; 2e8f6 (b:68f6)
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ jr z, .done
+
+; add card to hand and attach it to the selected Pokemon
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ld e, a
+ ldh a, [hTemp_ffa0]
+ call PutHandCardInPlayArea
+ call IsPlayerTurn
+ jr c, .done
+
+; not Player, so show detail screen
+; and which Pokemon was chosen to attach Energy.
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld hl, wLoadedCard1Name
+ ld de, wTxRam2_b
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ ldh a, [hTemp_ffa0]
+ ldtx hl, AttachedEnergyToPokemonText
+ bank1call DisplayCardDetailScreen
+
+.done
+ call Func_2c0bd
+ ret
+; 0x2e930
+
+JolteonDoubleKick_AIEffect: ; 2e930 (b:6930)
+ ld a, 40 / 2
+ lb de, 0, 40
+ jp SetExpectedAIDamage
+; 0x2e938
+
+JolteonDoubleKick_MultiplierEffect: ; 2e938 (b:6938)
+ ld hl, 20
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 2
+ call TossCoinATimes_BankB
+ add a ; a = 2 * heads
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2e94e
+
+TailWagEffect: ; 2e94e (b:694e)
+ ldtx de, IfHeadsOpponentCannotAttackText
+ call TossCoin_BankB
+ jp nc, SetWasUnsuccessful
+ ld a, $46
+ ld [wLoadedMoveAnimation], a
+ ld a, SUBSTATUS2_TAIL_WAG
+ call ApplySubstatus2ToDefendingCard
+ ret
+; 0x2e962
+
+EeveeQuickAttack_AIEffect: ; 2e962 (b:5962)
+ ld a, (10 + 30) / 2
+ lb de, 10, 30
+ jp SetExpectedAIDamage
+; 0x2e96a
+
+EeveeQuickAttack_DamageBoostEffect: ; 2e96a (b:596a)
+ ld hl, 20
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsPlusDamageText
+ call TossCoin_BankB
+ ret nc ; return if tails
+ ld a, 20
+ call AddToDamage
+ ret
+; 0x2e97d
+
+SpearowMirrorMove_AIEffect: ; 2e97d (b:697d)
+ jr MirrorMoveEffects.AIEffect
+; 0x2e97f
+
+SpearowMirrorMove_InitialEffect1: ; 2e97f (b:697f)
+ jr MirrorMoveEffects.InitialEffect1
+; 0x2e981
+
+SpearowMirrorMove_InitialEffect2: ; 2e981 (b:6981)
+ jr MirrorMoveEffects.InitialEffect2
+; 0x2e983
+
+SpearowMirrorMove_PlayerSelection: ; 2e983 (b:6983)
+ jr MirrorMoveEffects.PlayerSelection
+; 0x2e985
+
+SpearowMirrorMove_AISelection: ; 2e985 (b:6985)
+ jr MirrorMoveEffects.AISelection
+; 0x2e987
+
+SpearowMirrorMove_BeforeDamage: ; 2e987 (b:6987)
+ jr MirrorMoveEffects.BeforeDamage
+; 0x2e989
+
+SpearowMirrorMove_AfterDamage: ; 2e989 (b:6989)
+ jp MirrorMoveEffects.AfterDamage
+; 0x2e98c
+
+; these are effect commands that Mirror Move uses
+; in order to mimic last turn's attack.
+; it covers all possible effect steps to perform its commands
+; (i.e. selection for Amnesia and Energy discarding attacks, etc)
+MirrorMoveEffects: ; 2e98c (b:698c)
+.AIEffect
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_DAMAGE
+ call GetTurnDuelistVariable
+ ld a, [hl]
+ ld [wAIMinDamage], a
+ ld [wAIMaxDamage], a
+ ret
+
+.InitialEffect1
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_DAMAGE
+ call GetTurnDuelistVariable
+ ld a, [hli]
+ or [hl]
+ inc hl
+ or [hl]
+ inc hl
+ ret nz ; return if has last turn damage
+ ld a, [hli]
+ or a
+ ret nz ; return if has last turn status
+ ; no attack received last turn
+ ldtx hl, YouDidNotReceiveAnAttackToMirrorMoveText
+ scf
+ ret
+
+.InitialEffect2
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_EFFECT
+ call GetTurnDuelistVariable
+ or a
+ ret z ; no effect
+ cp LAST_TURN_EFFECT_AMNESIA
+ jp z, PlayerPickAttackForAmnesia
+ or a
+ ret
+
+.PlayerSelection
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_EFFECT
+ call GetTurnDuelistVariable
+ or a
+ ret z ; no effect
+; handle Energy card discard effect
+ cp LAST_TURN_EFFECT_DISCARD_ENERGY
+ jp z, HandleEnergyDiscardEffectSelection
+ ret
+
+.AISelection
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_EFFECT
+ call GetTurnDuelistVariable
+ or a
+ ret z ; no effect
+ cp LAST_TURN_EFFECT_DISCARD_ENERGY
+ jr z, .discard_energy
+ cp LAST_TURN_EFFECT_AMNESIA
+ jr z, .pick_amnesia_attack
+ ret
+
+.discard_energy
+ call AIPickEnergyCardToDiscardFromDefendingPokemon
+ ldh [hTemp_ffa0], a
+ ret
+
+.pick_amnesia_attack
+ call AIPickAttackForAmnesia
+ ldh [hTemp_ffa0], a
+ ret
+
+.BeforeDamage
+; if was attacked with Amnesia, apply it to the selected attack
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_EFFECT
+ call GetTurnDuelistVariable
+ cp LAST_TURN_EFFECT_AMNESIA
+ jr z, .apply_amnesia
+
+; otherwise, check if there was last turn damage,
+; and write it to wDamage.
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_DAMAGE
+ call GetTurnDuelistVariable
+ ld de, wDamage
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hld]
+ ld [de], a
+ or [hl]
+ jr z, .no_damage
+ ld a, $01
+ ld [wLoadedMoveAnimation], a
+.no_damage
+ inc hl
+ inc hl ; DUELVARS_ARENA_CARD_LAST_TURN_STATUS
+; check if there was a status applied to Defending Pokemon
+; from the attack it used.
+ push hl
+ ld a, DUELVARS_ARENA_CARD_STATUS
+ call GetNonTurnDuelistVariable
+ ld e, l
+ ld d, h
+ pop hl
+ ld a, [hli]
+ or a
+ jr z, .no_status
+ push hl
+ push de
+ call .ExecuteStatusEffect
+ pop de
+ pop hl
+.no_status
+; hl is at DUELVARS_ARENA_CARD_LAST_TURN_SUBSTATUS2
+; apply substatus2 to self
+ ld e, DUELVARS_ARENA_CARD_SUBSTATUS2
+ ld a, [hli]
+ ld [de], a
+ ret
+
+.apply_amnesia
+ call ApplyAmnesiaToAttack
+ ret
+; 0x2ea28
+
+.AfterDamage: ; 2ea28 (b:6a28)
+ ld a, [wNoDamageOrEffect]
+ or a
+ ret nz ; is unaffected
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_EFFECT
+ call GetTurnDuelistVariable
+ cp LAST_TURN_EFFECT_DISCARD_ENERGY
+ jr nz, .change_weakness
+
+; execute Energy discard effect for card chosen
+ call SwapTurn
+ ldh a, [hTemp_ffa0]
+ call PutCardInDiscardPile
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_EFFECT
+ call GetTurnDuelistVariable
+ ld [hl], LAST_TURN_EFFECT_DISCARD_ENERGY
+ call SwapTurn
+
+.change_weakness
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_CHANGE_WEAK
+ call GetTurnDuelistVariable
+ ld a, [hl]
+ or a
+ ret z ; weakness wasn't changed last turn
+
+ push hl
+ call SwapTurn
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer2_FromDeckIndex
+ call SwapTurn
+ pop hl
+
+ ld a, [wLoadedCard2Weakness]
+ or a
+ ret z ; defending Pokemon has no weakness to change
+
+; apply same color weakness to Defending Pokemon
+ ld a, [hl]
+ push af
+ ld a, DUELVARS_ARENA_CARD_CHANGED_WEAKNESS
+ call GetNonTurnDuelistVariable
+ pop af
+ ld [hl], a
+
+; print message of weakness color change
+ ld c, -1
+.loop_color
+ inc c
+ rla
+ jr nc, .loop_color
+ ld a, c
+ call SwapTurn
+ push af
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ pop af
+ call LoadCardNameAndInputColor
+ ldtx hl, ChangedTheWeaknessOfPokemonToColorText
+ call DrawWideTextBox_PrintText
+ call SwapTurn
+ ret
+; 0x2ea8f
+
+.ExecuteStatusEffect: ; 2ea8f (b:6a8f)
+ ld c, a
+ and PSN_DBLPSN
+ jr z, .cnf_slp_prz
+ ld b, a
+ cp DOUBLE_POISONED
+ push bc
+ call z, DoublePoisonEffect
+ pop bc
+ ld a, b
+ cp POISONED
+ push bc
+ call z, PoisonEffect
+ pop bc
+.cnf_slp_prz
+ ld a, c
+ and CNF_SLP_PRZ
+ ret z
+ cp CONFUSED
+ jp z, ConfusionEffect
+ cp ASLEEP
+ jp z, SleepEffect
+ cp PARALYZED
+ jp z, ParalysisEffect
+ ret
+; 0x2eab8
+
+FearowAgilityEffect: ; 2eab8 (b:6ab8)
+ ldtx de, IfHeadsDoNotReceiveDamageOrEffectText
+ call TossCoin_BankB
+ ret nc
+ ld a, $52
+ ld [wLoadedMoveAnimation], a
+ ld a, SUBSTATUS1_AGILITY
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2eaca
+
+; return carry if cannot use Step In
+StepIn_BenchCheck: ; 2eaca (b:6aca)
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ldtx hl, CanOnlyBeUsedOnTheBenchText
+ or a
+ jr z, .set_carry
+
+ add DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ ldtx hl, OnlyOncePerTurnText
+ and USED_PKMN_POWER_THIS_TURN
+ jr nz, .set_carry
+
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ ret
+
+.set_carry
+ scf
+ ret
+; 0x2eae8
+
+StepIn_SwitchEffect: ; 2eae8 (b:6ae8)
+ ldh a, [hTemp_ffa0]
+ ld e, a
+ call SwapArenaWithBenchPokemon
+ ld a, DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ set USED_PKMN_POWER_THIS_TURN_F, [hl]
+ ret
+; 0x2eaf6
+
+Dragonite2Slam_AIEffect: ; 2eaf6 (b:6af6)
+ ld a, (40 * 2) / 2
+ lb de, 0, 80
+ jp SetExpectedAIDamage
+; 0x2eafe
+
+Dragonite2Slam_MultiplierEffect: ; 2eafe (b:6afe)
+ ld hl, 40
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 2
+ call TossCoinATimes_BankB
+ add a
+ add a
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2eb15
+
+ThickSkinnedEffect: ; 2eb15 (b:6b15)
+ scf
+ ret
+; 0x2eb17
+
+LeekSlap_AIEffect: ; 2eb17 (b:6b17)
+ ld a, 30 / 2
+ lb de, 0, 30
+ jp SetExpectedAIDamage
+; 0x2eb1f
+
+; return carry if already used attack in this duel
+LeekSlap_OncePerDuelCheck: ; 2eb1f (b:6b1f)
+; can only use attack if it was never used before this duel
+ ld a, DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ and USED_LEEK_SLAP_THIS_DUEL
+ ret z
+ ldtx hl, ThisAttackCannotBeUsedTwiceText
+ scf
+ ret
+; 0x2eb2c
+
+LeekSlap_SetUsedThisDuelFlag: ; 2eb2c (b:6b2c)
+ ld a, DUELVARS_ARENA_CARD_FLAGS
+ call GetTurnDuelistVariable
+ set USED_LEEK_SLAP_THIS_DUEL_F, [hl]
+ ret
+; 0x2eb34
+
+LeekSlap_NoDamage50PercentEffect: ; 2eb34 (b:6b34)
+ ldtx de, DamageCheckIfTailsNoDamageText
+ call TossCoin_BankB
+ ret c
+ xor a ; 0 damage
+ call SetDefiniteDamage
+ ret
+; 0x2eb40
+
+FetchEffect: ; 2eb40 (b:6b40)
+ ldtx hl, Draw1CardFromTheDeckText
+ call DrawWideTextBox_WaitForInput
+ bank1call DisplayDrawOneCardScreen
+ call DrawCardFromDeck
+ ret c ; return if deck is empty
+ call AddCardToHand
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld a, [wDuelistType]
+ cp DUELIST_TYPE_PLAYER
+ ret nz
+ ; show card on screen if it was Player
+ bank1call OpenCardPage_FromHand
+ ret
+; 0x2eb5d
+
+CometPunch_AIEffect: ; 2eb5d (b:6b5d)
+ ld a, (20 * 4) / 2
+ lb de, 0, 80
+ jp SetExpectedAIDamage
+; 0x2eb65
+
+CometPunch_MultiplierEffect: ; 2eb65 (b:6b65)
+ ld hl, 20
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 4
+ call TossCoinATimes_BankB
+ add a
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2eb7b
+
+TaurosStomp_AIEffect: ; 2eb7b (b:6b7b)
+ ld a, (20 + 30) / 2
+ lb de, 20, 30
+ jp SetExpectedAIDamage
+; 0x2eb83
+
+TaurosStomp_DamageBoostEffect: ; 2eb83 (b:6b83)
+ ld hl, 10
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsPlusDamageText
+ call TossCoin_BankB
+ ret nc ; tails
+ ld a, 10
+ call AddToDamage
+ ret
+; 0x2eb96
+
+Rampage_AIEffect: ; 2eb96 (b:6b96)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ call AddToDamage
+ jp SetMinMaxDamageSameAsDamage
+; 0x2eba1
+
+Rampage_Confusion50PercentEffect: ; 2eba1 (b:6ba1)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ call AddToDamage
+ ldtx de, IfTailsYourPokemonBecomesConfusedText
+ call TossCoin_BankB
+ ret c ; heads
+ call SwapTurn
+ call ConfusionEffect
+ call SwapTurn
+ ret
+; 0x2ebba
+
+FuryAttack_AIEffect: ; 2ebba (b:6bba)
+ ld a, (10 * 2) / 2
+ lb de, 0, 20
+ jp SetExpectedAIDamage
+; 0x2ebc2
+
+FuryAttack_MultiplierEffect: ; 2ebc2 (b:6bc2)
+ ld hl, 10
+ call LoadTxRam3
+ ld a, 2
+ ldtx de, DamageCheckIfHeadsXDamageText
+ call TossCoinATimes_BankB
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2ebd7
+
+RetreatAidEffect: ; 2ebd7 (b:6bd7)
+ scf
+ ret
+; 0x2ebd9
+
+DodrioRage_AIEffect: ; 2ebd9 (b:6bd9)
+ call DodrioRage_DamageBoostEffect
+ jp SetMinMaxDamageSameAsDamage
+; 0x2ebdf
+
+DodrioRage_DamageBoostEffect: ; 2ebdf (b:6bdf)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ call AddToDamage
+ ret
+; 0x2ebe8
+
+PayDayEffect: ; 2ebe8 (b:6be8)
+ ldtx de, IfHeadsDraw1CardFromDeckText
+ call TossCoin_BankB
+ ret nc ; tails
+ ldtx hl, Draw1CardFromTheDeckText
+ call DrawWideTextBox_WaitForInput
+ bank1call DisplayDrawOneCardScreen
+ call DrawCardFromDeck
+ ret c ; empty deck
+ call AddCardToHand
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld a, [wDuelistType]
+ cp DUELIST_TYPE_PLAYER
+ ret nz
+ ; show card on screen if it was Player
+ bank1call OpenCardPage_FromHand
+ ret
+; 0x2ec0c
+
+DragonairSlam_AIEffect: ; 2ec0c (b:6c0c)
+ ld a, (30 * 2) / 2
+ lb de, 0, 60
+ jp SetExpectedAIDamage
+; 0x2ec14
+
+DragonairSlam_MultiplierEffect: ; 2ec14 (b:6c14)
+ ld hl, 30
+ call LoadTxRam3
+ ld a, 2
+ ldtx de, DamageCheckIfHeadsXDamageText
+ call TossCoinATimes_BankB
+ ld e, a
+ add a
+ add e
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2ec2c
+
+DragonairHyperBeam_PlayerSelectEffect: ; 2ec2c (b:6c2c)
+ jp HandleEnergyDiscardEffectSelection
+; 0x2ec2f
+
+DragonairHyperBeam_AISelectEffect: ; 2ec2f (b:6c2f)
+ call AIPickEnergyCardToDiscardFromDefendingPokemon
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2ec35
+
+DragonairHyperBeam_DiscardEffect: ; 2ec35 (b:6c35)
+ call HandleNoDamageOrEffect
+ ret c ; is unaffected
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ ret z ; no energy card chosen
+ call SwapTurn
+ call PutCardInDiscardPile
+ ld a, DUELVARS_ARENA_CARD_LAST_TURN_EFFECT
+ call GetTurnDuelistVariable
+ ld [hl], LAST_TURN_EFFECT_DISCARD_ENERGY
+ call SwapTurn
+ ret
+; 0x2ec4f
+
+; handles screen for selecting an Energy card to discard
+; that is attached to Defending Pokemon,
+; and store the Player selection in [hTemp_ffa0].
+HandleEnergyDiscardEffectSelection: ; 2ec4f (b:6c4f)
+ call SwapTurn
+ xor a ; PLAY_AREA_ARENA
+ call CreateArenaOrBenchEnergyCardList
+ jr c, .no_energy
+ ldtx hl, ChooseDiscardEnergyCardFromOpponentText
+ call DrawWideTextBox_WaitForInput
+ xor a ; PLAY_AREA_ARENA
+ bank1call DisplayEnergyDiscardScreen
+
+.loop_input
+ bank1call HandleEnergyDiscardMenuInput
+ jr c, .loop_input
+
+ call SwapTurn
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a ; store selected card to discard
+ ret
+
+.no_energy
+ call SwapTurn
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2ec77
+
+; return carry if Defending Pokemon has no attacks
+ClefableMetronome_CheckAttacks: ; 2ec77 (b:6c77)
+ call CheckIfDefendingPokemonHasAnyAttack
+ ldtx hl, NoAttackMayBeChoosenText
+ ret
+; 0x2ec7e
+
+ClefableMetronome_AISelectEffect: ; 2ec7e (b:6c7e)
+ call HandleAIMetronomeEffect
+ ret
+; 0x2ec82
+
+ClefableMetronome_UseAttackEffect: ; 2ec82 (b:6c82)
+ ld a, 1 ; energy cost of this attack
+ call HandlePlayerMetronomeEffect
+ ret
+; 0x2ec88
+
+ClefableMinimizeEffect: ; 2ec88 (b:6c88)
+ ld a, SUBSTATUS1_REDUCE_BY_20
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2ec8e
+
+HurricaneEffect: ; 2ec8e (b:6c8e)
+ call HandleNoDamageOrEffect
+ ret c ; is unaffected
+
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ or a
+ ret z ; return if Pokemon was KO'd
+
+; look at all the card locations and put all cards
+; that are in the Arena in the hand.
+ call SwapTurn
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop_locations
+ ld a, [hl]
+ cp CARD_LOCATION_ARENA
+ jr nz, .next_card
+ ; card in Arena found, put in hand
+ ld a, l
+ call AddCardToHand
+.next_card
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_locations
+
+; empty the Arena card slot
+ ld l, DUELVARS_ARENA_CARD
+ ld a, [hl]
+ ld [hl], $ff
+ ld l, DUELVARS_ARENA_CARD_HP
+ ld [hl], 0
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld hl, wLoadedCard1Name
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call LoadTxRam2
+ ldtx hl, PokemonAndAllAttachedCardsReturnedToHandText
+ call DrawWideTextBox_WaitForInput
+ xor a
+ ld [wDuelDisplayedScreen], a
+ call SwapTurn
+ ret
+; 0x2ecd3
+
+PidgeottoWhirlwind_SelectEffect: ; 2ecd3 (b:6cd3)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp 2
+ jr nc, .switch
+ ; no Bench Pokemon
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ret
+.switch
+ call DuelistSelectForcedSwitch
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2ece9
+
+PidgeottoWhirlwind_SwitchEffect: ; 2ece9 (b:6ce9)
+ ldh a, [hTemp_ffa0]
+ call HandleSwitchDefendingPokemonEffect
+ ret
+; 0x2ecef
+
+PidgeottoMirrorMove_AIEffect: ; 2ecef (b:6cef)
+ jp MirrorMoveEffects.AIEffect
+; 0x2ecf2
+
+PidgeottoMirrorMove_InitialEffect1: ; 2ecf2 (b:6cf2)
+ jp MirrorMoveEffects.InitialEffect1
+; 0x2ecf5
+
+PidgeottoMirrorMove_InitialEffect2: ; 2ecf5 (b:6cf5)
+ jp MirrorMoveEffects.InitialEffect2
+; 0x2ecf8
+
+PidgeottoMirrorMove_PlayerSelection: ; 2ecf8 (b:6cf8)
+ jp MirrorMoveEffects.PlayerSelection
+; 0x2ecfb
+
+PidgeottoMirrorMove_AISelection: ; 2ecfb (b:6cfb)
+ jp MirrorMoveEffects.AISelection
+; 0x2ecfe
+
+PidgeottoMirrorMove_BeforeDamage: ; 2ecfe (b:6cfe)
+ jp MirrorMoveEffects.BeforeDamage
+; 0x2ed01
+
+PidgeottoMirrorMove_AfterDamage: ; 2ed01 (b:6d01)
+ jp MirrorMoveEffects.AfterDamage
+; 0x2ed04
+
+SingEffect: ; 2ed04 (b:6d04)
+ call Sleep50PercentEffect
+ call nc, SetNoEffectFromStatus
+ ret
+; 0x2ed0b
+
+; return carry if Defending Pokemon has no attacks
+ClefairyMetronome_CheckAttacks: ; 2ed0b (b:6d0b)
+ call CheckIfDefendingPokemonHasAnyAttack
+ ldtx hl, NoAttackMayBeChoosenText
+ ret
+; 0x2ed12
+
+ClefairyMetronome_AISelectEffect: ; 2ed12 (b:6d12)
+ call HandleAIMetronomeEffect
+ ret
+; 0x2ed16
+
+ClefairyMetronome_UseAttackEffect: ; 2ed16 (b:6d16)
+ ld a, 3 ; energy cost of this attack
+; fallthrough
+
+; handles Metronome selection, and validates
+; whether it can use the selected attack.
+; if unsuccessful, returns carry.
+; input:
+; a = amount of colorless energy needed for Metronome
+HandlePlayerMetronomeEffect: ; 2ed18 (b:6d18)
+ ld [wMetronomeEnergyCost], a
+ ldtx hl, ChooseOppAttackToBeUsedWithMetronomeText
+ call DrawWideTextBox_WaitForInput
+
+ call HandleDefendingPokemonAttackSelection
+ ret c ; return if operation cancelled
+
+; store this attack as selected attack to use
+ ld hl, wMetronomeSelectedAttack
+ ld [hl], d
+ inc hl
+ ld [hl], e
+
+; compare selected attack's name with
+; the attack that is loaded, which is Metronome.
+; if equal, then cannot select it.
+; (i.e. cannot use Metronome with Metronome.)
+ ld hl, wLoadedMoveName
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ push hl
+ call SwapTurn
+ call CopyMoveDataAndDamage_FromDeckIndex
+ call SwapTurn
+ pop de
+ ld hl, wLoadedMoveName
+ ld a, e
+ cp [hl]
+ jr nz, .try_use
+ inc hl
+ ld a, d
+ cp [hl]
+ jr nz, .try_use
+ ; cannot select Metronome
+ ldtx hl, UnableToSelectText
+.failed
+ call DrawWideTextBox_WaitForInput
+.set_carry
+ scf
+ ret
+
+.try_use
+; run the attack checks to determine
+; whether it can be used.
+ ld a, EFFECTCMDTYPE_INITIAL_EFFECT_1
+ call TryExecuteEffectCommandFunction
+ jr c, .failed
+ ld a, EFFECTCMDTYPE_INITIAL_EFFECT_2
+ call TryExecuteEffectCommandFunction
+ jr c, .set_carry
+ ; successful
+
+; send data to link opponent
+ bank1call SendAttackDataToLinkOpponent
+ ld a, OPPACTION_USE_METRONOME_ATTACK
+ call SetOppAction_SerialSendDuelData
+ ld hl, wMetronomeSelectedAttack
+ ld d, [hl]
+ inc hl
+ ld e, [hl]
+ ld a, [wMetronomeEnergyCost]
+ ld c, a
+ call SerialSend8Bytes
+
+ ldh a, [hTempCardIndex_ff9f]
+ ld [wPlayerAttackingCardIndex], a
+ ld a, [wSelectedAttack]
+ ld [wPlayerAttackingMoveIndex], a
+ ld a, [wTempCardID_ccc2]
+ ld [wPlayerAttackingCardID], a
+ or a
+ ret
+; 0x2ed86
+
+; does nothing for AI.
+HandleAIMetronomeEffect: ; 2ed86 (b:6d86)
+ ret
+; 0x2ed87
+
+DoTheWaveEffect: ; 2ed87 (b:6d87)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ dec a ; don't count arena card
+ call ATimes10
+ call AddToDamage
+ ret
+; 0x2ed94
+
+; return carry if no damage counters
+FirstAid_DamageCheck: ; 2ed94 (b:6d94)
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ ldtx hl, NoDamageCountersText
+ cp 10
+ ret
+; 0x2ed9f
+
+FirstAid_HealEffect: ; 2ed9f (b:6d9f)
+ lb de, 0, 10
+ call ApplyAndAnimateHPRecovery
+ ret
+; 0x2eda6
+
+JigglypuffDoubleEdgeEffect: ; 2eda6 (b:6da6)
+ ld a, 20
+ call DealRecoilDamageToSelf
+ ret
+; 0x2edac
+
+PounceEffect: ; 2edac (b:6dac)
+ ld a, SUBSTATUS2_POUNCE
+ call ApplySubstatus2ToDefendingCard
+ ret
+; 0x2edb2
+
+LickitungSupersonicEffect: ; 2edb2 (b:6db2)
+ call Confusion50PercentEffect
+ call nc, SetNoEffectFromStatus
+ ret
+; 0x2edb9
+
+PidgeyWhirlwind_SelectEffect: ; 2edb9 (b:6db9)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ cp 2
+ jr nc, .switch
+ ; no Bench Pokemon
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ ret
+.switch
+ call DuelistSelectForcedSwitch
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2edcf
+
+PidgeyWhirlwind_SwitchEffect: ; 2edcf (b:6dcf)
+ ldh a, [hTemp_ffa0]
+ call HandleSwitchDefendingPokemonEffect
+ ret
+; 0x2edd5
+
+; return carry if Defending card has no weakness
+Conversion1_WeaknessCheck: ; 2edd5 (b:6dd5)
+ call SwapTurn
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer2_FromDeckIndex
+ call SwapTurn
+ ld a, [wLoadedCard2Weakness]
+ or a
+ ret nz
+ ldtx hl, NoWeaknessText
+ scf
+ ret
+; 0x2eded
+
+Conversion1_PlayerSelectEffect: ; 2eded (b:6ded)
+ ldtx hl, ChooseWeaknessYouWishToChangeText
+ xor a ; PLAY_AREA_ARENA
+ call HandleColorChangeScreen
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2edf7
+
+Conversion1_AISelectEffect: ; 2edf7 (b:6df7)
+ call AISelectConversionColor
+ ret
+; 0x2edfb
+
+Conversion1_ChangeWeaknessEffect: ; 2edfb (b:6dfb)
+ call HandleNoDamageOrEffect
+ ret c ; is unaffected
+
+; apply changed weakness
+ ld a, DUELVARS_ARENA_CARD_CHANGED_WEAKNESS
+ call GetNonTurnDuelistVariable
+ ldh a, [hTemp_ffa0]
+ call TranslateColorToWR
+ ld [hl], a
+ ld l, DUELVARS_ARENA_CARD_LAST_TURN_CHANGE_WEAK
+ ld [hl], a
+
+; print text box
+ call SwapTurn
+ ldtx hl, ChangedTheWeaknessOfPokemonToColorText
+ call PrintArenaCardNameAndColorText
+ call SwapTurn
+
+; apply substatus
+ ld a, SUBSTATUS2_CONVERSION2
+ call ApplySubstatus2ToDefendingCard
+ ret
+; 0x2ee1f
+
+; returns carry if Active Pokemon has no Resistance.
+Conversion2_ResistanceCheck: ; 2ee1f (b:6e1f)
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Resistance]
+ or a
+ ret nz
+ ldtx hl, NoResistanceText
+ scf
+ ret
+; 0x2ee31
+
+Conversion2_PlayerSelectEffect: ; 2ee31 (b:6e31)
+ ldtx hl, ChooseResistanceYouWishToChangeText
+ ld a, $80
+ call HandleColorChangeScreen
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2ee3c
+
+Conversion2_AISelectEffect: ; 2ee3c (b:6e3c)
+; AI will choose Defending Pokemon's color
+; unless it is colorless.
+ call SwapTurn
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ call SwapTurn
+ ld a, [wLoadedCard1Type]
+ cp COLORLESS
+ jr z, .is_colorless
+ ldh [hTemp_ffa0], a
+ ret
+
+.is_colorless
+ call SwapTurn
+ call AISelectConversionColor
+ call SwapTurn
+ ret
+; 0x2ee5e
+
+Conversion2_ChangeResistanceEffect: ; 2ee5e (b:6e5e)
+; apply changed resistance
+ ld a, DUELVARS_ARENA_CARD_CHANGED_RESISTANCE
+ call GetTurnDuelistVariable
+ ldh a, [hTemp_ffa0]
+ call TranslateColorToWR
+ ld [hl], a
+ ldtx hl, ChangedTheResistanceOfPokemonToColorText
+; fallthrough
+
+; prints text that requires card name and color,
+; with the card name of the Turn Duelist's Arena Pokemon
+; and color in [hTemp_ffa0].
+; input:
+; hl = text to print
+PrintArenaCardNameAndColorText: ; 2ee6c (b:6e6c)
+ push hl
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ldh a, [hTemp_ffa0]
+ call LoadCardNameAndInputColor
+ pop hl
+ call DrawWideTextBox_PrintText
+ ret
+; 0x2ee7f
+
+; handles AI logic for selecting a new color
+; for weakness/resistance.
+; - if within the context of Conversion1, looks
+; in own Bench for a non-colorless card that can attack.
+; - if within the context of Conversion2, looks
+; in Player's Bench for a non-colorless card that can attack.
+AISelectConversionColor: ; 2ee7f (b:6e7f)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+ jr .next_pkmn_atk
+
+; look for a non-colorless Bench Pokemon
+; that has enough energy to use an attack.
+.loop_atk
+ push de
+ call GetPlayAreaCardAttachedEnergies
+ ld a, e
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ ld d, a
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld a, [wLoadedCard1Type]
+ cp COLORLESS
+ jr z, .skip_pkmn_atk ; skip colorless Pokemon
+ ld e, FIRST_ATTACK_OR_PKMN_POWER
+ bank1call _CheckIfEnoughEnergiesToMove
+ jr nc, .found
+ ld e, SECOND_ATTACK
+ bank1call _CheckIfEnoughEnergiesToMove
+ jr nc, .found
+.skip_pkmn_atk
+ pop de
+.next_pkmn_atk
+ inc e
+ dec d
+ jr nz, .loop_atk
+
+; none found in Bench.
+; next, look for a non-colorless Bench Pokemon
+; that has any Energy cards attached.
+ ld d, e ; number of Play Area Pokemon
+ ld e, PLAY_AREA_ARENA
+ jr .next_pkmn_energy
+
+.loop_energy
+ push de
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wTotalAttachedEnergies]
+ or a
+ jr z, .skip_pkmn_energy
+ ld a, e
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ ld d, a
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld a, [wLoadedCard1Type]
+ cp COLORLESS
+ jr nz, .found
+.skip_pkmn_energy
+ pop de
+.next_pkmn_energy
+ inc e
+ dec d
+ jr nz, .loop_energy
+
+; otherwise, just select a random energy.
+ ld a, NUM_COLORED_TYPES
+ call Random
+ ldh [hTemp_ffa0], a
+ ret
+
+.found
+ pop de
+ ld a, [wLoadedCard1Type]
+ and TYPE_PKMN
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2eee7
+
+ScrunchEffect: ; 2eee7 (b:6ee7)
+ ldtx de, IfHeadsNoDamageNextTurnText
+ call TossCoin_BankB
+ jp nc, SetWasUnsuccessful
+ ld a, $6b
+ ld [wLoadedMoveAnimation], a
+ ld a, SUBSTATUS1_NO_DAMAGE_17
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2eefb
+
+ChanseyDoubleEdgeEffect: ; 2eefb (b:6efb)
+ ld a, 80
+ call DealRecoilDamageToSelf
+ ret
+; 0x2ef01
+
+SuperFang_AIEffect: ; 2ef01 (b:6f01)
+ call SuperFang_HalfHPEffect
+ jp SetMinMaxDamageSameAsDamage
+; 0x2ef07
+
+SuperFang_HalfHPEffect: ; 2ef07 (b:6f07)
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ srl a
+ bit 0, a
+ jr z, .rounded
+ ; round up
+ add 5
+.rounded
+ call SetDefiniteDamage
+ ret
+; 0x2ef18
+
+; return carry if no Pokemon in Bench
+TrainerCardAsPokemon_BenchCheck: ; 2ef18 (b:6f18)
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, EffectNoPokemonOnTheBenchText
+ cp 2
+ ret
+; 0x2ef27
+
+TrainerCardAsPokemon_PlayerSelectSwitch: ; 2ef27 (b:6f27)
+ ldh a, [hTemp_ffa0]
+ or a
+ ret nz ; no need to switch if it's not Arena card
+
+ ldtx hl, SelectPokemonToPlaceInTheArenaText
+ call DrawWideTextBox_WaitForInput
+ bank1call HasAlivePokemonInBench
+ bank1call OpenPlayAreaScreenForSelection
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ret
+; 0x2ef3c
+
+TrainerCardAsPokemon_DiscardEffect: ; 2ef3c (b:6f3c)
+ ldh a, [hTemp_ffa0]
+ ld e, a
+ call MovePlayAreaCardToDiscardPile
+ ldh a, [hTemp_ffa0]
+ or a
+ jr nz, .shift_cards
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ld e, a
+ call SwapArenaWithBenchPokemon
+.shift_cards
+ call ShiftAllPokemonToFirstPlayAreaSlots
+ ret
+; 0x2ef51
+
+HealingWind_InitialEffect: ; 2ef51 (b:6f51)
+ scf
+ ret
+; 0x2ef53
+
+HealingWind_PlayAreaHealEffect: ; 2ef53 (b:6f53)
+; play initial animation
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld b, a
+ ld c, $00
+ ldh a, [hWhoseTurn]
+ ld h, a
+ bank1call PlayMoveAnimation
+ bank1call WaitMoveAnimation
+ ld a, $86
+ ld [wLoadedMoveAnimation], a
+
+
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+.loop_play_area
+ push de
+ ld a, e
+ ldh [hTempPlayAreaLocation_ff9d], a
+ call GetCardDamageAndMaxHP
+ or a
+ jr z, .next_pkmn ; skip if no damage
+
+; if less than 20 damage, cap recovery at 10 damage
+ ld de, 20
+ cp e
+ jr nc, .heal
+ ld e, a
+
+.heal
+; add HP to this card
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ add e
+ ld [hl], a
+
+; play heal animation
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld b, a
+ ld c, $01
+ ldh a, [hWhoseTurn]
+ ld h, a
+ bank1call PlayMoveAnimation
+ bank1call WaitMoveAnimation
+.next_pkmn
+ pop de
+ inc e
+ dec d
+ jr nz, .loop_play_area
+
+ ret
+; 0x2ef9c
+
+Dragonite1Slam_AIEffect: ; 2ef9c (b:6f9c)
+ ld a, (30 * 2) / 2
+ lb de, 0, 60
+ jp SetExpectedAIDamage
+; 0x2efa4
+
+Dragonite1Slam_MultiplierEffect: ; 2efa4 (b:6fa4)
+ ld hl, 30
+ call LoadTxRam3
+ ldtx de, DamageCheckIfHeadsXDamageText
+ ld a, 2
+ call TossCoinATimes_BankB
+ ld c, a
+ add a
+ add c
+ call ATimes10
+ call SetDefiniteDamage
+ ret
+; 0x2efbc
+
+ INCROM $2efbc, $2efe0
+
+CatPunchEffect: ; 2efe0 (b:6fe0)
+ call SwapTurn
+ call PickRandomPlayAreaCard
+ ld b, a
+ ld a, $83
+ ld [wLoadedMoveAnimation], a
+ ld de, 20
+ call DealDamageToPlayAreaPokemon
+ call SwapTurn
+ ret
+; 0x2eff6
+
+MorphEffect: ; 2eff6 (b:6ff6)
+ call ExchangeRNG
+ call .PickRandomBasicPokemonFromDeck
+ jr nc, .successful
+ ldtx hl, AttackUnsuccessfulText
+ call DrawWideTextBox_WaitForInput
+ ret
+
+.successful
+ ld a, DUELVARS_ARENA_CARD_STAGE
+ call GetTurnDuelistVariable
+ or a
+ jr z, .skip_discard_stage_below
+
+; if this is a stage 1 Pokemon (in case it's used
+; by Clefable's Metronome attack) then first discard
+; the lower stage card.
+ push hl
+ xor a
+ ldh [hTempPlayAreaLocation_ff9d], a
+ bank1call GetCardOneStageBelow
+ ld a, d
+ call PutCardInDiscardPile
+ pop hl
+ ld [hl], BASIC
+
+.skip_discard_stage_below
+; overwrite card ID
+ ldh a, [hTempCardIndex_ff98]
+ call GetCardIDFromDeckIndex
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ ldh [hTempCardIndex_ff98], a
+ call _GetCardIDFromDeckIndex
+ ld [hl], e
+
+; overwrite HP to new card's maximum HP
+ ld e, PLAY_AREA_ARENA
+ call GetCardDamageAndMaxHP
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ ld [hl], c
+
+; clear changed color and status
+ ld l, DUELVARS_ARENA_CARD_CHANGED_TYPE
+ ld [hl], $00
+ call ClearAllStatusConditions
+
+; load both card's names for printing text
+ ld a, [wTempTurnDuelistCardID]
+ ld e, a
+ ld d, $00
+ call LoadCardDataToBuffer2_FromCardID
+ ld hl, wLoadedCard2Name
+ ld de, wTxRam2
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ inc de
+ ldh a, [hTempCardIndex_ff98]
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld hl, wLoadedCard2Name
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ ldtx hl, MetamorphsToText
+ call DrawWideTextBox_WaitForInput
+
+ xor a
+ ld [wDuelDisplayedScreen], a
+ ret
+; 0x2f06a
+
+; picks a random Pokemon in the Deck to morph.
+; needs to be a Basic Pokemon that doesn't have
+; the same ID as the Arena card.
+; returns carry if no Pokemon were found.
+.PickRandomBasicPokemonFromDeck ; 2f06a (b:706a)
+ call CreateDeckCardList
+ ret c ; empty deck
+ ld hl, wDuelTempList
+ call ShuffleCards
+.loop_deck
+ ld a, [hli]
+ ldh [hTempCardIndex_ff98], a
+ cp $ff
+ jr z, .set_carry
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ jr nc, .loop_deck ; skip non-Pokemon cards
+ ld a, [wLoadedCard2Stage]
+ or a
+ jr nz, .loop_deck ; skip non-Basic cards
+ ld a, [wLoadedCard2ID]
+ cp DUELVARS_ARENA_CARD
+ jr z, .loop_deck ; skip cards with same ID as Arena card
+ ldh a, [hTempCardIndex_ff98]
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x2f098
+
+; returns in a and [hTempCardIndex_ff98] the deck index
+; of random Basic Pokemon card in deck.
+; if none are found, return carry.
+PickRandomBasicCardFromDeck: ; 2f098 (b:7098)
+ call CreateDeckCardList
+ ret c ; return if empty deck
+ ld hl, wDuelTempList
+ call ShuffleCards
+.loop_deck
+ ld a, [hli]
+ ldh [hTempCardIndex_ff98], a
+ cp $ff
+ jr z, .set_carry
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ jr nc, .loop_deck ; skip if not Pokemon card
+ ld a, [wLoadedCard2Stage]
+ or a
+ jr nz, .loop_deck ; skip if not Basic stage
+ ldh a, [hTempCardIndex_ff98]
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x2f0bf
+
+SlicingWindEffect: ; 2f0bf (b:70bf)
+ call SwapTurn
+ call PickRandomPlayAreaCard
+ ld b, a
+ ld de, 30
+ call DealDamageToPlayAreaPokemon_RegularAnim
+ call SwapTurn
+ ret
+; 0x2f0d0
+
+Gale_LoadAnimation: ; 2f0d0 (b:70d0)
+ ld a, $87
+ ld [wLoadedMoveAnimation], a
+ ret
+; 0x2f0d6
+
+Gale_SwitchEffect: ; 2f0d6 (b:70d6)
+; if Defending card is unaffected by attack
+; jump directly to switching this card only.
+ call HandleNoDamageOrEffect
+ jr c, .SwitchWithRandomBenchPokemon
+
+; handle switching Defending card
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ or a
+ jr nz, .skip_destiny_bond
+ bank1call HandleDestinyBondSubstatus
+.skip_destiny_bond
+ call SwapTurn
+ call .SwitchWithRandomBenchPokemon
+ jr c, .skip_clear_damage
+; clear dealt damage because Pokemon was switched
+ xor a
+ ld hl, wDealtDamage
+ ld [hli], a
+ ld [hl], a
+.skip_clear_damage
+ call SwapTurn
+; fallthrough for attacking card switch
+
+.SwitchWithRandomBenchPokemon
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp 2
+ ret c ; return if no Bench Pokemon
+
+; get random Bench location and swap
+ dec a
+ call Random
+ inc a
+ ld e, a
+ call SwapArenaWithBenchPokemon
+
+ xor a
+ ld [wDuelDisplayedScreen], a
+ ret
+; 0x2f10d
+
+; return carry if Bench is full
+FriendshipSong_BenchCheck: ; 2f10d (b:710d)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, NoSpaceOnTheBenchText
+ cp MAX_PLAY_AREA_POKEMON
+ ccf
+ ret
+; 0x2f119
+
+FriendshipSong_AddToBench50PercentEffect: ; 2f119 (b:7119)
+ ldtx de, SuccessCheckIfHeadsAttackIsSuccessfulText
+ call TossCoin_BankB
+ jr c, .successful
+
+.none_came_text
+ ldtx hl, NoneCameText
+ call DrawWideTextBox_WaitForInput
+ ret
+
+.successful
+ call PickRandomBasicCardFromDeck
+ jr nc, .put_in_bench
+ ld a, $6a
+ call Func_2c12e
+ call .none_came_text
+ call Func_2c0bd
+ ret
+
+.put_in_bench
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ call PutHandPokemonCardInPlayArea
+ ld a, $6a
+ call Func_2c12e
+ ldh a, [hTempCardIndex_ff98]
+ ldtx hl, CameToTheBenchText
+ bank1call DisplayCardDetailScreen
+ call Func_2c0bd
+ ret
+; 0x2f153
+
+ExpandEffect: ; 2f153 (b:7153)
+ ld a, SUBSTATUS1_REDUCE_BY_10
+ call ApplySubstatus1ToDefendingCard
+ ret
+; 0x2f159
+
+; returns carry if either there are no damage counters
+; or no Energy cards attached in the Play Area.
+SuperPotion_DamageEnergyCheck: ; 2f159 (b:7159)
+ call CheckIfPlayAreaHasAnyDamage
+ ldtx hl, NoPokemonWithDamageCountersText
+ ret c ; no damage counters
+ call CheckIfThereAreAnyEnergyCardsAttached
+ ldtx hl, ThereIsNoEnergyCardAttachedText
+ ret
+; 0x2f167
+
+SuperPotion_PlayerSelectEffect: ; 2f167 (b:7167)
+ ldtx hl, ChoosePokemonToRemoveDamageCounterFromText
+ call DrawWideTextBox_WaitForInput
+.start
+ bank1call HasAlivePokemonInPlayArea
+.read_input
+ bank1call OpenPlayAreaScreenForSelection
+ ret c ; exit if B is pressed
+ ld e, a
+ call GetCardDamageAndMaxHP
+ or a
+ jr z, .read_input ; Pokemon has no damage?
+ ldh a, [hCurMenuItem]
+ ld e, a
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wTotalAttachedEnergies]
+ or a
+ jr nz, .got_pkmn
+ ; no energy cards attached
+ ldtx hl, NoEnergyCardsText
+ call DrawWideTextBox_WaitForInput
+ jr .start
+
+.got_pkmn
+; Pokemon has damage and Energy cards attached,
+; prompt the Player for Energy selection to discard.
+ ldh a, [hCurMenuItem]
+ bank1call CreateArenaOrBenchEnergyCardList
+ ldh a, [hCurMenuItem]
+ bank1call DisplayEnergyDiscardScreen
+ bank1call HandleEnergyDiscardMenuInput
+ ret c ; exit if B was pressed
+
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld e, a
+
+; cap the healing damage if
+; it would make it exceed max HP.
+ call GetCardDamageAndMaxHP
+ ld c, 40
+ cp 40
+ jr nc, .heal
+ ld c, a
+.heal
+ ld a, c
+ ldh [hPlayAreaEffectTarget], a
+ or a
+ ret
+; 0x2f1b5
+
+SuperPotion_HealEffect: ; 2f1b5 (b:71b5)
+ ldh a, [hTemp_ffa0]
+ call PutCardInDiscardPile
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ldh [hTempPlayAreaLocation_ff9d], a
+ ldh a, [hPlayAreaEffectTarget]
+ call HealPlayAreaCardHP
+ ret
+; 0x2f1c4
+
+; checks if there is at least one Energy card
+; attached to some card in the Turn Duelist's Play Area.
+; return no carry if one is found,
+; and returns carry set if none is found.
+CheckIfThereAreAnyEnergyCardsAttached: ; 2f1c4 (b:71c4)
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop_deck
+ ld a, [hl]
+ bit CARD_LOCATION_PLAY_AREA_F, a
+ jr z, .next_card ; skip if not in Play Area
+ ld a, l
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_TRAINER
+ jr z, .next_card ; skip if it's a Trainer card
+ cp TYPE_ENERGY
+ jr nc, .found
+.next_card
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_deck
+ scf
+ ret
+.found
+ or a
+ ret
+; 0x2f1e7
+
+; handles Player selection for Pokemon in Play Area,
+; then opens screen to choose one of the energy cards
+; attached to that selected Pokemon.
+; outputs the selection in:
+; [hTemp_ffa0] = play area location
+; [hTempPlayAreaLocation_ffa1] = index of energy card
+HandlePokemonAndEnergySelectionScreen: ; 2f1e7 (b:71e7)
+ bank1call HasAlivePokemonInPlayArea
+ bank1call OpenPlayAreaScreenForSelection
+ ret c ; exit if B is pressed
+ ld e, a
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wTotalAttachedEnergies]
+ or a
+ jr nz, .has_energy
+ ldtx hl, NoEnergyCardsText
+ call DrawWideTextBox_WaitForInput
+ jr HandlePokemonAndEnergySelectionScreen ; loop back to start
+
+.has_energy
+ ldh a, [hCurMenuItem]
+ bank1call CreateArenaOrBenchEnergyCardList
+ ldh a, [hCurMenuItem]
+ bank1call DisplayEnergyDiscardScreen
+ bank1call HandleEnergyDiscardMenuInput
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ret
+; 0x2f216
+
+ImakuniEffect: ; 2f216 (b:7216)
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld a, [wLoadedCard1ID]
+
+; cannot confuse Clefairy Doll and Mysterious Fossil
+ cp CLEFAIRY_DOLL
+ jr z, .failed
+ cp MYSTERIOUS_FOSSIL
+ jr z, .failed
+
+; cannot confuse Snorlax if its Pkmn Power is active
+ cp SNORLAX
+ jr nz, .success
+ xor a
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ jr c, .success
+ ; fallthrough if Thick Skinned is active
+
+.failed
+; play confusion animation and print failure text
+ ld a, $7f
+ call Func_2fea9
+ ldtx hl, ThereWasNoEffectText
+ call DrawWideTextBox_WaitForInput
+ ret
+
+.success
+; play confusion animation and confuse card
+ ld a, $7f
+ call Func_2fea9
+ ld a, DUELVARS_ARENA_CARD_STATUS
+ call GetTurnDuelistVariable
+ and PSN_DBLPSN
+ or CONFUSED
+ ld [hl], a
+ bank1call DrawDuelHUDs
+ ret
+; 0x2f252
+
+; returns carry if opponent has no energy cards attached
+EnergyRemoval_EnergyCheck: ; 2f252 (b:7252)
+ call SwapTurn
+ call CheckIfThereAreAnyEnergyCardsAttached
+ ldtx hl, NoEnergyAttachedToOpponentsActiveText
+ call SwapTurn
+ ret
+; 0x2f25f
+
+EnergyRemoval_PlayerSelection: ; 2f25f (b:725f)
+ ldtx hl, ChoosePokemonToRemoveEnergyFromText
+ call DrawWideTextBox_WaitForInput
+ call SwapTurn
+ call HandlePokemonAndEnergySelectionScreen
+ call SwapTurn
+ ret
+; 0x2f26f
+
+EnergyRemoval_AISelection: ; 2f26f (b:726f)
+ call AIPickEnergyCardToDiscardFromDefendingPokemon
+ ret
+; 0x2f273
+
+EnergyRemoval_DiscardEffect: ; 2f273 (b:7273)
+ call SwapTurn
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ call PutCardInDiscardPile
+ call SwapTurn
+ call IsPlayerTurn
+ ret c
+
+; show Player which Pokemon was affected
+ call SwapTurn
+ ldh a, [hTemp_ffa0]
+ call Func_2c10b
+ call SwapTurn
+ ret
+; 0x2f28e
+
+; return carry if no other card in hand to discard
+; or if there are no Basic Energy cards in Discard Pile.
+EnergyRetrieval_HandEnergyCheck: ; 2f28e (b:728e)
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ cp 2
+ ldtx hl, NotEnoughCardsInHandText
+ ret c ; return if doesn't have another card to discard
+ call CreateEnergyCardListFromDiscardPile_OnlyBasic
+ ldtx hl, ThereAreNoBasicEnergyCardsInDiscardPileText
+ ret
+; 0x2f2a0
+
+EnergyRetrieval_PlayerHandSelection: ; 2f2a0 (b:72a0)
+ ldtx hl, ChooseCardToDiscardFromHandText
+ call DrawWideTextBox_WaitForInput
+ call CreateHandCardList
+ ldh a, [hTempCardIndex_ff9f]
+ call RemoveCardFromDuelTempList
+ bank1call Func_5591
+ bank1call DisplayCardList
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTempList], a
+ ret
+; 0x2f2b9
+
+EnergyRetrieval_PlayerDiscardPileSelection: ; 2f2b9 (b:72b9)
+ ld a, 1 ; start at 1 due to card selected from hand
+ ldh [hCurSelectionItem], a
+ ldtx hl, Choose2BasicEnergyCardsFromDiscardPileText
+ call DrawWideTextBox_WaitForInput
+ call CreateEnergyCardListFromDiscardPile_OnlyBasic
+
+.select_card
+ bank1call InitAndDrawCardListScreenLayout
+ ldtx hl, PleaseSelectCardText
+ ldtx de, PlayerDiscardPileText
+ bank1call SetCardListHeaderText
+ bank1call DisplayCardList
+ jr nc, .selected
+ ; B was pressed
+ ld a, 2 + 1 ; includes the card selected from hand
+ call AskWhetherToQuitSelectingCards
+ jr c, .select_card ; player selected No
+ jr .done
+
+.selected
+ call GetNextPositionInTempList_TrainerEffects
+ ldh a, [hTempCardIndex_ff98]
+ ld [hl], a
+ call RemoveCardFromDuelTempList
+ jr c, .done
+ ldh a, [hCurSelectionItem]
+ cp 2 + 1 ; includes the card selected from hand
+ jr c, .select_card
+
+.done
+ call GetNextPositionInTempList_TrainerEffects
+ ld [hl], $ff ; terminating byte
+ or a
+ ret
+; 0x2f2f8
+
+EnergyRetrieval_DiscardAndAddToHandEffect: ; 2f2f8 (b:72f8)
+ ld hl, hTempList
+ ld a, [hli]
+ call RemoveCardFromHand
+ call PutCardInDiscardPile
+ ld de, wDuelTempList
+.loop
+ ld a, [hli]
+ ld [de], a
+ inc de
+ cp $ff
+ jr z, .done
+ call MoveDiscardPileCardToHand
+ call AddCardToHand
+ jr .loop
+.done
+ call IsPlayerTurn
+ ret c
+ bank1call Func_4b38
+ ret
+; 0x2f31c
+
+; return carry if no cards left in Deck.
+EnergySearch_DeckCheck: ; 2f31c (b:731c)
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ cp DECK_SIZE
+ ccf
+ ldtx hl, NoCardsLeftInTheDeckText
+ ret
+; 0x2f328
+
+EnergySearch_PlayerSelection: ; 2f328 (b:7328)
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ call CreateDeckCardList
+ ldtx hl, Choose1BasicEnergyCardFromDeckText
+ lb de, SEARCHEFFECT_BASIC_ENERGY, 0
+ ldtx bc, BasicEnergyText
+ call LookForCardsInDeck
+ ret c ; skip showing deck
+
+ bank1call Func_5591
+ ldtx hl, ChooseBasicEnergyCardText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+.read_input
+ bank1call DisplayCardList
+ jr c, .try_exit ; B pressed?
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ call CheckIfCardIsBasicEnergy
+ jr c, .play_sfx
+ or a
+ ret
+.play_sfx
+ call Func_3794
+ jr .read_input
+
+.try_exit
+; check if Player can exit without selecting anything
+ ld hl, wDuelTempList
+.next_card
+ ld a, [hli]
+ cp $ff
+ jr z, .exit
+ call CheckIfCardIsBasicEnergy
+ jr c, .next_card
+ jr .read_input ; no, has to select Energy card
+.exit
+ ld a, $ff
+ ldh [hTemp_ffa0], a
+ or a
+ ret
+; 0x2f372
+
+EnergySearch_AddToHandEffect: ; 2f372 (b:7372)
+ ldh a, [hTemp_ffa0]
+ cp $ff
+ jr z, .done
+; add to hand
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ call IsPlayerTurn
+ jr c, .done ; done if Player played card
+; display card in screen
+ ldh a, [hTemp_ffa0]
+ ldtx hl, WasPlacedInTheHandText
+ bank1call DisplayCardDetailScreen
+.done
+ call Func_2c0bd
+ ret
+
+; check if card index in a is a Basic Energy card.
+; returns carry in case it's not.
+CheckIfCardIsBasicEnergy: ; 2f38f (b:738f)
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ jr c, .not_basic_energy
+ cp TYPE_ENERGY_DOUBLE_COLORLESS
+ jr nc, .not_basic_energy
+; is basic energy
+ or a
+ ret
+.not_basic_energy
+ scf
+ ret
+; 0x2f3a1
+
+ProfessorOakEffect: ; 2f3a1 (b:73a1)
+; discard hand
+ call CreateHandCardList
+ call SortCardsInDuelTempListByID
+ ld hl, wDuelTempList
+.discard_loop
+ ld a, [hli]
+ cp $ff
+ jr z, .draw_cards
+ call RemoveCardFromHand
+ call PutCardInDiscardPile
+ jr .discard_loop
+
+.draw_cards
+ ld a, 7
+ bank1call DisplayDrawNCardsScreen
+ ld c, 7
+.draw_loop
+ call DrawCardFromDeck
+ jr c, .done
+ call AddCardToHand
+ dec c
+ jr nz, .draw_loop
+.done
+ ret
+; 0x2f3ca
+
+Potion_DamageCheck: ; 2f3ca (b:73ca)
+ call CheckIfPlayAreaHasAnyDamage
+ ldtx hl, NoPokemonWithDamageCountersText
+ ret
+; 0x2f3d1
+
+Potion_PlayerSelection: ; 2f3d1 (b:73d1)
+ bank1call HasAlivePokemonInPlayArea
+.read_input
+ bank1call OpenPlayAreaScreenForSelection
+ ret c ; exit is B was pressed
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ld e, a
+ call GetCardDamageAndMaxHP
+ or a
+ jr z, .read_input ; no damage, loop back to start
+; cap damage
+ ld c, 20
+ cp 20
+ jr nc, .skip_cap
+ ld c, a
+.skip_cap
+ ld a, c
+ ldh [hTempPlayAreaLocation_ffa1], a
+ or a
+ ret
+; 0x2f3ef
+
+Potion_HealEffect: ; 2f3ef (b:73ef)
+ ldh a, [hTemp_ffa0]
+ ldh [hTempPlayAreaLocation_ff9d], a
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ call HealPlayAreaCardHP
+ ret
+; 0x2f3f9
+
+GamblerEffect: ; 2f3f9 (b:73f9)
+ ldtx de, CardCheckIfHeads8CardsIfTails1CardText
+ call TossCoin_BankB
+ ldh [hTemp_ffa0], a
+; discard Gambler card from hand
+ ldh a, [hTempCardIndex_ff9f]
+ call RemoveCardFromHand
+ call PutCardInDiscardPile
+
+; shuffle cards into deck
+ call CreateHandCardList
+ call SortCardsInDuelTempListByID
+ ld hl, wDuelTempList
+.loop_return_deck
+ ld a, [hli]
+ cp $ff
+ jr z, .check_coin_toss
+ call RemoveCardFromHand
+ call ReturnCardToDeck
+ jr .loop_return_deck
+
+.check_coin_toss
+ call Func_2c0bd
+ ld c, 8
+ ldh a, [hTemp_ffa0]
+ or a
+ jr nz, .draw_cards ; coin toss was heads?
+ ; if tails, number of cards to draw is 1
+ ld c, 1
+
+; correct number of cards to draw is in c
+.draw_cards
+ ld a, c
+ bank1call DisplayDrawNCardsScreen
.draw_loop
- call DrawCardFromDeck
- jr c, .revert_turn_to_user
- call AddCardToHand
- dec c
- jr nz, .draw_loop
-.revert_turn_to_user
- call SwapTurn
- ret
+ call DrawCardFromDeck
+ jr c, .done
+ call AddCardToHand
+ dec c
+ jr nz, .draw_loop
+.done
+ ret
+; 0x2f43b
+
+; return carry if not enough cards in hand to discard
+; or if there are no cards in the Discard Pile
+ItemFinder_HandDiscardPileCheck: ; 2f43b (b:743b)
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ ldtx hl, NotEnoughCardsInHandText
+ cp 3
+ ret c
+ call CreateTrainerCardListFromDiscardPile
+ ret
+; 0x2f44a
+
+ItemFinder_PlayerSelection: ; 2f44a (b:744a)
+ call HandlePlayerSelection2HandCardsToDiscard
+ ret c ; was operation cancelled?
+
+; cards were selected to discard from hand.
+; now to choose a Trainer card from Discard Pile.
+ call CreateTrainerCardListFromDiscardPile
+ bank1call Func_5591
+ ldtx hl, ChooseCardToPlaceInHandText
+ ldtx de, PlayerDiscardPileText
+ bank1call SetCardListHeaderText
+ bank1call DisplayCardList
+ ldh [hTempList + 2], a ; placed after the 2 cards selected to discard
+ ret
+; 0x2f463
+
+ItemFinder_DiscardAddToHandEffect: ; 2f463 (b:7463)
+; discard cards from hand
+ ld hl, hTempList
+ ld a, [hli]
+ call RemoveCardFromHand
+ call PutCardInDiscardPile
+ ld a, [hli]
+ call RemoveCardFromHand
+ call PutCardInDiscardPile
+
+; place card from Discard Pile to hand
+ ld a, [hl]
+ call MoveDiscardPileCardToHand
+ call AddCardToHand
+ call IsPlayerTurn
+ ret c
+; display card in screen
+ ldh a, [hTempList + 2]
+ ldtx hl, WasPlacedInTheHandText
+ bank1call DisplayCardDetailScreen
+ ret
+; 0x2f488
+
+Defender_PlayerSelection: ; 2f488 (b:7488)
+ ldtx hl, ChoosePokemonToAttachDefenderToText
+ call DrawWideTextBox_WaitForInput
+ bank1call HasAlivePokemonInPlayArea
+ bank1call OpenPlayAreaScreenForSelection
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2f499
+
+Defender_AttachDefenderEffect: ; 2f499 (b:7499)
+; attach Trainer card to Play Area Pokemon
+ ldh a, [hTemp_ffa0]
+ ld e, a
+ ldh a, [hTempCardIndex_ff9f]
+ call PutHandCardInPlayArea
+
+; increase number of Defender cards of this location by 1
+ ldh a, [hTemp_ffa0]
+ add DUELVARS_ARENA_CARD_ATTACHED_DEFENDER
+ call GetTurnDuelistVariable
+ inc [hl]
+ call IsPlayerTurn
+ ret c
+
+ ldh a, [hTemp_ffa0]
+ call Func_2c10b
+ ret
+; 0x2f4b3
+
+; return carry if Bench is full.
+MysteriousFossil_BenchCheck: ; 2f4b3 (b:74b3)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ cp MAX_PLAY_AREA_POKEMON
+ ccf
+ ldtx hl, NoSpaceOnTheBenchText
+ ret
+; 0x2f4bf
+
+MysteriousFossil_PlaceInPlayAreaEffect: ; 2f4bf (b:74bf)
+ ldh a, [hTempCardIndex_ff9f]
+ call PutHandPokemonCardInPlayArea
+ ret
+; 0x2f4c5
+
+; return carry if Arena card has no status to heal.
+FullHeal_StatusCheck: ; 2f4c5 (b:74c5)
+ ld a, DUELVARS_ARENA_CARD_STATUS
+ call GetTurnDuelistVariable
+ or a
+ ret nz
+ ldtx hl, NotAffectedByPoisonSleepParalysisOrConfusionText
+ scf
+ ret
+; 0x2f4d1
+
+FullHeal_ClearStatusEffect: ; 2f4d1 (b:74d1)
+ ld a, $8a
+ call Func_2fea9
+ ld a, DUELVARS_ARENA_CARD_STATUS
+ call GetTurnDuelistVariable
+ ld [hl], NO_STATUS
+ bank1call DrawDuelHUDs
+ ret
+; 0x2f4e1
+
+ImposterProfessorOakEffect: ; 2f4e1 (b:74e1)
+ call SwapTurn
+ call CreateHandCardList
+ call SortCardsInDuelTempListByID
+
+; first return all cards in hand to the deck.
+ ld hl, wDuelTempList
+.loop_return_deck
+ ld a, [hli]
+ cp $ff
+ jr z, .done_return
+ call RemoveCardFromHand
+ call ReturnCardToDeck
+ jr .loop_return_deck
+
+; then draw 7 cards from the deck.
+.done_return
+ call Func_2c0bd
+ ld a, 7
+ bank1call DisplayDrawNCardsScreen
+ ld c, 7
+.loop_draw
+ call DrawCardFromDeck
+ jr c, .done
+ call AddCardToHand
+ dec c
+ jr nz, .loop_draw
+.done
+ call SwapTurn
+ ret
; 0x2f513
+; return carry if not enough cards in hand to discard
+; or if there are no cards left in the deck.
+ComputerSearch_HandDeckCheck: ; 2f513 (b:7513)
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ ldtx hl, NotEnoughCardsInHandText
+ cp 3
+ ret c
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ ldtx hl, NoCardsLeftInTheDeckText
+ cp DECK_SIZE
+ ccf
+ ret
+; 0x2f52a
+
+ComputerSearch_PlayerDiscardHandSelection: ; 2f52a (b:752a)
+ call HandlePlayerSelection2HandCardsToDiscard
+ ret
+; 0x2f52e
+
+ComputerSearch_PlayerDeckSelection: ; 2f52e (b:752e)
+ call CreateDeckCardList
+ bank1call Func_5591
+ ldtx hl, ChooseCardToPlaceInHandText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+.loop_input
+ bank1call DisplayCardList
+ jr c, .loop_input ; can't exit with B button
+ ldh [hTempList + 2], a
+ ret
+; 0x2f545
+
+ComputerSearch_DiscardAddToHandEffect: ; 2f545 (b:7545)
+; discard cards from hand
+ ld hl, hTempList
+ ld a, [hli]
+ call RemoveCardFromHand
+ call PutCardInDiscardPile
+ ld a, [hli]
+ call RemoveCardFromHand
+ call PutCardInDiscardPile
+
+; add card from deck to hand
+ ld a, [hl]
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ call Func_2c0bd
+ ret
+; 0x2f561
+
+; return carry if Bench is full.
+ClefairyDoll_BenchCheck: ; 2f561 (b:7561)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, NoSpaceOnTheBenchText
+ cp MAX_PLAY_AREA_POKEMON
+ ccf
+ ret
+; 0x2f56d
+
+ClefairyDoll_PlaceInPlayAreaEffect: ; 2f56d (b:756d)
+ ldh a, [hTempCardIndex_ff9f]
+ call PutHandPokemonCardInPlayArea
+ ret
+; 0x2f573
+
+; return carry if no Pokemon in the Bench.
+MrFuji_BenchCheck: ; 2f573 (b:7573)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, EffectNoPokemonOnTheBenchText
+ cp 2
+ ret
+; 0x2f57e
+
+MrFuji_PlayerSelection: ; 2f57e (b:757e)
+ ldtx hl, ChoosePokemonToReturnToTheDeckText
+ call DrawWideTextBox_WaitForInput
+ bank1call HasAlivePokemonInBench
+ bank1call OpenPlayAreaScreenForSelection
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2f58f
+
+MrFuji_ReturnToDeckEffect: ; 2f58f (b:758f)
+; get Play Area location's card index
+ ldh a, [hTemp_ffa0]
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ ldh [hTempCardIndex_ff98], a
+
+; find all cards that are in the same location
+; (previous evolutions and energy cards attached)
+; and return them all to the deck.
+ ldh a, [hTemp_ffa0]
+ or CARD_LOCATION_PLAY_AREA
+ ld e, a
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop_cards
+ push de
+ push hl
+ ld a, [hl]
+ cp e
+ jr nz, .next_card
+ ld a, l
+ call ReturnCardToDeck
+.next_card
+ pop hl
+ pop de
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_cards
+
+; clear Play Area location of card
+ ldh a, [hTemp_ffa0]
+ ld e, a
+ call EmptyPlayAreaSlot
+ ld l, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ dec [hl]
+ call ShiftAllPokemonToFirstPlayAreaSlots
+
+; if Trainer card wasn't played by the Player,
+; print the selected Pokemon's name and show card on screen.
+ call IsPlayerTurn
+ jr c, .done
+ ldh a, [hTempCardIndex_ff98]
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld hl, wLoadedCard1Name
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call LoadTxRam2
+ bank1call DrawLargePictureOfCard
+ ldtx hl, PokemonAndAllAttachedCardsWereReturnedToDeckText
+ call DrawWideTextBox_WaitForInput
+.done
+ call Func_2c0bd
+ ret
+; 0x2f5e0
+
+PlusPowerEffect: ; 2f5e0 (b:75e0)
+; attach Trainer card to Arena Pokemon
+ ld e, PLAY_AREA_ARENA
+ ldh a, [hTempCardIndex_ff9f]
+ call PutHandCardInPlayArea
+
+; increase number of Defender cards of this location by 1
+ ld a, DUELVARS_ARENA_CARD_ATTACHED_PLUSPOWER
+ call GetTurnDuelistVariable
+ inc [hl]
+ ret
+; 0x2f5ee
+
+; return carry if no Pokemon in the Bench.
+Switch_BenchCheck: ; 2f5ee (b:75ee)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, EffectNoPokemonOnTheBenchText
+ cp 2
+ ret
+; 0x2f5f9
+
+Switch_PlayerSelection: ; 2f5f9 (b:75f9)
+ ldtx hl, SelectPkmnOnBenchToSwitchWithActiveText
+ call DrawWideTextBox_WaitForInput
+ bank1call HasAlivePokemonInBench
+ bank1call OpenPlayAreaScreenForSelection
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2f60a
+
+Switch_SwitchEffect: ; 2f60a (b:760a)
+ ldh a, [hTemp_ffa0]
+ ld e, a
+ call SwapArenaWithBenchPokemon
+ ret
+; 0x2f611
+
+PokemonCenter_DamageCheck: ; 2f611 (b:7611)
+ call CheckIfPlayAreaHasAnyDamage
+ ldtx hl, NoPokemonWithDamageCountersText
+ ret
+; 0x2f618
+
+PokemonCenter_HealDiscardEnergyEffect: ; 2f618 (b:7618)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+
+; go through every Pokemon in the Play Area
+; and heal all damage & discard their Energy cards.
+.loop_play_area
+; check its damage
+ ld a, e
+ ldh [hTempPlayAreaLocation_ff9d], a
+ call GetCardDamageAndMaxHP
+ or a
+ jr z, .next_pkmn ; if no damage, skip Pokemon
+
+; heal all its damage
+ push de
+ ld e, a
+ ld d, $00
+ call HealPlayAreaCardHP
+
+; loop all cards in deck and for all the Energy cards
+; that are attached to this Play Area location Pokemon,
+; place them in the Discard Pile.
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ or CARD_LOCATION_PLAY_AREA
+ ld e, a
+ ld a, $00
+ call GetTurnDuelistVariable
+.loop_deck
+ ld a, [hl]
+ cp e
+ jr nz, .next_card_deck ; not attached to card, skip
+ ld a, l
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ and TYPE_ENERGY
+ jr z, .next_card_deck ; not Energy, skip
+ ld a, l
+ call PutCardInDiscardPile
+.next_card_deck
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop_deck
+
+ pop de
+.next_pkmn
+ inc e
+ dec d
+ jr nz, .loop_play_area
+ ret
+; 0x2f659
+
+; return carry if non-Turn Duelist has full Bench
+; or if they have no Basic Pokemon cards in Discard Pile.
+PokemonFlute_BenchCheck: ; 2f659 (b:7659)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetNonTurnDuelistVariable
+ ldtx hl, NoSpaceOnTheBenchText
+ cp MAX_PLAY_AREA_POKEMON
+ ccf
+ ret c ; not enough space in Bench
+ ; check Discard Pile
+ call SwapTurn
+ call CreateBasicPokemonCardListFromDiscardPile
+ ldtx hl, ThereAreNoPokemonInDiscardPileText
+ call SwapTurn
+ ret
+; 0x2f672
+
+PokemonFlute_PlayerSelection: ; 2f672 (b:7672)
+; create Discard Pile list
+ call SwapTurn
+ call CreateBasicPokemonCardListFromDiscardPile
+
+; display selection screen and store Player's selection
+ bank1call Func_5591
+ ldtx hl, ChoosePokemonToPlaceInPlayText
+ ldtx de, PlayerDiscardPileText
+ bank1call SetCardListHeaderText
+ bank1call DisplayCardList
+ call SwapTurn
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2f68f
+
+PokemonFlute_PlaceInPlayAreaText: ; 2f68f (b:768f)
+; place selected card in non-Turn Duelist's Bench
+ call SwapTurn
+ ldh a, [hTemp_ffa0]
+ call MoveDiscardPileCardToHand
+ call AddCardToHand
+ call PutHandPokemonCardInPlayArea
+ call SwapTurn
+
+; unless it was the Player who played the card,
+; display the Pokemon card on screen.
+ call IsPlayerTurn
+ ret c
+ call SwapTurn
+ ldh a, [hTemp_ffa0]
+ ldtx hl, CardWasChosenText
+ bank1call DisplayCardDetailScreen
+ call SwapTurn
+ ret
+; 0x2f6b3
+
+PokemonBreeder_HandPlayAreaCheck: ; 2f6b3 (b:76b3)
+ call CreatePlayableStage2PokemonCardListFromHand
+ jr c, .cannot_evolve
+ bank1call IsPrehistoricPowerActive
+ ret
+.cannot_evolve
+ ldtx hl, ConditionsForEvolvingToStage2NotFulfilledText
+ scf
+ ret
+; 0x2f6c1
+
+PokemonBreeder_PlayerSelection: ; 2f6c1 (b:76c1)
+; create hand list of playable Stage2 cards
+ call CreatePlayableStage2PokemonCardListFromHand
+ bank1call Func_5591
+
+; handle Player selection of Stage2 card
+ ldtx hl, PleaseSelectCardText
+ ldtx de, DuelistHandText
+ bank1call SetCardListHeaderText
+ bank1call DisplayCardList
+ ret c ; exit if B was pressed
+
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ ldtx hl, ChooseBasicPokemonToEvolveText
+ call DrawWideTextBox_WaitForInput
+
+; handle Player selection of Basic card to evolve
+ bank1call HasAlivePokemonInPlayArea
+.read_input
+ bank1call OpenPlayAreaScreenForSelection
+ ret c ; exit if B was pressed
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ld e, a
+ ldh a, [hTemp_ffa0]
+ ld d, a
+ call CheckIfCanEvolveInto_BasicToStage2
+ jr c, .read_input ; loop back if cannot evolve this card
+ or a
+ ret
+; 0x2f6f4
+
+PokemonBreeder_EvolveEffect: ; 2f6f4 (b:76f4)
+ ldh a, [hTempCardIndex_ff9f]
+ push af
+ ld hl, hTemp_ffa0
+ ld a, [hli]
+ ldh [hTempCardIndex_ff98], a
+ ld a, [hl] ; hTempPlayAreaLocation_ffa1
+ ldh [hTempPlayAreaLocation_ff9d], a
+
+; load the Basic Pokemon card name to RAM
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld hl, wLoadedCard1Name
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call LoadTxRam2
+
+; evolve card and overwrite its stage as STAGE2_WITHOUT_STAGE1
+ ldh a, [hTempCardIndex_ff98]
+ call EvolvePokemonCard
+ ld [hl], STAGE2_WITHOUT_STAGE1
+
+; load Stage2 Pokemon card name to RAM
+ ldh a, [hTempCardIndex_ff98]
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld a, 18
+ call CopyCardNameAndLevel
+ xor a
+ ld [hl], a ; $0 character
+ ld hl, wTxRam2_b
+ ld [hli], a
+ ld [hl], a
+
+; display Pokemon picture and play sfx,
+; print the corresponding card names.
+ bank1call DrawLargePictureOfCard
+ ld a, $5e
+ call PlaySFX
+ ldtx hl, PokemonEvolvedIntoPokemonText
+ call DrawWideTextBox_WaitForInput
+ bank1call Func_161e
+ pop af
+ ldh [hTempCardIndex_ff9f], a
+ ret
+; 0x2f73e
+
+; creates list in wDuelTempList of all Stage2 Pokemon cards
+; in the hand that can evolve a Basic Pokemon card in Play Area
+; through use of Pokemon Breeder.
+; returns carry if that list is empty.
+CreatePlayableStage2PokemonCardListFromHand: ; 2f73e (b:773e)
+ call CreateHandCardList
+ ret c ; return if no hand cards
+
+; check if hand Stage2 Pokemon cards can be made
+; to evolve a Basic Pokemon in the Play Area and, if so,
+; add it to the wDuelTempList.
+ ld hl, wDuelTempList
+ ld e, l
+ ld d, h
+.loop_hand
+ ld a, [hl]
+ cp $ff
+ jr z, .done
+ call .CheckIfCanEvolveAnyPlayAreaBasicCard
+ jr c, .next_hand_card
+ ld a, [hl]
+ ld [de], a
+ inc de
+.next_hand_card
+ inc hl
+ jr .loop_hand
+
+.done
+ ld a, $ff ; terminating byte
+ ld [de], a
+ ld a, [wDuelTempList]
+ cp $ff
+ scf
+ ret z ; return carry if empty
+ ; not empty
+ or a
+ ret
+
+; return carry if Stage2 card in a cannot evolve any
+; of the Basic Pokemon in Play Area through Pokemon Breeder.
+.CheckIfCanEvolveAnyPlayAreaBasicCard
+ push de
+ ld d, a
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ jr nc, .set_carry ; skip if not Pokemon card
+ ld a, [wLoadedCard2Stage]
+ cp STAGE2
+ jr nz, .set_carry ; skip if not Stage2
+
+; check if can evolve any Play Area cards
+ push hl
+ push bc
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld c, a
+ ld e, PLAY_AREA_ARENA
+.loop_play_area
+ push bc
+ push de
+ call CheckIfCanEvolveInto_BasicToStage2
+ pop de
+ pop bc
+ jr nc, .done_play_area
+ inc e
+ dec c
+ jr nz, .loop_play_area
+; set carry
+ scf
+.done_play_area
+ pop bc
+ pop hl
+ pop de
+ ret
+.set_carry
+ pop de
+ scf
+ ret
+; 0x2f795
+
+; return carry if no cards in the Bench.
+ScoopUp_BenchCheck: ; 2f795 (b:7795)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, EffectNoPokemonOnTheBenchText
+ cp 2
+ ret
+; 0x2f7a0
+
+ScoopUp_PlayerSelection: ; 2f7a0 (b:77a0)
+; print text box
+ ldtx hl, ChoosePokemonToScoopUpText
+ call DrawWideTextBox_WaitForInput
+
+; handle Player selection
+ bank1call HasAlivePokemonInPlayArea
+ bank1call OpenPlayAreaScreenForSelection
+ ret c ; exit if B was pressed
+
+ ldh [hTemp_ffa0], a
+ or a
+ ret nz ; if it wasn't the Active Pokemon, we are done
+
+; handle switching to a Pokemon in Bench and store location selected.
+ call EmptyScreen
+ ldtx hl, SelectPokemonToPlaceInTheArenaText
+ call DrawWideTextBox_WaitForInput
+ bank1call HasAlivePokemonInBench
+ bank1call OpenPlayAreaScreenForSelection
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ret
+; 0x2f7c3
+
+ScoopUp_ReturnToHandEffect: ; 2f7c3 (b:77c3)
+; store chosen card location to Scoop Up
+ ldh a, [hTemp_ffa0]
+ or CARD_LOCATION_PLAY_AREA
+ ld e, a
+
+; find Basic Pokemon card that is in the selected Play Area location
+; and add it to the hand, discarding all cards attached.
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.loop
+ ld a, [hl]
+ cp e
+ jr nz, .next_card ; skip if not in selected location
+ ld a, l
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ jr nc, .next_card ; skip if not Pokemon card
+ ld a, [wLoadedCard2Stage]
+ or a
+ jr nz, .next_card ; skip if not Basic stage
+; found
+ ld a, l
+ ldh [hTempCardIndex_ff98], a
+ call AddCardToHand
+ ; optimization: break loop here, since
+ ; no two Basic Pokemon cards may occupy
+ ; the same Play Area location.
+.next_card
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .loop
+
+; since the card has been moved to hand,
+; MovePlayAreaCardToDiscardPile will take care
+; of discarding every higher stage cards and other cards attached.
+ ldh a, [hTemp_ffa0]
+ ld e, a
+ call MovePlayAreaCardToDiscardPile
+
+; if the Pokemon was in the Arena, clear status
+ ldh a, [hTemp_ffa0]
+ or a
+ jr nz, .skip_clear_status
+ call ClearAllStatusConditions
+.skip_clear_status
+
+; if card was not played by Player, show detail screen
+; and print corresponding text.
+ call IsPlayerTurn
+ jr c, .shift_or_switch
+ ldtx hl, PokemonWasReturnedFromArenaToHandText
+ ldh a, [hTemp_ffa0]
+ or a
+ jr z, .display_detail_screen
+ ldtx hl, PokemonWasReturnedFromBenchToHandText
+.display_detail_screen
+ ldh a, [hTempCardIndex_ff98]
+ bank1call DisplayCardDetailScreen
+
+.shift_or_switch
+; if card was in Bench, simply shift Pokemon slots...
+ ldh a, [hTemp_ffa0]
+ or a
+ jr z, .switch
+ call ShiftAllPokemonToFirstPlayAreaSlots
+ ret
+
+.switch
+; ...if Pokemon was in Arena, then switch it with the selected Bench card.
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ld d, a
+ ld e, PLAY_AREA_ARENA
+ call SwapPlayAreaPokemon
+ call ShiftAllPokemonToFirstPlayAreaSlots
+ ret
+; 0x2f826
+
+; return carry if no other cards in hand,
+; or if there are no Pokemon cards in hand.
+PokemonTrader_HandDeckCheck: ; 2f826 (b:7826)
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ ldtx hl, ThereAreNoCardsInHandThatYouCanChangeText
+ cp 2
+ ret c ; return if no other cards in hand
+ call CreatePokemonCardListFromHand
+ ldtx hl, ThereAreNoCardsInHandThatYouCanChangeText
+ ret
+; 0x2f838
+
+PokemonTrader_PlayerHandSelection: ; 2f838 (b:7838)
+; print text box
+ ldtx hl, ChooseCardFromYourHandToSwitchText
+ call DrawWideTextBox_WaitForInput
+
+; create list with all Pokemon cards in hand
+ call CreatePokemonCardListFromHand
+ bank1call Func_5591
+
+; handle Player selection
+ ldtx hl, ChooseCardToSwitchText
+ ldtx de, DuelistHandText
+ bank1call SetCardListHeaderText
+ bank1call DisplayCardList
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2f853
+
+PokemonTrader_PlayerDeckSelection: ; 2f853 (b:7853)
+; temporarily place chosen hand card in deck
+; so it can be potentially chosen to be traded.
+ ldh a, [hTemp_ffa0]
+ call RemoveCardFromHand
+ call ReturnCardToDeck
+
+; display deck card list screen
+ ldtx hl, ChooseBasicOrEvolutionPokemonCardFromDeckText
+ call DrawWideTextBox_WaitForInput
+ call CreateDeckCardList
+ bank1call Func_5591
+ ldtx hl, ChoosePokemonCardText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+
+; handle Player selection
+.read_input
+ bank1call DisplayCardList
+ jr c, .read_input ; pressing B loops back to selection
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ jr nc, .read_input ; can't select non-Pokemon cards
+
+; a valid card was selected, store its card index and
+; place the selected hand card back to the hand.
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTempPlayAreaLocation_ffa1], a
+ ldh a, [hTemp_ffa0]
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ or a
+ ret
+; 0x2f88d
+
+PokemonTrader_TradeCardsEffect: ; 2f88d (b:788d)
+; place hand card in deck
+ ldh a, [hTemp_ffa0]
+ call RemoveCardFromHand
+ call ReturnCardToDeck
+
+; place deck card in hand
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+
+; display cards if the Pokemon Trader wasn't played by Player
+ call IsPlayerTurn
+ jr c, .done
+ ldh a, [hTemp_ffa0]
+ ldtx hl, PokemonWasReturnedToDeckText
+ bank1call DisplayCardDetailScreen
+ ldh a, [hTempPlayAreaLocation_ffa1]
+ ldtx hl, WasPlacedInTheHandText
+ bank1call DisplayCardDetailScreen
+.done
+ call Func_2c0bd
+ ret
+; 0x2f8b6
+
+; makes list in wDuelTempList with all Pokemon cards
+; that are in Turn Duelist's hand.
+; if list turns out empty, return carry.
+CreatePokemonCardListFromHand: ; 2f8b6 (b:78b6)
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ ld c, a
+ ld l, DUELVARS_HAND
+ ld de, wDuelTempList
+.loop
+ ld a, [hl]
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ jr nc, .next_hand_card
+ ld a, [hl]
+ ld [de], a
+ inc de
+.next_hand_card
+ inc l
+ dec c
+ jr nz, .loop
+ ld a, $ff ; terminating byte
+ ld [de], a
+ ld a, [wDuelTempList]
+ cp $ff
+ jr z, .set_carry
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x2f8e1
+
+; return carry if no cards in deck
+Pokedex_DeckCheck: ; 2f8e1 (b:78e1)
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ ldtx hl, NoCardsLeftInTheDeckText
+ cp DECK_SIZE
+ ccf
+ ret
+; 0x2f8ed
+
+Pokedex_PlayerSelection: ; 2f8ed (b:78ed)
+; print text box
+ ldtx hl, RearrangeThe5CardsAtTopOfDeckText
+ call DrawWideTextBox_WaitForInput
+
+; cap the number of cards to reorder up to
+; number of cards left in the deck (maximum of 5)
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ ld b, a
+ ld a, DECK_SIZE
+ sub [hl]
+ ld c, 5
+ cp c
+ jr nc, .no_cap
+ ld c, a
+.no_cap
+
+; fill wDuelTempList with cards that are going to be sorted
+ ld a, c
+ inc a
+ ld [wNumberOfCardsToOrder], a
+ ld a, b
+ add DUELVARS_DECK_CARDS
+ ld l, a
+ ld de, wDuelTempList
+.loop_cards_to_order
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop_cards_to_order
+ ld a, $ff ; terminating byte
+ ld [de], a
+
+.clear_list
+; wDuelTempList + 10 will be filled with numbers from 1
+; to 5 (or whatever the maximum order card is).
+; so that the first item in that list corresponds to the first card
+; the second item corresponds to the second card, etc.
+; and the number in the list corresponds to the ordering number.
+ call CountCardsInDuelTempList
+ ld b, a
+ ld a, 1
+; fill order list with zeroes
+ ldh [hCurSelectionItem], a
+ ld hl, wDuelTempList + 10
+ xor a
+.loop_init
+ ld [hli], a
+ dec b
+ jr nz, .loop_init
+ ld [hl], $ff ; terminating byte
+
+; display card list to order
+ bank1call InitAndDrawCardListScreenLayout
+ ldtx hl, ChooseTheOrderOfTheCardsText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+ bank1call Func_5735
+
+.read_input
+ bank1call DisplayCardList
+ jr c, .undo ; if B is pressed, undo last order selection
+
+; a card was selected, check if it's already been selected
+ ldh a, [hCurMenuItem]
+ ld e, a
+ ld d, $00
+ ld hl, wDuelTempList + 10
+ add hl, de
+ ld a, [hl]
+ or a
+ jr nz, .read_input ; already has an ordering number
+
+; hasn't been ordered yet, apply to it current ordering number
+; and increase it by 1.
+ ldh a, [hCurSelectionItem]
+ ld [hl], a
+ inc a
+ ldh [hCurSelectionItem], a
+
+; refresh screen
+ push af
+ bank1call Func_5744
+ pop af
+
+; check if we're done ordering
+ ldh a, [hCurSelectionItem]
+ ld hl, wNumberOfCardsToOrder
+ cp [hl]
+ jr c, .read_input ; if still more cards to select, loop back up
+
+; we're done selecting cards
+ call EraseCursor
+ ldtx hl, IsThisOKText
+ call YesOrNoMenuWithText_LeftAligned
+ jr c, .clear_list ; "No" was selected, start over
+ ; selection was confirmed
+
+; now wDuelTempList + 10 will be overwritten with the
+; card indices in order of selection.
+ ld hl, wDuelTempList + 10
+ ld de, wDuelTempList
+ ld c, 0
+.loop_write_indices
+ ld a, [hli]
+ cp $ff
+ jr z, .done_write_indices
+ push hl
+ push bc
+ ld c, a
+ ld b, $00
+ ld hl, hTempCardIndex_ff9f
+ add hl, bc
+ ld a, [de]
+ ld [hl], a
+ pop bc
+ pop hl
+ inc de
+ inc c
+ jr .loop_write_indices
+
+.done_write_indices
+ ld b, $00
+ ld hl, hTempList
+ add hl, bc
+ ld [hl], $ff ; terminating byte
+ or a
+ ret
+
+.undo
+; undo last selection and get previous order number
+ ld hl, hCurSelectionItem
+ ld a, [hl]
+ cp 1
+ jr z, .read_input ; already at first input, nothing to undo
+ dec a
+ ld [hl], a
+ ld c, a
+ ld hl, wDuelTempList + 10
+.asm_2f99e
+ ld a, [hli]
+ cp c
+ jr nz, .asm_2f99e
+ dec hl
+ ld [hl], $00 ; overwrite order number with 0
+ bank1call Func_5744
+ jr .read_input
+; 0x2f9aa
+
+Pokedex_OrderDeckCardsEffect: ; 2f9aa (b:79aa)
+; place cards in order to the hand.
+ ld hl, hTempList
+ ld c, 0
+.loop_place_hand
+ ld a, [hli]
+ cp $ff
+ jr z, .place_top_deck
+ call SearchCardInDeckAndAddToHand
+ inc c
+ jr .loop_place_hand
+
+.place_top_deck
+; go to last card in list and iterate in decreasing order
+; placing each card in top of deck.
+ dec hl
+ dec hl
+.loop_place_deck
+ ld a, [hld]
+ call ReturnCardToDeck
+ dec c
+ jr nz, .loop_place_deck
+ ret
+; 0x2f9c4
+
+BillEffect: ; 2f9c4 (b:79c4)
+ ld a, 2
+ bank1call DisplayDrawNCardsScreen
+ ld c, 2
+.loop_draw
+ call DrawCardFromDeck
+ jr c, .done
+ ldh [hTempCardIndex_ff98], a
+ call AddCardToHand
+ call IsPlayerTurn
+ jr nc, .skip_display_screen
+ push bc
+ bank1call DisplayPlayerDrawCardScreen
+ pop bc
+.skip_display_screen
+ dec c
+ jr nz, .loop_draw
+.done
+ ret
+; 0x2f9e3
+
+LassEffect: ; 2f9e3 (b:79e3)
+; first discard Lass card that was used
+ ldh a, [hTempCardIndex_ff9f]
+ call RemoveCardFromHand
+ call PutCardInDiscardPile
+
+ ldtx hl, PleaseCheckTheOpponentsHandText
+ call DrawWideTextBox_WaitForInput
+
+ call .DisplayLinkOrCPUHand
+ ; do for non-Turn Duelist
+ call SwapTurn
+ call .ShuffleDuelistHandTrainerCardsInDeck
+ call SwapTurn
+ ; do for Turn Duelist
+; fallthrough
+
+.ShuffleDuelistHandTrainerCardsInDeck
+ call CreateHandCardList
+ call SortCardsInDuelTempListByID
+ xor a
+ ldh [hCurSelectionItem], a
+ ld hl, wDuelTempList
+
+; go through all cards in hand
+; and any Trainer card is returned to deck.
+.loop_hand
+ ld a, [hli]
+ ldh [hTempCardIndex_ff98], a
+ cp $ff
+ jr z, .done
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ cp TYPE_TRAINER
+ jr nz, .loop_hand
+ ldh a, [hTempCardIndex_ff98]
+ call RemoveCardFromHand
+ call ReturnCardToDeck
+ push hl
+ ld hl, hCurSelectionItem
+ inc [hl]
+ pop hl
+ jr .loop_hand
+.done
+; show card list
+ ldh a, [hCurSelectionItem]
+ or a
+ call nz, Func_2c0bd ; only show list if there were any Trainer cards
+ ret
+; 0x2fa31
+
+.DisplayLinkOrCPUHand ; 2fa31 (b:7a31)
+ ld a, [wDuelType]
+ or a
+ jr z, .cpu_opp
+
+; link duel
+ ldh a, [hWhoseTurn]
+ push af
+ ld a, OPPONENT_TURN
+ ldh [hWhoseTurn], a
+ call .DisplayOppHand
+ pop af
+ ldh [hWhoseTurn], a
+ ret
+
+.cpu_opp
+ call SwapTurn
+ call .DisplayOppHand
+ call SwapTurn
+ ret
+; 0x2fa4f
+
+.DisplayOppHand ; 2fa4f (b:7a4f)
+ call CreateHandCardList
+ jr c, .no_cards
+ bank1call InitAndDrawCardListScreenLayout
+ ldtx hl, ChooseTheCardYouWishToExamineText
+ ldtx de, DuelistHandText
+ bank1call SetCardListHeaderText
+ ld a, A_BUTTON | START
+ ld [wNoItemSelectionMenuKeys], a
+ bank1call DisplayCardList
+ ret
+.no_cards
+ ldtx hl, DuelistHasNoCardsInHandText
+ call DrawWideTextBox_WaitForInput
+ ret
+; 0x2fa70
+
+; return carry if not enough cards in hand for effect
+Maintenance_HandCheck: ; 2fa70 (b:7a70)
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ ldtx hl, NotEnoughCardsInHandText
+ cp 3
+ ret
+; 0x2fa7b
+
+Maintenance_PlayerSelection: ; 2fa7b (b:7a7b)
+ ldtx hl, Choose2HandCardsFromHandToReturnToDeckText
+ ldtx de, ChooseTheCardToPutBackText
+ call HandlePlayerSelection2HandCards
+ ret
+; 0x2fa85
+
+Maintenance_ReturnToDeckAndDrawEffect: ; 2fa85 (b:7a85)
+; return both selected cards to the deck
+ ldh a, [hTempList]
+ call RemoveCardFromHand
+ call ReturnCardToDeck
+ ldh a, [hTempList + 1]
+ call RemoveCardFromHand
+ call ReturnCardToDeck
+ call Func_2c0bd
+
+; draw one card
+ ld a, 1
+ bank1call DisplayDrawNCardsScreen
+ call DrawCardFromDeck
+ ldh [hTempCardIndex_ff98], a
+ call AddCardToHand
+ call IsPlayerTurn
+ ret nc
+ ; show card on screen if played by Player
+ bank1call DisplayPlayerDrawCardScreen
+ ret
+; 0x2faad
+
+; return carry if no cards in deck
+PokeBall_DeckCheck: ; 2faad (b:7aad)
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ ldtx hl, NoCardsLeftInTheDeckText
+ cp DECK_SIZE
+ ccf
+ ret
+; 0x2fab9
+
+PokeBall_PlayerSelection: ; 2fab9 (b:7ab9)
+ ld de, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call Func_2c08a
+ ldh [hTempList], a ; store coin result
+ ret nc
+
+; create list of all Pokemon cards in deck to search for
+ call CreateDeckCardList
+ ldtx hl, ChooseBasicOrEvolutionPokemonCardFromDeckText
+ ldtx bc, EvolutionCardText
+ lb de, SEARCHEFFECT_POKEMON, 0
+ call LookForCardsInDeck
+ jr c, .no_pkmn ; return if Player chose not to check deck
+
+; handle input
+ bank1call Func_5591
+ ldtx hl, ChoosePokemonCardText
+ ldtx de, DuelistDeckText
+ bank1call SetCardListHeaderText
+.read_input
+ bank1call DisplayCardList
+ jr c, .try_exit ; B was pressed, check if Player can cancel operation
+ ldh a, [hTempCardIndex_ff98]
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ jr nc, .play_sfx ; can't select non-Pokemon card
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTempList + 1], a
+ or a
+ ret
+
+.no_pkmn
+ ld a, $ff
+ ldh [hTempList + 1], a
+ or a
+ ret
+
+.play_sfx
+ call Func_3794
+ jr .read_input
+
+.try_exit
+; Player can only exit screen if there are no cards to choose
+ ld hl, wDuelTempList
+.loop
+ ld a, [hli]
+ cp $ff
+ jr z, .no_pkmn
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ jr nc, .loop
+ jr .read_input
+; 0x2fb15
+
+PokeBall_AddToHandEffect: ; 2fb15 (b:7b15)
+ ldh a, [hTempList]
+ or a
+ ret z ; return if coin toss was tails
+
+ ldh a, [hTempList + 1]
+ cp $ff
+ jr z, .done ; skip if no Pokemon was chosen
+
+; add Pokemon card to hand and show in screen if
+; it wasn't the Player who played the Trainer card.
+ call SearchCardInDeckAndAddToHand
+ call AddCardToHand
+ call IsPlayerTurn
+ jr c, .done
+ ldh a, [hTempList + 1]
+ ldtx hl, WasPlacedInTheHandText
+ bank1call DisplayCardDetailScreen
+.done
+ call Func_2c0bd
+ ret
+; 0x2fb36
+
+; return carry if no cards in the Discard Pile
+Recycle_DiscardPileCheck: ; 2fb36 (b:7b36)
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE
+ call GetTurnDuelistVariable
+ ldtx hl, ThereAreNoCardsInTheDiscardPileText
+ cp 1
+ ret
+; 0x2fb41
+
+Recycle_PlayerSelection: ; 2fb41 (b:7b41)
+ ld de, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call Func_2c08a
+ jr nc, .tails
+
+ call CreateDiscardPileCardList
+ bank1call Func_5591
+ ldtx hl, PleaseSelectCardText
+ ldtx de, PlayerDiscardPileText
+ bank1call SetCardListHeaderText
+.read_input
+ bank1call DisplayCardList
+ jr c, .read_input ; can't cancel with B button
+
+; Discard Pile card was chosen
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTempList], a
+ ret
+
+.tails
+ ld a, $ff
+ ldh [hTempList], a
+ or a
+ ret
+; 0x2fb68
+
+Recycle_AddToHandEffect: ; 2fb68 (b:7b68)
+ ldh a, [hTempList]
+ cp $ff
+ ret z ; return if no card was selected
+
+; add card to hand and show in screen if
+; it wasn't the Player who played the Trainer card.
+ call MoveDiscardPileCardToHand
+ call ReturnCardToDeck
+ call IsPlayerTurn
+ ret c
+ ldh a, [hTempList]
+ ldtx hl, CardWasChosenText
+ bank1call DisplayCardDetailScreen
+ ret
+; 0x2fb80
+
+; return carry if Bench is full or
+; if no Basic Pokemon cards in Discard Pile.
+Revive_BenchCheck: ; 2fb80 (b:7b80)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ldtx hl, NoSpaceOnTheBenchText
+ cp MAX_PLAY_AREA_POKEMON
+ ccf
+ ret c
+ call CreateBasicPokemonCardListFromDiscardPile
+ ldtx hl, ThereAreNoPokemonInDiscardPileText
+ ret
+; 0x2fb93
+
+Revive_PlayerSelection: ; 2fb93 (b:7b93)
+; create Basic Pokemon card list from Discard Pile
+ ldtx hl, ChooseBasicPokemonToPlaceOnBenchText
+ call DrawWideTextBox_WaitForInput
+ call CreateBasicPokemonCardListFromDiscardPile
+ bank1call Func_5591
+
+; display screen to select Pokemon
+ ldtx hl, PleaseSelectCardText
+ ldtx de, PlayerDiscardPileText
+ bank1call SetCardListHeaderText
+ bank1call DisplayCardList
+
+; store selection
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTemp_ffa0], a
+ ret
+; 0x2fbb0
+
+Revive_PlaceInPlayAreaEffect: ; 2fbb0 (b:7bb0)
+; place selected Pokemon in the Bench
+ ldh a, [hTemp_ffa0]
+ call MoveDiscardPileCardToHand
+ call AddCardToHand
+ call PutHandPokemonCardInPlayArea
+
+; set HP to half, rounded up
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ srl a
+ bit 0, a
+ jr z, .rounded
+ add 5 ; round up HP to nearest 10
+.rounded
+ ld [hl], a
+ call IsPlayerTurn
+ ret c ; done if Player played Revive
+
+; display card
+ ldh a, [hTemp_ffa0]
+ ldtx hl, PlacedOnTheBenchText
+ bank1call DisplayCardDetailScreen
+ ret
+; 0x2fbd6
+
+; makes list in wDuelTempList with all Basic Pokemon cards
+; that are in Turn Duelist's Discard Pile.
+; if list turns out empty, return carry.
+CreateBasicPokemonCardListFromDiscardPile: ; 2fbd6 (b:7bd6)
+; gets hl to point at end of Discard Pile cards
+; and iterates the cards in reverse order.
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE
+ call GetTurnDuelistVariable
+ ld b, a
+ add DUELVARS_DECK_CARDS
+ ld l, a
+ ld de, wDuelTempList
+ inc b
+ jr .next_discard_pile_card
+
+.check_card
+ ld a, [hl]
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ cp TYPE_ENERGY
+ jr nc, .next_discard_pile_card ; if not Pokemon card, skip
+ ld a, [wLoadedCard2Stage]
+ or a
+ jr nz, .next_discard_pile_card ; if not Basic stage, skip
+
+; write this card's index to wDuelTempList
+ ld a, [hl]
+ ld [de], a
+ inc de
+.next_discard_pile_card
+ dec l
+ dec b
+ jr nz, .check_card
+
+; done with the loop.
+ ld a, $ff ; terminating byte
+ ld [de], a
+ ld a, [wDuelTempList]
+ cp $ff
+ jr z, .set_carry
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x2fc0b
+
+; return carry if Turn Duelist has no Evolution cards in Play Area
+DevolutionSpray_PlayAreaEvolutionCheck: ; 2fc0b (b:7c0b)
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
+ call GetTurnDuelistVariable
+ ld c, a
+ ld l, DUELVARS_ARENA_CARD
+.loop
+ ld a, [hli]
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Stage]
+ or a
+ ret nz ; found an Evolution card
+ dec c
+ jr nz, .loop
+
+ ldtx hl, ThereAreNoStage1PokemonText
+ scf
+ ret
+; 0x2fc24
+
+DevolutionSpray_PlayerSelection: ; 2fc24 (b:7c24)
+; display textbox
+ ldtx hl, ChooseEvolutionCardAndPressAButtonToDevolveText
+ call DrawWideTextBox_WaitForInput
+
+; have Player select an Evolution card in Play Area
+ ld a, 1
+ ldh [hCurSelectionItem], a
+ bank1call HasAlivePokemonInPlayArea
+.read_input
+ bank1call OpenPlayAreaScreenForSelection
+ ret c ; exit if B was pressed
+ bank1call GetCardOneStageBelow
+ jr c, .read_input ; can't select Basic cards
+
+; get pre-evolution card data
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ push hl
+ push af
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ add DUELVARS_ARENA_CARD_STAGE
+ ld l, a
+ ld a, [hl]
+ push hl
+ push af
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ add DUELVARS_ARENA_CARD
+ ld l, a
+ ld a, [hl]
+ push hl
+ push af
+ jr .update_data
+
+.repeat_devolution
+; show Play Area screen with static cursor
+; so that the Player either presses A to do one more devolution
+; or presses B to finish selection.
+ bank1call Func_6194
+ jr c, .done_selection ; if B pressed, end selection instead
+ ; do one more devolution
+ bank1call GetCardOneStageBelow
+
+.update_data
+; overwrite the card data to new devolved stats
+ ld a, d
+ call UpdateDevolvedCardHPAndStage
+ call GetNextPositionInTempList_TrainerEffects
+ ld [hl], e
+ ld a, d
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Stage]
+ or a
+ jr nz, .repeat_devolution ; can do one more devolution
+
+.done_selection
+ call GetNextPositionInTempList_TrainerEffects
+ ld [hl], $ff ; terminating byte
+
+; store this Play Area location in first item of temp list
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hTempList], a
+
+; update Play Area location display of this Pokemon
+ call EmptyScreen
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld hl, wHUDEnergyAndHPBarsX
+ ld [hli], a
+ ld [hl], $00
+ bank1call PrintPlayAreaCardInformationAndLocation
+ call EnableLCD
+ pop bc
+ pop hl
+
+; rewrite all duelvars from before the selection was done
+; this is so that if "No" is selected in confirmation menu,
+; then the Pokemon isn't devolved and remains unchanged.
+ ld [hl], b
+ ldtx hl, IsThisOKText
+ call YesOrNoMenuWithText
+ pop bc
+ pop hl
+
+ ld [hl], b
+ pop bc
+ pop hl
+
+ ld [hl], b
+ ret
+; 0x2fc99
+
+DevolutionSpray_DevolutionEffect: ; 2fc99 (b:7c99)
+; first byte in list is Play Area location chosen
+ ld hl, hTempList
+ ld a, [hli]
+ ldh [hTempPlayAreaLocation_ff9d], a
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ push hl
+ push af
+
+; loop through devolutions selected
+ ld hl, hTempList + 1
+.loop_devolutions
+ ld a, [hl]
+ cp $ff
+ jr z, .check_ko ; list is over
+ ; devolve card to its stage below
+ push hl
+ bank1call GetCardOneStageBelow
+ ld a, d
+ call UpdateDevolvedCardHPAndStage
+ call ResetDevolvedCardStatus
+ pop hl
+ ld a, [hli]
+ call PutCardInDiscardPile
+ jr .loop_devolutions
+
+.check_ko
+ pop af
+ ld e, a
+ pop hl
+ ld d, [hl]
+ call PrintDevolvedCardNameAndLevelText
+ ldh a, [hTempList]
+ call PrintPlayAreaCardKnockedOutIfNoHP
+ bank1call Func_6e49
+ ret
+; 0x2fcd0
+
+Func_2fcd0: ; 2fcd0 (b:7cd0)
+ call CheckIfThereAreAnyEnergyCardsAttached
+ ldtx hl, NoEnergyCardsAttachedToPokemonInYourPlayAreaText
+ ret c
+ call SwapTurn
+ call CheckIfThereAreAnyEnergyCardsAttached
+ ldtx hl, NoEnergyCardsAttachedToPokemonInOppPlayAreaText
+ call SwapTurn
+ ret
+; 0x2fce4
+
+Func_2fce4: ; 2fce4 (b:7ce4)
+; handle selection of Energy to discard in own Play Area
+ ldtx hl, ChoosePokemonInYourAreaThenPokemonInYourOppText
+ call DrawWideTextBox_WaitForInput
+ call HandlePokemonAndEnergySelectionScreen
+ ret c ; return if operation was cancelled
+
+ ldtx hl, ChoosePokemonToRemoveEnergyFromText
+ call DrawWideTextBox_WaitForInput
+
+ call SwapTurn
+ ld a, 3
+ ldh [hCurSelectionItem], a
+.select_opp_pkmn
+ bank1call HasAlivePokemonInPlayArea
+ bank1call OpenPlayAreaScreenForSelection
+ jr nc, .opp_pkmn_selected
+ ; B was pressed
+ call SwapTurn
+ ret ; return if operation was cancelled
+.opp_pkmn_selected
+ ld e, a
+ call GetPlayAreaCardAttachedEnergies
+ ld a, [wTotalAttachedEnergies]
+ or a
+ jr nz, .has_energy ; has any energy cards attached?
+ ; no energy, loop back
+ ldtx hl, NoEnergyCardsText
+ call DrawWideTextBox_WaitForInput
+ jr .select_opp_pkmn
+
+.has_energy
+; store this Pokemon's Play Area location
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ldh [hPlayAreaEffectTarget], a
+
+ bank1call CreateArenaOrBenchEnergyCardList
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ bank1call DisplayEnergyDiscardScreen
+ ld a, 2
+ ld [wcbfa], a
+.asm_2fd2a
+ bank1call HandleEnergyDiscardMenuInput
+ jr nc, .asm_2fd4a
+ ld a, 5
+ call AskWhetherToQuitSelectingCards
+ jr nc, .asm_2fd69
+ ld a, [wcbfb]
+ push af
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ bank1call DisplayEnergyDiscardScreen
+ ld a, 2
+ ld [wcbfa], a
+ pop af
+ ld [wcbfb], a
+ jr .asm_2fd2a
+.asm_2fd4a
+ call GetNextPositionInTempList_TrainerEffects
+ ldh a, [hTempCardIndex_ff98]
+ ld [hl], a
+ call RemoveCardFromDuelTempList
+ ld hl, wcbfb
+ inc [hl]
+ ldh a, [hCurSelectionItem]
+ cp $05
+ jr nc, .asm_2fd69
+ ld a, [wDuelTempList]
+ cp $ff
+ jr z, .asm_2fd69
+ bank1call DisplayEnergyDiscardMenu
+ jr .asm_2fd2a
+.asm_2fd69
+ call GetNextPositionInTempList_TrainerEffects
+ ld [hl], $ff
+ call SwapTurn
+ or a
+ ret
+; 0x2fd73
+
+ INCROM $2fd73, $2fe25
+
+; outputs in hl the next position
+; in hTempList to place a new card,
+; and increments hCurSelectionItem.
+; identical to GetNextPositionInTempList.
+GetNextPositionInTempList_TrainerEffects: ; 2fe25 (b:7e25)
+ push de
+ ld hl, hCurSelectionItem
+ ld a, [hl]
+ inc [hl]
+ ld e, a
+ ld d, $00
+ ld hl, hTempList
+ add hl, de
+ pop de
+ ret
+; 0x2fe34
+
+; handles screen for Player to select 2 cards from the hand to discard.
+; first prints text informing Player to choose cards to discard
+; then runs HandlePlayerSelection2HandCards routine.
+HandlePlayerSelection2HandCardsToDiscard: ; 2fe34 (b:7e34)
+ ldtx hl, Choose2CardsFromHandToDiscardText
+ ldtx de, ChooseTheCardToDiscardText
+; fallthrough
+
+; handles screen for Player to select 2 cards from the hand
+; to activate some Trainer card effect.
+; assumes Trainer card index being used is in [hTempCardIndex_ff9f].
+; stores selection of cards in hTempList.
+; returns carry if Player cancels operation.
+; input:
+; hl = text to print in text box;
+; de = text to print in screen header.
+HandlePlayerSelection2HandCards: ; 2fe3a (b:7e3a)
+ push de
+ call DrawWideTextBox_WaitForInput
+
+; remove the Trainer card being used from list
+; of cards to select from hand.
+ call CreateHandCardList
+ ldh a, [hTempCardIndex_ff9f]
+ call RemoveCardFromDuelTempList
+
+ xor a
+ ldh [hCurSelectionItem], a
+ pop hl
+.loop
+ push hl
+ bank1call Func_5591
+ pop hl
+ bank1call SetCardListInfoBoxText
+ push hl
+ bank1call DisplayCardList
+ pop hl
+ jr c, .set_carry ; was B pressed?
+ push hl
+ call GetNextPositionInTempList_TrainerEffects
+ ldh a, [hTempCardIndex_ff98]
+ ld [hl], a
+ call RemoveCardFromDuelTempList
+ pop hl
+ ldh a, [hCurSelectionItem]
+ cp 2
+ jr c, .loop ; is selection over?
+ or a
+ ret
+.set_carry
+ scf
+ ret
+; 0x2fe6e
+
+ INCROM $2fe6e, $2fea9
+
+; input:
+; a = move animation to play
+Func_2fea9: ; 2fea9 (b:7ea9)
+ ld [wLoadedMoveAnimation], a
+ bank1call Func_7415
+ ld bc, $0
+ ldh a, [hWhoseTurn]
+ ld h, a
+ bank1call PlayMoveAnimation
+ bank1call WaitMoveAnimation
+ ret
+; 0x2febc
+
+; heals amount of damage in register e for card in
+; Play Area location in [hTempPlayAreaLocation_ff9d].
+; plays healing animation and prints text with card's name.
+; input:
+; e = amount of HP to heal
+; [hTempPlayAreaLocation_ff9d] = Play Area location of card to heal
+HealPlayAreaCardHP: ; 2febc (b:7ebc)
+ ld e, a
+ ld d, $00
+
+; play heal animation
+ push de
+ bank1call Func_7415
+ ld a, $86
+ ld [wLoadedMoveAnimation], a
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ ld b, a
+ ld c, $01
+ ldh a, [hWhoseTurn]
+ ld h, a
+ bank1call PlayMoveAnimation
+ bank1call WaitMoveAnimation
+ pop hl
+
+; print Pokemon card name and damage healed
+ push hl
+ call LoadTxRam3
+ ld hl, $0000
+ call LoadTxRam2
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld a, 18
+ call CopyCardNameAndLevel
+ ld [hl], $00 ; terminating character on end of the name
+ ldtx hl, PokemonHealedDamageText
+ call DrawWideTextBox_WaitForInput
+ pop de
+
+; heal the target Pokemon
+ ldh a, [hTempPlayAreaLocation_ff9d]
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ add e
+ ld [hl], a
+ ret
+; 0x2ff03
- INCROM $2f513, $30000
+rept $fd
+ db $ff
+endr
diff --git a/src/engine/home.asm b/src/engine/home.asm
index d04081e..9649f69 100644
--- a/src/engine/home.asm
+++ b/src/engine/home.asm
@@ -39,8 +39,8 @@ Start: ; 0150 (0:0150)
ld sp, $fffe
push af
xor a
- ld [rIF], a
- ld [rIE], a
+ ldh [rIF], a
+ ldh [rIE], a
call ZeroRAM
ld a, $1
call BankswitchROM
@@ -87,16 +87,16 @@ VBlankHandler: ; 019b (0:019b)
.no_oam_copy
; flush scaling/windowing parameters
ldh a, [hSCX]
- ld [rSCX], a
+ ldh [rSCX], a
ldh a, [hSCY]
- ld [rSCY], a
+ ldh [rSCY], a
ldh a, [hWX]
- ld [rWX], a
+ ldh [rWX], a
ldh a, [hWY]
- ld [rWY], a
+ ldh [rWY], a
; flush LCDC
ld a, [wLCDC]
- ld [rLCDC], a
+ ldh [rLCDC], a
ei
call wVBlankFunctionTrampoline
call FlushPalettesIfRequested
@@ -186,17 +186,17 @@ SetupTimer: ; 0241 (0:0241)
ld b, -68 ; Value for Normal Speed
call CheckForCGB
jr c, .set_timer
- ld a, [rKEY1]
+ ldh a, [rKEY1]
and $80
jr z, .set_timer
ld b, $100 - 2 * 68 ; Value for CGB Double Speed
.set_timer
ld a, b
- ld [rTMA], a
+ ldh [rTMA], a
ld a, TAC_16384_HZ
- ld [rTAC], a
+ ldh [rTAC], a
ld a, TAC_START | TAC_16384_HZ
- ld [rTAC], a
+ ldh [rTAC], a
ret
; return carry if not CGB
@@ -231,36 +231,36 @@ EnableLCD: ; 0277 (0:0277)
ret nz ; assert that LCD is off
or LCDC_ON ;
ld [wLCDC], a ;
- ld [rLCDC], a ; turn LCD on
+ ldh [rLCDC], a ; turn LCD on
ld a, FLUSH_ALL_PALS
ld [wFlushPaletteFlags], a
ret
; wait for vblank, then turn LCD off
DisableLCD: ; 028a (0:028a)
- ld a, [rLCDC] ;
+ ldh a, [rLCDC] ;
bit LCDC_ENABLE_F, a ;
ret z ; assert that LCD is on
- ld a, [rIE]
+ ldh a, [rIE]
ld [wIE], a
res INT_VBLANK, a ;
- ld [rIE], a ; disable vblank interrupt
+ ldh [rIE], a ; disable vblank interrupt
.wait_vblank
- ld a, [rLY] ;
+ ldh a, [rLY] ;
cp LY_VBLANK ;
jr nz, .wait_vblank ; wait for vblank
- ld a, [rLCDC] ;
+ ldh a, [rLCDC] ;
and LCDC_OFF ;
- ld [rLCDC], a ;
+ ldh [rLCDC], a ;
ld a, [wLCDC] ;
and LCDC_OFF ;
ld [wLCDC], a ; turn LCD off
xor a
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
+ ldh [rBGP], a
+ ldh [rOBP0], a
+ ldh [rOBP1], a
ld a, [wIE]
- ld [rIE], a
+ ldh [rIE], a
ret
; set OBJ size: 8x8
@@ -293,50 +293,50 @@ Set_WD_off: ; 02d4 (0:02d4)
; enable timer interrupt
EnableInt_Timer: ; 02dd (0:02dd)
- ld a, [rIE]
+ ldh a, [rIE]
or 1 << INT_TIMER
- ld [rIE], a
+ ldh [rIE], a
ret
; enable vblank interrupt
EnableInt_VBlank: ; 02e4 (0:02e4)
- ld a, [rIE]
+ ldh a, [rIE]
or 1 << INT_VBLANK
- ld [rIE], a
+ ldh [rIE], a
ret
; enable lcdc interrupt on hblank mode
EnableInt_HBlank: ; 02eb (0:02eb)
- ld a, [rSTAT]
+ ldh a, [rSTAT]
or 1 << STAT_MODE_HBLANK
- ld [rSTAT], a
+ ldh [rSTAT], a
xor a
- ld [rIF], a
- ld a, [rIE]
+ ldh [rIF], a
+ ldh a, [rIE]
or 1 << INT_LCD_STAT
- ld [rIE], a
+ ldh [rIE], a
ret
; disable lcdc interrupt and the hblank mode trigger
DisableInt_HBlank: ; 02fb (0:02fb)
- ld a, [rSTAT]
+ ldh a, [rSTAT]
and ~(1 << STAT_MODE_HBLANK)
- ld [rSTAT], a
+ ldh [rSTAT], a
xor a
- ld [rIF], a
- ld a, [rIE]
+ ldh [rIF], a
+ ldh a, [rIE]
and ~(1 << INT_LCD_STAT)
- ld [rIE], a
+ ldh [rIE], a
ret
; initialize scroll, window, and lcdc registers, set trampoline functions
; for the lcdc and vblank interrupts, latch clock data, and enable SRAM/RTC
SetupRegisters: ; 030b (0:030b)
xor a
- ld [rSCY], a
- ld [rSCX], a
- ld [rWY], a
- ld [rWX], a
+ ldh [rSCY], a
+ ldh [rSCX], a
+ ldh [rWY], a
+ ldh [rWX], a
ld [wcab0], a
ld [wcab1], a
ld [wcab2], a
@@ -378,7 +378,7 @@ DetectConsole: ; 0349 (0:0349)
cp CONSOLE_CGB
ret nz
ld a, $01
- ld [rSVBK], a
+ ldh [rSVBK], a
call SwitchToCGBDoubleSpeed
ret
@@ -386,10 +386,10 @@ DetectConsole: ; 0349 (0:0349)
SetupPalettes: ; 036a (0:036a)
ld hl, wBGP
ld a, %11100100
- ld [rBGP], a
+ ldh [rBGP], a
ld [hli], a ; wBGP
- ld [rOBP0], a
- ld [rOBP1], a
+ ldh [rOBP0], a
+ ldh [rOBP1], a
ld [hli], a ; wOBP0
ld [hl], a ; wOBP1
xor a
@@ -505,11 +505,11 @@ SetBGP: ; 040c (0:040c)
; fallthrough
; Flush non-CGB palettes and the first CGB palette
-FlushPalette0:
+FlushPalette0: ; 040f (0:040f)
ld a, FLUSH_ONE_PAL
; fallthrough
-FlushPalettes:
+FlushPalettes: ; 0411 (0:0411)
ld [wFlushPaletteFlags], a
ld a, [wLCDC]
rla
@@ -545,11 +545,11 @@ FlushPalettesIfRequested: ; 042d (0:042d)
; flush grayscale (non-CGB) palettes
ld hl, wBGP
ld a, [hli]
- ld [rBGP], a
+ ldh [rBGP], a
ld a, [hli]
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, [hl]
- ld [rOBP1], a
+ ldh [rOBP1], a
ld a, [wConsole]
cp CONSOLE_CGB
jr z, .CGB
@@ -579,7 +579,7 @@ FlushAllCGBPalettes: ; 0458 (0:0458)
jr FlushPalettesIfRequested.done
; copy b bytes of CGB palette data starting at
-; (wBackgroundPalettesCGB + a palettes) into rBGPD or rOGPD.
+; (wBackgroundPalettesCGB + a palettes) into rBGPD or rOBPD.
CopyCGBPalettes: ; 0467 (0:0467)
add a
add a
@@ -600,7 +600,7 @@ CopyCGBPalettes: ; 0467 (0:0467)
ld [$ff00+c], a
inc c
.wait
- ld a, [rSTAT]
+ ldh a, [rSTAT]
and 1 << STAT_BUSY ; wait until hblank or vblank
jr nz, .wait
ld a, [hl]
@@ -653,7 +653,7 @@ EmptyScreen: ; 04a2 (0:04a2)
AttrBlkPacket_EmptyScreen: ; 04bf (0:04bf)
sgb ATTR_BLK, 1 ; sgb_command, length
db 1 ; number of data sets
- ; Control Code, Color Palette Designation, X1, Y1, X2, Y2
+ ; Control Code, Color Palette Designation, X1, Y1, X2, Y2
db ATTR_BLK_CTRL_INSIDE + ATTR_BLK_CTRL_LINE, 0 << 0 + 0 << 2, 0, 0, 19, 17 ; data set 1
ds 6 ; data set 2
ds 2 ; data set 3
@@ -679,21 +679,21 @@ BCCoordToBGMap0Address: ; 04cf (0:04cf)
; the A + B + Start + Select combination resets the game
ReadJoypad: ; 04de (0:04de)
ld a, JOY_BTNS_SELECT
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
cpl
and JOY_INPUT_MASK
swap a
ld b, a ; buttons data
ld a, JOY_DPAD_SELECT
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
cpl
and JOY_INPUT_MASK
or b
@@ -722,11 +722,11 @@ Reset: ; 051b (0:051b)
di
jp Start
-SaveButtonsHeld:
+SaveButtonsHeld: ; 0522 (0:0522)
ld a, c
ldh [hKeysHeld], a
ld a, JOY_BTNS_SELECT | JOY_DPAD_SELECT
- ld [rJOYP], a
+ ldh [rJOYP], a
ret
; clear joypad hmem data
@@ -824,7 +824,7 @@ CopyDMAFunction: ; 0593 (0:0593)
; CopyDMAFunction copies this function to hDMAFunction ($ff83)
DMA: ; 05a1 (0:05a1)
ld a, HIGH(wOAM)
- ld [rDMA], a
+ ldh [rDMA], a
ld a, $28
.wait
dec a
@@ -939,7 +939,7 @@ WriteBCDNumberInTextFormat: ; 0614 (0:0614)
; given a BCD digit in the (lower nybble) of register a, write it in text (ascii)
; format to hl. numbers above 9 end up converted to half-width font tiles.
-WriteBCDDigitInTextFormat:
+WriteBCDDigitInTextFormat: ; 061b (0:061b)
and $0f
add "0"
cp "9" + 1
@@ -1007,10 +1007,10 @@ TwoByteNumberToText: ; 0663 (0:0663)
ret
.get_digit
ld a, "0" - 1
-.substract_loop
+.subtract_loop
inc a
add hl, bc
- jr c, .substract_loop
+ jr c, .subtract_loop
ld [de], a
inc de
ld a, l
@@ -1175,7 +1175,7 @@ CopyGfxData: ; 070c (0:070c)
jr nz, .next_tile
ret
-; copy bc bytes from hl to de. preserves all regsters except af
+; copy bc bytes from hl to de. preserves all registers except af
CopyDataHLtoDE_SaveRegisters: ; 0732 (0:0732)
push hl
push de
@@ -1322,7 +1322,7 @@ BankswitchVRAM0: ; 07c5 (0:07c5)
push af
xor a
ldh [hBankVRAM], a
- ld [rVBK], a
+ ldh [rVBK], a
pop af
ret
@@ -1331,14 +1331,14 @@ BankswitchVRAM1: ; 07cd (0:07cd)
push af
ld a, $1
ldh [hBankVRAM], a
- ld [rVBK], a
+ ldh [rVBK], a
pop af
ret
; set current dest VRAM bank to a
BankswitchVRAM: ; 07d6 (0:07d6)
ldh [hBankVRAM], a
- ld [rVBK], a
+ ldh [rVBK], a
ret
; switch to CGB Normal Speed Mode if playing on CGB and current mode is Double Speed Mode
@@ -1361,20 +1361,20 @@ SwitchToCGBDoubleSpeed: ; 07e7 (0:07e7)
; switch between CGB Double Speed Mode and Normal Speed Mode
CGBSpeedSwitch: ; 07f1 (0:07f1)
- ld a, [rIE]
+ ldh a, [rIE]
push af
xor a
- ld [rIE], a
+ ldh [rIE], a
set 0, [hl]
xor a
- ld [rIF], a
- ld [rIE], a
+ ldh [rIF], a
+ ldh [rIE], a
ld a, $30
- ld [rJOYP], a
+ ldh [rJOYP], a
stop
call SetupTimer
pop af
- ld [rIE], a
+ ldh [rIE], a
ret
; validate the saved data in SRAM
@@ -1928,7 +1928,7 @@ Pal23Packet_0b00: ; 0b00 (0:0b00)
AttrBlkPacket_0b10: ; 0b10 (0:0b10)
sgb ATTR_BLK, 1 ; sgb_command, length
db 1 ; number of data sets
- ; Control Code, Color Palette Designation, X1, Y1, X2, Y2
+ ; Control Code, Color Palette Designation, X1, Y1, X2, Y2
db ATTR_BLK_CTRL_INSIDE + ATTR_BLK_CTRL_LINE, 1 << 0 + 2 << 2, 5, 5, 10, 10 ; data set 1
ds 6 ; data set 2
ds 2 ; data set 3
@@ -1983,30 +1983,30 @@ DetectSGB: ; 0b59 (0:0b59)
call Wait
ld hl, MltReq2Packet
call SendSGB
- ld a, [rJOYP]
+ ldh a, [rJOYP]
and %11
cp SNES_JOYPAD1
jr nz, .sgb
ld a, P15
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
ld a, P15 | P14
- ld [rJOYP], a
+ ldh [rJOYP], a
ld a, P14
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
ld a, P15 | P14
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
and %11
cp SNES_JOYPAD1
jr nz, .sgb
@@ -2036,14 +2036,14 @@ MltReq2Packet: ; 0bbb (0:0bbb)
Func_0bcb: ; 0bcb (0:0bcb)
di
push de
-.wait_vbalnk
- ld a, [rLY]
+.wait_vblank
+ ldh a, [rLY]
cp LY_VBLANK + 3
- jr nz, .wait_vbalnk
+ jr nz, .wait_vblank
ld a, LCDC_BGON | LCDC_OBJON | LCDC_WIN9C00
- ld [rLCDC], a
+ ldh [rLCDC], a
ld a, %11100100
- ld [rBGP], a
+ ldh [rBGP], a
ld de, v0Tiles1
ld bc, v0BGMap0 - v0Tiles1
.tiles_loop
@@ -2069,7 +2069,7 @@ Func_0bcb: ; 0bcb (0:0bcb)
dec c
jr nz, .bgmap_outer_loop
ld a, LCDC_BGON | LCDC_OBJON | LCDC_WIN9C00 | LCDC_ON
- ld [rLCDC], a
+ ldh [rLCDC], a
pop hl
call SendSGB
ei
@@ -2098,12 +2098,12 @@ HblankCopyDataHLtoDE: ; 0c19 (0:0c19)
.loop
ei
di
- ld a, [rSTAT] ;
+ ldh a, [rSTAT] ;
and STAT_LCDC_STATUS ;
jr nz, .loop ; assert hblank
ld a, [hl]
ld [de], a
- ld a, [rSTAT] ;
+ ldh a, [rSTAT] ;
and STAT_LCDC_STATUS ;
jr nz, .loop ; assert still in hblank
ei
@@ -2120,12 +2120,12 @@ HblankCopyDataDEtoHL: ; 0c32 (0:0c32)
.loop
ei
di
- ld a, [rSTAT] ;
+ ldh a, [rSTAT] ;
and STAT_LCDC_STATUS ;
jr nz, .loop ; assert hblank
ld a, [de]
ld [hl], a
- ld a, [rSTAT] ;
+ ldh a, [rSTAT] ;
and STAT_LCDC_STATUS ;
jr nz, .loop ; assert still in hblank
ei
@@ -2228,13 +2228,13 @@ SerialTimerHandler: ; 0c91 (0:0c91)
jr z, .check_for_timeout
ret
.begin_transfer
- ld a, [rSC] ;
+ ldh a, [rSC] ;
add a ; make sure that no serial transfer is active
ret c ;
ld a, SC_INTERNAL
- ld [rSC], a ; use internal clock
+ ldh [rSC], a ; use internal clock
ld a, SC_START | SC_INTERNAL
- ld [rSC], a ; use internal clock, set transfer start flag
+ ldh [rSC], a ; use internal clock, set transfer start flag
ret
.check_for_timeout
; sets bit7 of [wSerialFlags] if the serial interrupt hasn't triggered
@@ -2273,11 +2273,11 @@ Func_0cc5: ; 0cc5 (0:0cc5)
ret
.asm_cdc
ld a, $29
- ld [rSB], a
+ ldh [rSB], a
ld a, SC_INTERNAL
- ld [rSC], a
+ ldh [rSC], a
ld a, SC_START | SC_INTERNAL
- ld [rSC], a
+ ldh [rSC], a
.asm_ce8
ld a, [hl]
or a
@@ -2330,17 +2330,17 @@ SerialHandler: ; 0d26 (0:0d26)
or a ;
jr z, .asm_d55 ; skip ahead if [wSerialOp] zero
; send/receive a byte
- ld a, [rSB]
+ ldh a, [rSB]
call SerialHandleRecv
call SerialHandleSend ; returns byte to actually send
push af
.wait_for_completion
- ld a, [rSC]
+ ldh a, [rSC]
add a
jr c, .wait_for_completion
pop af
; end send/receive
- ld [rSB], a ; prepare sending byte (from Func_0dc8?)
+ ldh [rSB], a ; prepare sending byte (from Func_0dc8?)
ld a, [wSerialOp]
cp $29
jr z, .done ; if [wSerialOp] != $29, use external clock
@@ -2348,16 +2348,16 @@ SerialHandler: ; 0d26 (0:0d26)
.asm_d55
ld a, $1
ld [wSerialRecvCounter], a
- ld a, [rSB]
+ ldh a, [rSB]
ld [wSerialRecvBuf], a
ld a, $ac
- ld [rSB], a
+ ldh [rSB], a
ld a, [wSerialRecvBuf]
cp $12 ; if [wSerialRecvBuf] != $12, use external clock
jr z, .done ; and prepare for next byte. either way, return
.asm_d6a
ld a, SC_START | SC_EXTERNAL
- ld [rSC], a ; transfer start, use external clock
+ ldh [rSC], a ; transfer start, use external clock
.done
ld hl, wSerialCounter
inc [hl]
@@ -2592,25 +2592,25 @@ SerialExchangeBytes: ; 0e63 (0:0e63)
Func_0e8e: ; 0e8e (0:0e8e)
call ClearSerialData
ld a, $12
- ld [rSB], a ; send $12
+ ldh [rSB], a ; send $12
ld a, SC_START | SC_EXTERNAL
- ld [rSC], a ; use external clock, set transfer start flag
- ld a, [rIF]
+ ldh [rSC], a ; use external clock, set transfer start flag
+ ldh a, [rIF]
and ~(1 << INT_SERIAL)
- ld [rIF], a ; clear serial interrupt flag
- ld a, [rIE]
+ ldh [rIF], a ; clear serial interrupt flag
+ ldh a, [rIE]
or 1 << INT_SERIAL ; enable serial interrupt
- ld [rIE], a
+ ldh [rIE], a
ret
; disable serial interrupt, and clear rSB, rSC, and serial registers in WRAM
ResetSerial: ; 0ea6 (0:0ea6)
- ld a, [rIE]
+ ldh a, [rIE]
and ~(1 << INT_SERIAL)
- ld [rIE], a
+ ldh [rIE], a
xor a
- ld [rSB], a
- ld [rSC], a
+ ldh [rSB], a
+ ldh [rSC], a
; fallthrough
; zero serial registers in WRAM
@@ -2778,8 +2778,8 @@ ExchangeRNG: ; 0f58 (0:0f58)
; send 10 bytes of data to the other game from hOppActionTableIndex, hTempCardIndex_ff9f,
; hTemp_ffa0, and hTempPlayAreaLocation_ffa1, and hTempRetreatCostCards.
; finally exchange RNG data.
-; the receiving side will use this data to read the OPP_ACTION_* value in
-; [hOppActionTableIndex] and match it by calling the correspoding OppAction* function
+; the receiving side will use this data to read the OPPACTION_* value in
+; [hOppActionTableIndex] and match it by calling the corresponding OppAction* function
SetOppAction_SerialSendDuelData: ; 0f7f (0:0f7f)
push hl
push bc
@@ -3031,7 +3031,7 @@ ShuffleDeck: ; 10bc (0:10bc)
ret
; draw a card from the turn holder's deck, saving its location as CARD_LOCATION_JUST_DRAWN.
-; returns carry if deck is empty, nc if a card was succesfully drawn.
+; returns carry if deck is empty, nc if a card was successfully drawn.
; AddCardToHand is meant to be called next (unless this function returned carry).
DrawCardFromDeck: ; 10cf (0:10cf)
push hl
@@ -3604,6 +3604,7 @@ GetCardIDFromDeckIndex: ; 1324 (0:1324)
ret
; remove card c from wDuelTempList (it contains a $ff-terminated list of deck indexes)
+; returns carry if no matches were found.
RemoveCardFromDuelTempList: ; 132f (0:132f)
push hl
push de
@@ -3703,9 +3704,9 @@ LoadCardDataToBuffer2_FromDeckIndex: ; 138c (0:138c)
ret
; evolve a turn holder's Pokemon card in the play area slot determined by hTempPlayAreaLocation_ff9d
-; into another turn holder's Pokemon card identifier by it's deck index (0-59) in hTempCardIndex_ff98.
-; return nc if evolution was succesful.
-EvolvePokemonCard: ; 13a2 (0:13a2)
+; into another turn holder's Pokemon card identifier by its deck index (0-59) in hTempCardIndex_ff98.
+; return nc if evolution was successful.
+EvolvePokemonCardIfPossible: ; 13a2 (0:13a2)
; first make sure the attempted evolution is viable
ldh a, [hTempCardIndex_ff98]
ld d, a
@@ -3713,7 +3714,12 @@ EvolvePokemonCard: ; 13a2 (0:13a2)
ld e, a
call CheckIfCanEvolveInto
ret c ; return if it's not capable of evolving into the selected Pokemon
- ; place the evolved Pokemon card in the play area location of the pre-evolved Pokemon card
+; fallthrough
+
+; evolve a turn holder's Pokemon card in the play area slot determined by hTempPlayAreaLocation_ff9d
+; into another turn holder's Pokemon card identifier by its deck index (0-59) in hTempCardIndex_ff98.
+EvolvePokemonCard: ; 13ac (0:13ac)
+; place the evolved Pokemon card in the play area location of the pre-evolved Pokemon card
ldh a, [hTempPlayAreaLocation_ff9d]
ld e, a
add DUELVARS_ARENA_CARD
@@ -3738,7 +3744,7 @@ EvolvePokemonCard: ; 13a2 (0:13a2)
ld [hl], a
; reset status (if in arena) and set the flag that prevents it from evolving again this turn
ld a, e
- add DUELVARS_ARENA_CARD_FLAGS_C2
+ add DUELVARS_ARENA_CARD_FLAGS
ld l, a
ld [hl], $00
ld a, e
@@ -3785,7 +3791,7 @@ CheckIfCanEvolveInto: ; 13f7 (0:13f7)
jr nz, .cant_evolve ; jump if they are incompatible to evolve
pop de
ld a, e
- add DUELVARS_ARENA_CARD_FLAGS_C2
+ add DUELVARS_ARENA_CARD_FLAGS
call GetTurnDuelistVariable
and CAN_EVOLVE_THIS_TURN
jr nz, .can_evolve
@@ -3810,7 +3816,7 @@ CheckIfCanEvolveInto: ; 13f7 (0:13f7)
; return carry if not basic to stage 2 evolution, or if evolution not possible this turn.
CheckIfCanEvolveInto_BasicToStage2: ; 142b (0:142b)
ld a, e
- add DUELVARS_ARENA_CARD_FLAGS_C2
+ add DUELVARS_ARENA_CARD_FLAGS
call GetTurnDuelistVariable
and CAN_EVOLVE_THIS_TURN
jr nz, .can_evolve
@@ -3904,7 +3910,7 @@ PutHandPokemonCardInPlayArea: ; 1485 (0:1485)
ld l, a
ld a, [wLoadedCard2HP]
ld [hl], a ; set card's HP
- ld a, DUELVARS_ARENA_CARD_FLAGS_C2
+ ld a, DUELVARS_ARENA_CARD_FLAGS
add e
ld l, a
ld [hl], $0
@@ -4051,7 +4057,7 @@ SwapPlayAreaPokemon: ; 1548 (0:1548)
call .swap_duelvar
ld a, DUELVARS_ARENA_CARD_HP
call .swap_duelvar
- ld a, DUELVARS_ARENA_CARD_FLAGS_C2
+ ld a, DUELVARS_ARENA_CARD_FLAGS
call .swap_duelvar
ld a, DUELVARS_ARENA_CARD_STAGE
call .swap_duelvar
@@ -4328,7 +4334,7 @@ CopyMoveDataAndDamage_FromDeckIndex: ; 16c0 (0:16c0)
call LoadCardDataToBuffer1_FromDeckIndex
; fallthrough
-CopyMoveDataAndDamage:
+CopyMoveDataAndDamage: ; 16ca (0:16ca)
ld a, [wLoadedCard1ID]
ld [wTempCardID_ccc2], a
ld hl, wLoadedCard1Move1
@@ -4379,8 +4385,8 @@ Func_16f6: ; 16f6 (0:16f6)
ld [wEffectFailed], a
ld [wIsDamageToSelf], a
ld [wccef], a
- ld [wccf0], a
- ld [wNoEffectFromStatus], a
+ ld [wMetronomeEnergyCost], a
+ ld [wNoEffectFromWhichStatus], a
bank1call ClearNonTurnTemporaryDuelvars_CopyStatus
ret
@@ -4460,7 +4466,7 @@ PlayAttackAnimation_DealAttackDamage: ; 179a (0:179a)
call WaitMoveAnimation
pop hl
pop de
- call SubstractHP
+ call SubtractHP
ld a, [wDuelDisplayedScreen]
cp DUEL_MAIN_SCENE
jr nz, .skip_draw_huds
@@ -4516,7 +4522,7 @@ ClearNonTurnTemporaryDuelvars_ResetCarry: ; 1823 (0:1823)
ret
; called when attacker deals damage to itself due to confusion
-; display the corresponding animation and deal damage to self
+; display the corresponding animation and deal 20 damage to self
HandleConfusionDamageToSelf: ; 1828 (0:1828)
bank1call DrawDuelMainScene
ld a, 1
@@ -4690,13 +4696,17 @@ LoadNonPokemonCardEffectCommands: ; 1944 (0:1944)
ld [de], a
ret
-Func_1955: ; 1955 (0:1955)
+; Make turn holder deal A damage to self due to recoil (e.g. Thrash, Selfdestruct)
+; display recoil animation
+DealRecoilDamageToSelf: ; 1955 (0:1955)
push af
ld a, $7a
ld [wLoadedMoveAnimation], a
pop af
; fallthrough
+; Make turn holder deal A damage to self due to confusion
+; display animation at wLoadedMoveAnimation
DealConfusionDamageToSelf: ; 195c (0:195c)
ld hl, wDamage
ld [hli], a
@@ -4889,10 +4899,10 @@ ApplyAttachedDefender: ; 1a7e (0:1a7e)
ld d, a
ret
-; hl: address to substract HP from
-; de: how much HP to substract (damage to deal)
+; hl: address to subtract HP from
+; de: how much HP to subtract (damage to deal)
; returns carry if the HP does not become 0 as a result
-SubstractHP: ; 1a96 (0:1a96)
+SubtractHP: ; 1a96 (0:1a96)
push hl
push de
ld a, [hl]
@@ -4965,10 +4975,18 @@ PrintKnockedOut: ; 1ad3 (0:1ad3)
; deal damage to turn holder's Pokemon card at play area location at b (PLAY_AREA_*).
; damage to deal is given in de.
; shows the defending player's play area screen when dealing the damage
-; instead of the main duel interface, and has a fixed move animation.
-DealDamageToPlayAreaPokemon: ; 1af3 (0:1af3)
+; instead of the main duel interface with regular attack animation.
+DealDamageToPlayAreaPokemon_RegularAnim: ; 1af3 (0:1af3)
ld a, $78
ld [wLoadedMoveAnimation], a
+; fallthrough
+
+; deal damage to turn holder's Pokemon card at play area location at b (PLAY_AREA_*).
+; damage to deal is given in de.
+; shows the defending player's play area screen when dealing the damage
+; instead of the main duel interface.
+; plays animation that is loaded in wLoadedMoveAnimation.
+DealDamageToPlayAreaPokemon: ; 1af8 (0:1af8)
ld a, b
ld [wTempPlayAreaLocation_cceb], a
or a ; cp PLAY_AREA_ARENA
@@ -5172,9 +5190,13 @@ MoveCardToDiscardPileIfInArena: ; 1c13 (0:1c13)
jr c, .next_card
ret
-; calculate damage of card at CARD_LOCATION_* in e
-; return the result in a
-GetCardDamage: ; 1c35 (0:1c35)
+; calculate damage and max HP of card at PLAY_AREA_* in e.
+; input:
+; e = PLAY_AREA_* of card;
+; output:
+; a = damage;
+; c = max HP.
+GetCardDamageAndMaxHP: ; 1c35 (0:1c35)
push hl
push de
ld a, DUELVARS_ARENA_CARD
@@ -5669,7 +5691,7 @@ DrawRegularTextBoxDMG: ; 1e88 (0:1e88)
; continue drawing a labeled or regular textbox on DMG or SGB:
; body and bottom line of either type of textbox
-ContinueDrawingTextBoxDMGorSGB:
+ContinueDrawingTextBoxDMGorSGB: ; 1e93 (0:1e93)
dec c
dec c
.draw_text_box_body_loop
@@ -5720,7 +5742,7 @@ CopyLine: ; 1ea5 (0:1ea5)
ret
; DrawRegularTextBox branches here on CGB console
-DrawRegularTextBoxCGB:
+DrawRegularTextBoxCGB: ; 1ec9 (0:1ec9)
call DECoordToBGMap0Address
; top line (border) of the text box
ld a, SYM_BOX_TOP
@@ -5730,7 +5752,7 @@ DrawRegularTextBoxCGB:
; continue drawing a labeled or regular textbox on CGB:
; body and bottom line of either type of textbox
-ContinueDrawingTextBoxCGB:
+ContinueDrawingTextBoxCGB: ; 1ed4 (0:1ed4)
dec c
dec c
.draw_text_box_body_loop
@@ -5764,7 +5786,7 @@ CopyCurrentLineTilesAndAttrCGB: ; 1efb (0:1efb)
pop hl
; fallthrough
-CopyCurrentLineAttrCGB:
+CopyCurrentLineAttrCGB: ; 1f00 (0:1f00)
call BankswitchVRAM1
ld a, [wTextBoxFrameType] ; on CGB, wTextBoxFrameType determines the palette and the other attributes
ld e, a
@@ -5785,7 +5807,7 @@ DrawRegularTextBoxSGB: ; 1f0f (0:1f0f)
ret z
; fallthrough
-ColorizeTextBoxSGB:
+ColorizeTextBoxSGB: ; 1f1b (0:1f1b)
push bc
push de
ld hl, wTempSGBPacket
@@ -5830,7 +5852,7 @@ ColorizeTextBoxSGB:
AttrBlkPacket_TextBox: ; 1f4f (0:1f4f)
sgb ATTR_BLK, 1 ; sgb_command, length
db 1 ; number of data sets
- ; Control Code, Color Palette Designation, X1, Y1, X2, Y2
+ ; Control Code, Color Palette Designation, X1, Y1, X2, Y2
db ATTR_BLK_CTRL_INSIDE + ATTR_BLK_CTRL_LINE, 0 << 0 + 1 << 2, 0, 0, 0, 0 ; data set 1
ds 6 ; data set 2
ds 2 ; data set 3
@@ -6124,7 +6146,7 @@ LoadDuelCardSymbolTiles2: ; 20c4 (0:20c4)
ld b, $c
jr CopyFontsOrDuelGraphicsTiles
-; load the face down basic / stage1 / stage2 card images shown in the ckeck Pokemon screens
+; load the face down basic / stage1 / stage2 card images shown in the check Pokemon screens
LoadDuelFaceDownCardTiles: ; 20d8 (0:20d8)
ld b, $10
jr LoadDuelCheckPokemonScreenTiles.got_num_tiles
@@ -6182,7 +6204,7 @@ LoadSymbolsFont: ; 2119 (0:2119)
; if $4000 ≤ hl ≤ $7fff
; copy b tiles from Gfx2:hl to de
CopyFontsOrDuelGraphicsTiles: ; 2121 (0:2121)
- ld a, BANK(Fonts); BANK(DuelGraphics)
+ ld a, BANK(Fonts) ; BANK(DuelGraphics)
call BankpushROM
ld c, TILE_SIZE
call CopyGfxData
@@ -6217,7 +6239,7 @@ Func_212f: ; 212f (0:212f)
ld b, $30
jr CopyFontsOrDuelGraphicsTiles
-; load the graphics and draw the duel box message given a BOXMSC_* constant in a
+; load the graphics and draw the duel box message given a BOXMSG_* constant in a
DrawDuelBoxMessage: ; 2167 (0:2167)
ld l, a
ld h, 40 tiles / 4 ; boxes are 10x4 tiles
@@ -6237,10 +6259,10 @@ DrawDuelBoxMessage: ; 2167 (0:2167)
jp FillRectangle
; load the tiles for the latin, katakana, and hiragana fonts into VRAM
-; from gfx/fonts/full_width/3.1bpp and gfx/fonts/full_width/4.t3.1bpp
+; from gfx/fonts/full_width/3.1bpp and gfx/fonts/full_width/4.1bpp
LoadFullWidthFontTiles: ; 2189 (0:2189)
ld hl, FullWidthFonts + $3cc tiles_1bpp - $4000
- ld a, BANK(Fonts); BANK(DuelGraphics)
+ ld a, BANK(Fonts) ; BANK(DuelGraphics)
call BankpushROM
push hl
ld e, l
@@ -6866,10 +6888,10 @@ TwoByteNumberToTxSymbol_TrimLeadingZeros: ; 245d (0:245d)
ld [de], a
inc de
ld a, SYM_0 - 1
-.substract_loop
+.subtract_loop
inc a
add hl, bc
- jr c, .substract_loop
+ jr c, .subtract_loop
ld [de], a
inc de
ld a, l
@@ -6999,7 +7021,7 @@ ConvertTileNumberToTileDataAddress: ; 2518 (0:2518)
; create, at wTextTileBuffer, a full-width font tile given its
; within the full-width font graphics (FullWidthFonts) in hl
CreateFullWidthFontTile: ; 252e (0:252e)
- ld a, BANK(Fonts); BANK(DuelGraphics)
+ ld a, BANK(Fonts) ; BANK(DuelGraphics)
call BankpushROM
ld de, wTextTileBuffer
push de
@@ -7465,7 +7487,7 @@ PrintCardListItems: ; 2799 (0:2799)
; like PrintCardListItems, except more parameters are already initialized
; called instead of PrintCardListItems to reload the list after moving up or down
-ReloadCardListItems:
+ReloadCardListItems: ; 27af (0:27af)
ld e, SYM_SPACE
ld a, [wListScrollOffset]
or a
@@ -7956,7 +7978,7 @@ DrawNarrowTextBox_WaitForInput: ; 2a7c (0:2a7c)
ret
NarrowTextBoxMenuParameters: ; 2a96 (0:2a96)
- db 10, 17 ; corsor x, cursor y
+ db 10, 17 ; cursor x, cursor y
db 1 ; y displacement between items
db 1 ; number of items
db SYM_CURSOR_D ; cursor tile number
@@ -8042,7 +8064,7 @@ YesOrNoMenuWithText_LeftAligned: ; 2afe (0:2afe)
lb de, 2, 16 ; x, y
; fallthrough
-HandleYesOrNoMenu:
+HandleYesOrNoMenu: ; 2b0a (0:2b0a)
ld a, d
ld [wLeftmostItemCursorX], a
lb bc, SYM_CURSOR_R, SYM_SPACE ; cursor tile, tile behind cursor
@@ -8977,7 +8999,7 @@ LoadCardGfx: ; 2fa0 (0:2fa0)
; identical to CopyFontsOrDuelGraphicsTiles
CopyFontsOrDuelGraphicsTiles2: ; 2fcb (0:2fcb)
- ld a, BANK(Fonts); BANK(DuelGraphics)
+ ld a, BANK(Fonts) ; BANK(DuelGraphics)
call BankpushROM
ld c, TILE_SIZE
call CopyGfxData
@@ -9116,7 +9138,7 @@ AddToDamage: ; 3055 (0:3055)
ret
; [wDamage] -= a
-SubstractFromDamage: ; 3061 (0:3061)
+SubtractFromDamage: ; 3061 (0:3061)
push de
push hl
ld e, a
@@ -9400,14 +9422,14 @@ Func_31e5: ; 31e5 (0:31e5)
jr Func_31e0
Func_31ea: ; 31ea (0:31ea)
- ld a, [rSB]
+ ldh a, [rSB]
ld [wce6e], a
Func_31ef: ; 31ef (0:31ef)
xor a
jr Func_31e0
Func_31f2: ; 31f2 (0:31f2)
- ld a, [rSB]
+ ldh a, [rSB]
ld [wce6f], a
xor a
ld [wce63], a
@@ -9434,11 +9456,11 @@ Func_31fc: ; 31fc (0:31fc)
; fallthrough
Func_3212: ; 3212 (0:3212)
- ld [rSB], a
+ ldh [rSB], a
ld a, SC_INTERNAL
- ld [rSC], a
+ ldh [rSC], a
ld a, SC_START | SC_INTERNAL
- ld [rSC], a
+ ldh [rSC], a
ret
; doubles the damage at de if swords dance or focus energy was used
@@ -9640,7 +9662,7 @@ HandleStrikesBack_AgainstDamagingMove: ; 3317 (0:3317)
.in_bench
push hl
push de
- ; substract 10 HP from attacking Pokemon (turn holder's arena Pokemon)
+ ; subtract 10 HP from attacking Pokemon (turn holder's arena Pokemon)
call SwapTurn
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
@@ -9650,7 +9672,7 @@ HandleStrikesBack_AgainstDamagingMove: ; 3317 (0:3317)
push af
push hl
ld de, 10
- call SubstractHP
+ call SubtractHP
ld a, [wLoadedCard2ID]
ld [wTempNonTurnDuelistCardID], a
ld hl, 10
@@ -10249,7 +10271,7 @@ ApplyStrikesBack_AgainstResidualMove: ; 36a2 (0:36a2)
pop de
push af
push hl
- call SubstractHP
+ call SubtractHP
ldtx hl, ReceivesDamageDueToStrikesBackText
call DrawWideTextBox_PrintText
pop hl
@@ -10297,7 +10319,7 @@ GetPlayAreaCardColor: ; 36f7 (0:36f7)
ld e, a
add DUELVARS_ARENA_CARD_CHANGED_TYPE
call GetTurnDuelistVariable
- bit 7, a
+ bit HAS_CHANGED_COLOR_F, a
jr nz, .has_changed_color
.regular_color
ld a, e
@@ -10343,7 +10365,7 @@ GetArenaCardWeakness: ; 3730 (0:3730)
ld a, DUELVARS_ARENA_CARD
; fallthrough
-GetCardWeakness:
+GetCardWeakness: ; 3739 (0:3739)
call GetTurnDuelistVariable
call LoadCardDataToBuffer2_FromDeckIndex
ld a, [wLoadedCard2Weakness]
@@ -10368,7 +10390,7 @@ GetArenaCardResistance: ; 374a (0:374a)
ld a, DUELVARS_ARENA_CARD
; fallthrough
-GetCardResistance:
+GetCardResistance: ; 3753 (0:3753)
call GetTurnDuelistVariable
call LoadCardDataToBuffer2_FromDeckIndex
ld a, [wLoadedCard2Resistance]
@@ -11047,9 +11069,10 @@ Func_3b11: ; 3b11 (0:3b11)
Func_3b21: ; 3b21 (0:3b21)
ldh a, [hBankROM]
push af
- ld a, $07
+ ld a, BANK(Func_1c8bc)
call BankswitchROM
- call $48bc
+ call Func_1c8bc
+
pop af
call BankswitchROM
ret
@@ -11255,7 +11278,7 @@ CallBC: ; 3c46 (0:3c46)
DoFrameIfLCDEnabled: ; 3c48 (0:3c48)
push af
- ld a, [rLCDC]
+ ldh a, [rLCDC]
bit LCDC_ENABLE_F, a
jr z, .done
push bc
@@ -11461,7 +11484,7 @@ DrawSpriteAnimationFrame: ; 3cc4 (0:3cc4)
call BankswitchROM
ret
-; Loads a pointer to the current animation frame into SPRITE_ANIM_FRAME_DATA_POINTER using
+; Loads a pointer to the current animation frame into SPRITE_ANIM_FRAME_DATA_POINTER using
; the current frame's offset
; [wd4ca] - current frame offset
; wTempPointer* - Pointer to current Animation
@@ -11525,7 +11548,7 @@ GetSpriteAnimBufferProperty: ; 3dbf (0:3dbf)
ld a, [wWhichSprite]
; fallthrough
-GetSpriteAnimBufferProperty_SpriteInA:
+GetSpriteAnimBufferProperty_SpriteInA: ; 3dc2 (0:3dc2)
cp SPRITE_ANIM_BUFFER_CAPACITY
jr c, .got_sprite
debug_ret
diff --git a/src/gfx.asm b/src/gfx.asm
index d568802..2cf2d77 100644
--- a/src/gfx.asm
+++ b/src/gfx.asm
@@ -11,7 +11,7 @@ INCBIN "gfx/fonts/full_width/0_2_digits_kanji1.1bpp"
INCBIN "gfx/fonts/full_width/1_kanji2.1bpp"
INCBIN "gfx/fonts/full_width/2_kanji3.1bpp"
INCBIN "gfx/fonts/full_width/3.1bpp"
-INCBIN "gfx/fonts/full_width/4.t3.1bpp"
+INCBIN "gfx/fonts/full_width/4.1bpp"
HalfWidthFont:: ; 76668 (1d:6668)
INCBIN "gfx/fonts/half_width.1bpp"
@@ -25,17 +25,17 @@ DuelCardHeaderGraphics:: ; 76ce8 (1d:6ce8)
INCBIN "gfx/duel/card_headers.2bpp"
DuelDmgSgbSymbolGraphics:: ; 76fe8 (1d:6fe8)
-INCBIN "gfx/duel/dmg_sgb_symbols.t7.2bpp"
+INCBIN "gfx/duel/dmg_sgb_symbols.2bpp"
DuelCgbSymbolGraphics:: ; 777f8 (1d:77f8)
-INCBIN "gfx/duel/cgb_symbols.t7.2bpp", $0, $808
+INCBIN "gfx/duel/cgb_symbols.2bpp", $0, $808
SECTION "Gfx 2", ROMX
-INCBIN "gfx/duel/cgb_symbols.t7.2bpp", $808, $8
+INCBIN "gfx/duel/cgb_symbols.2bpp", $808, $8
DuelOtherGraphics:: ; 78008 (1e:4008)
-INCBIN "gfx/duel/other.t7.2bpp"
+INCBIN "gfx/duel/other.2bpp"
DuelBoxMessages:: ; 78318 (1e:4318)
INCBIN "gfx/duel/box_messages.2bpp"
@@ -50,7 +50,7 @@ SECTION "Gfx 3", ROMX
IshiharaTilesetGfx: ; 87828 (21:7828)
dw $4d
- INCBIN "gfx/tilesets/ishihara.t3.2bpp"
+ INCBIN "gfx/tilesets/ishihara.2bpp"
SolidTiles1: ; 87cfa (21:7cfa)
dw $4
@@ -78,35 +78,35 @@ SECTION "Gfx 4", ROMX
OverworldMapTiles: ; 88000 (22:4000)
dw $c1
- INCBIN "gfx/overworld_map.t15.2bpp"
+ INCBIN "gfx/overworld_map.2bpp"
MasonLaboratoryTilesetGfx: ; 88c12 (22:4c12)
dw $97
- INCBIN "gfx/tilesets/masonlaboratory.t9.2bpp"
+ INCBIN "gfx/tilesets/masonlaboratory.2bpp"
ClubEntranceTilesetGfx: ; 89584 (22:5584)
dw $81
- INCBIN "gfx/tilesets/clubentrance.t15.2bpp"
+ INCBIN "gfx/tilesets/clubentrance.2bpp"
ClubLobbyTilesetGfx: ; 89d96 (22:5d96)
dw $78
- INCBIN "gfx/tilesets/clublobby.t8.2bpp"
+ INCBIN "gfx/tilesets/clublobby.2bpp"
FightingClubTilesetGfx: ; 8a518 (22:6518)
dw $63
- INCBIN "gfx/tilesets/fightingclub.t13.2bpp"
+ INCBIN "gfx/tilesets/fightingclub.2bpp"
RockClubTilesetGfx: ; 8ab4a (22:6b4a)
dw $3c
- INCBIN "gfx/tilesets/rockclub.t4.2bpp"
+ INCBIN "gfx/tilesets/rockclub.2bpp"
WaterClubTilesetGfx: ; 8af0c (22:6f0c)
dw $a1
- INCBIN "gfx/tilesets/waterclub.t15.2bpp"
+ INCBIN "gfx/tilesets/waterclub.2bpp"
GrassClubTilesetGfx: ; 8b91e (22:791e)
dw $57
- INCBIN "gfx/tilesets/grassclub.t9.2bpp"
+ INCBIN "gfx/tilesets/grassclub.2bpp"
OWSpritePlayer: ; 8be90 (22:7e90)
dw $14
@@ -122,35 +122,35 @@ SECTION "Gfx 5", ROMX
LightningClubTilesetGfx: ; 8c000 (23:4000)
dw $83
- INCBIN "gfx/tilesets/lightningclub.t13.2bpp"
+ INCBIN "gfx/tilesets/lightningclub.2bpp"
PsychicClubTilesetGfx: ; 8c832 (23:4832)
dw $3a
- INCBIN "gfx/tilesets/psychicclub.t6.2bpp"
+ INCBIN "gfx/tilesets/psychicclub.2bpp"
ScienceClubTilesetGfx: ; 8cbd4 (23:4bd4)
dw $52
- INCBIN "gfx/tilesets/scienceclub.t14.2bpp"
+ INCBIN "gfx/tilesets/scienceclub.2bpp"
FireClubTilesetGfx: ; 8d0f6 (23:50f6)
dw $57
- INCBIN "gfx/tilesets/fireclub.t9.2bpp"
+ INCBIN "gfx/tilesets/fireclub.2bpp"
ChallengeHallTilesetGfx: ; 8d668 (23:5668)
dw $9d
- INCBIN "gfx/tilesets/challengehall.t3.2bpp"
+ INCBIN "gfx/tilesets/challengehall.2bpp"
PokemonDomeEntranceTilesetGfx: ; 8e03a (23:603a)
dw $4e
- INCBIN "gfx/tilesets/pokemondomeentrance.t2.2bpp"
+ INCBIN "gfx/tilesets/pokemondomeentrance.2bpp"
PokemonDomeTilesetGfx: ; 8e51c (23:651c)
dw $cf
- INCBIN "gfx/tilesets/pokemondome.t1.2bpp"
+ INCBIN "gfx/tilesets/pokemondome.2bpp"
HallOfHonorTilesetGfx: ; 8f20e (23:720e)
dw $79
- INCBIN "gfx/tilesets/hallofhonor.t7.2bpp"
+ INCBIN "gfx/tilesets/hallofhonor.2bpp"
MedalGfx: ; 8f9a0 (23:79a0)
dw $48
@@ -187,15 +187,15 @@ SECTION "Gfx 6", ROMX
CardPop1Gfx: ; 90000 (24:4000)
dw $bd
- INCBIN "gfx/cardpop/cardpop1.t3.2bpp"
+ INCBIN "gfx/cardpop/cardpop1.2bpp"
CardPop2Gfx: ; 90bd2 (24:4bd2)
dw $6d
- INCBIN "gfx/cardpop/cardpop2.t3.2bpp"
+ INCBIN "gfx/cardpop/cardpop2.2bpp"
CardPop3Gfx: ; 912a4 (24:52a4)
dw $5d
- INCBIN "gfx/cardpop/cardpop3.t3.2bpp"
+ INCBIN "gfx/cardpop/cardpop3.2bpp"
Colosseum1Gfx: ; 91876 (24:5876)
dw $60
@@ -203,7 +203,7 @@ Colosseum1Gfx: ; 91876 (24:5876)
Colosseum2Gfx: ; 91e78 (24:5e78)
dw $56
- INCBIN "gfx/booster_packs/colosseum2.t10.2bpp"
+ INCBIN "gfx/booster_packs/colosseum2.2bpp"
Evolution1Gfx: ; 923da (24:63da)
dw $60
@@ -211,7 +211,7 @@ Evolution1Gfx: ; 923da (24:63da)
Evolution2Gfx: ; 929dc (24:69dc)
dw $56
- INCBIN "gfx/booster_packs/evolution2.t10.2bpp"
+ INCBIN "gfx/booster_packs/evolution2.2bpp"
Mystery1Gfx: ; 92f3e (24:6f3e)
dw $60
@@ -219,7 +219,7 @@ Mystery1Gfx: ; 92f3e (24:6f3e)
Mystery2Gfx: ; 93540 (24:7540)
dw $56
- INCBIN "gfx/booster_packs/mystery2.t10.2bpp"
+ INCBIN "gfx/booster_packs/mystery2.2bpp"
RonaldGfx: ; 93aa2 (24:7aa2)
dw $24
@@ -253,7 +253,7 @@ Laboratory1Gfx: ; 94000 (25:4000)
Laboratory2Gfx: ; 94602 (25:4602)
dw $56
- INCBIN "gfx/booster_packs/laboratory2.t10.2bpp"
+ INCBIN "gfx/booster_packs/laboratory2.2bpp"
CharizardIntro1Gfx: ; 94b64 (25:4b64)
dw $60
@@ -281,11 +281,11 @@ AerodactylIntro2Gfx: ; 9696e (25:696e)
Titlescreen1Gfx: ; 96f70 (25:6f70)
dw $61
- INCBIN "gfx/titlescreen/titlescreen1.t15.2bpp"
+ INCBIN "gfx/titlescreen/titlescreen1.2bpp"
Titlescreen2Gfx: ; 97582 (25:7582)
dw $61
- INCBIN "gfx/titlescreen/titlescreen2.t15.2bpp"
+ INCBIN "gfx/titlescreen/titlescreen2.2bpp"
CompaniesGfx: ; 97b94 (25:7b94)
dw $31
@@ -301,19 +301,19 @@ SECTION "Gfx 8", ROMX
Titlescreen3Gfx: ; 98000 (26:4000)
dw $f4
- INCBIN "gfx/titlescreen/titlescreen3.t12.2bpp"
+ INCBIN "gfx/titlescreen/titlescreen3.2bpp"
Titlescreen4Gfx: ; 98f42 (26:4f42)
dw $13b
- INCBIN "gfx/titlescreen/titlescreen4.t5.2bpp"
+ INCBIN "gfx/titlescreen/titlescreen4.2bpp"
Titlescreen5Gfx: ; 9a2f4 (26:62f4)
dw $dc
- INCBIN "gfx/titlescreen/titlescreen5.t4.2bpp"
+ INCBIN "gfx/titlescreen/titlescreen5.2bpp"
Titlescreen6Gfx: ; 9b0b6 (26:70b6)
dw $d4
- INCBIN "gfx/titlescreen/titlescreen6.t12.2bpp"
+ INCBIN "gfx/titlescreen/titlescreen6.2bpp"
DoctorMasonOWGfx: ; 9bdf8 (26:7df8)
dw $14
@@ -857,7 +857,7 @@ Duel50Gfx: ; a81f8 (2a:41f8)
Duel51Gfx: ; a836a (2a:436a)
dw $36
- INCBIN "gfx/duel/anims/51.t10.2bpp"
+ INCBIN "gfx/duel/anims/51.2bpp"
Duel52Gfx: ; a86cc (2a:46cc)
dw $0b
@@ -910,951 +910,951 @@ FightingGfx: ; a8e12 (2a:4e12)
INCROM $a8e54, $ac000
SECTION "Gfx 13", ROMX
- INCROM $ac000, $b0000
+ INCROM $ac000, $b0000
SECTION "Gfx 14", ROMX
- INCROM $b0000, $b4000
+ INCROM $b0000, $b4000
SECTION "Gfx 15", ROMX
- INCROM $b4000, $b8000
+ INCROM $b4000, $b8000
SECTION "Gfx 16", ROMX
- INCROM $b8000, $bc000
+ INCROM $b8000, $bc000
SECTION "Card Gfx 1", ROMX
CardGraphics:: ; c4000 (31:4000)
GrassEnergyCardGfx:: ; c4000 (31:4000)
- INCBIN "gfx/cards/grassenergy.8x6.2bpp"
+ INCBIN "gfx/cards/grassenergy.2bpp"
INCBIN "gfx/cards/grassenergy.pal"
FireEnergyCardGfx:: ; c4308 (31:4308)
- INCBIN "gfx/cards/fireenergy.8x6.2bpp"
+ INCBIN "gfx/cards/fireenergy.2bpp"
INCBIN "gfx/cards/fireenergy.pal"
WaterEnergyCardGfx:: ; c4610 (31:4610)
- INCBIN "gfx/cards/waterenergy.8x6.2bpp"
+ INCBIN "gfx/cards/waterenergy.2bpp"
INCBIN "gfx/cards/waterenergy.pal"
LightningEnergyCardGfx:: ; c4918 (31:4918)
- INCBIN "gfx/cards/lightningenergy.8x6.2bpp"
+ INCBIN "gfx/cards/lightningenergy.2bpp"
INCBIN "gfx/cards/lightningenergy.pal"
FightingEnergyCardGfx:: ; c4c20 (31:4c20)
- INCBIN "gfx/cards/fightingenergy.8x6.2bpp"
+ INCBIN "gfx/cards/fightingenergy.2bpp"
INCBIN "gfx/cards/fightingenergy.pal"
PsychicEnergyCardGfx:: ; c4f28 (31:4f28)
- INCBIN "gfx/cards/psychicenergy.8x6.2bpp"
+ INCBIN "gfx/cards/psychicenergy.2bpp"
INCBIN "gfx/cards/psychicenergy.pal"
DoubleColorlessEnergyCardGfx:: ; c5230 (31:5230)
- INCBIN "gfx/cards/doublecolorlessenergy.8x6.2bpp"
+ INCBIN "gfx/cards/doublecolorlessenergy.2bpp"
INCBIN "gfx/cards/doublecolorlessenergy.pal"
BulbasaurCardGfx:: ; c5538 (31:5538)
- INCBIN "gfx/cards/bulbasaur.8x6.2bpp"
+ INCBIN "gfx/cards/bulbasaur.2bpp"
INCBIN "gfx/cards/bulbasaur.pal"
IvysaurCardGfx:: ; c5840 (31:5840)
- INCBIN "gfx/cards/ivysaur.8x6.2bpp"
+ INCBIN "gfx/cards/ivysaur.2bpp"
INCBIN "gfx/cards/ivysaur.pal"
Venusaur1CardGfx:: ; c5b48 (31:5b48)
- INCBIN "gfx/cards/venusaur1.8x6.2bpp"
+ INCBIN "gfx/cards/venusaur1.2bpp"
INCBIN "gfx/cards/venusaur1.pal"
Venusaur2CardGfx:: ; c5e50 (31:5e50)
- INCBIN "gfx/cards/venusaur2.8x6.2bpp"
+ INCBIN "gfx/cards/venusaur2.2bpp"
INCBIN "gfx/cards/venusaur2.pal"
CaterpieCardGfx:: ; c6158 (31:6158)
- INCBIN "gfx/cards/caterpie.8x6.2bpp"
+ INCBIN "gfx/cards/caterpie.2bpp"
INCBIN "gfx/cards/caterpie.pal"
MetapodCardGfx:: ; c6460 (31:6460)
- INCBIN "gfx/cards/metapod.8x6.2bpp"
+ INCBIN "gfx/cards/metapod.2bpp"
INCBIN "gfx/cards/metapod.pal"
ButterfreeCardGfx:: ; c6768 (31:6768)
- INCBIN "gfx/cards/butterfree.8x6.2bpp"
+ INCBIN "gfx/cards/butterfree.2bpp"
INCBIN "gfx/cards/butterfree.pal"
WeedleCardGfx:: ; c6a70 (31:6a70)
- INCBIN "gfx/cards/weedle.8x6.2bpp"
+ INCBIN "gfx/cards/weedle.2bpp"
INCBIN "gfx/cards/weedle.pal"
KakunaCardGfx:: ; c6d78 (31:6d78)
- INCBIN "gfx/cards/kakuna.8x6.2bpp"
+ INCBIN "gfx/cards/kakuna.2bpp"
INCBIN "gfx/cards/kakuna.pal"
BeedrillCardGfx:: ; c7080 (31:7080)
- INCBIN "gfx/cards/beedrill.8x6.2bpp"
+ INCBIN "gfx/cards/beedrill.2bpp"
INCBIN "gfx/cards/beedrill.pal"
EkansCardGfx:: ; c7388 (31:7388)
- INCBIN "gfx/cards/ekans.8x6.2bpp"
+ INCBIN "gfx/cards/ekans.2bpp"
INCBIN "gfx/cards/ekans.pal"
ArbokCardGfx:: ; c7690 (31:7690)
- INCBIN "gfx/cards/arbok.8x6.2bpp"
+ INCBIN "gfx/cards/arbok.2bpp"
INCBIN "gfx/cards/arbok.pal"
NidoranFCardGfx:: ; c7998 (31:7998)
- INCBIN "gfx/cards/nidoranf.8x6.2bpp"
+ INCBIN "gfx/cards/nidoranf.2bpp"
INCBIN "gfx/cards/nidoranf.pal"
NidorinaCardGfx:: ; c7ca0 (31:7ca0)
- INCBIN "gfx/cards/nidorina.8x6.2bpp"
+ INCBIN "gfx/cards/nidorina.2bpp"
INCBIN "gfx/cards/nidorina.pal"
SECTION "Card Gfx 2", ROMX
NidoqueenCardGfx:: ; c8000 (32:4000)
- INCBIN "gfx/cards/nidoqueen.8x6.2bpp"
+ INCBIN "gfx/cards/nidoqueen.2bpp"
INCBIN "gfx/cards/nidoqueen.pal"
NidoranMCardGfx:: ; c8308 (32:4308)
- INCBIN "gfx/cards/nidoranm.8x6.2bpp"
+ INCBIN "gfx/cards/nidoranm.2bpp"
INCBIN "gfx/cards/nidoranm.pal"
NidorinoCardGfx:: ; c8610 (32:4610)
- INCBIN "gfx/cards/nidorino.8x6.2bpp"
+ INCBIN "gfx/cards/nidorino.2bpp"
INCBIN "gfx/cards/nidorino.pal"
NidokingCardGfx:: ; c8918 (32:4918)
- INCBIN "gfx/cards/nidoking.8x6.2bpp"
+ INCBIN "gfx/cards/nidoking.2bpp"
INCBIN "gfx/cards/nidoking.pal"
ZubatCardGfx:: ; c8c20 (32:4c20)
- INCBIN "gfx/cards/zubat.8x6.2bpp"
+ INCBIN "gfx/cards/zubat.2bpp"
INCBIN "gfx/cards/zubat.pal"
GolbatCardGfx:: ; c8f28 (32:4f28)
- INCBIN "gfx/cards/golbat.8x6.2bpp"
+ INCBIN "gfx/cards/golbat.2bpp"
INCBIN "gfx/cards/golbat.pal"
OddishCardGfx:: ; c9230 (32:5230)
- INCBIN "gfx/cards/oddish.8x6.2bpp"
+ INCBIN "gfx/cards/oddish.2bpp"
INCBIN "gfx/cards/oddish.pal"
GloomCardGfx:: ; c9538 (32:5538)
- INCBIN "gfx/cards/gloom.8x6.2bpp"
+ INCBIN "gfx/cards/gloom.2bpp"
INCBIN "gfx/cards/gloom.pal"
VileplumeCardGfx:: ; c9840 (32:5840)
- INCBIN "gfx/cards/vileplume.8x6.2bpp"
+ INCBIN "gfx/cards/vileplume.2bpp"
INCBIN "gfx/cards/vileplume.pal"
ParasCardGfx:: ; c9b48 (32:5b48)
- INCBIN "gfx/cards/paras.8x6.2bpp"
+ INCBIN "gfx/cards/paras.2bpp"
INCBIN "gfx/cards/paras.pal"
ParasectCardGfx:: ; c9e50 (32:5e50)
- INCBIN "gfx/cards/parasect.8x6.2bpp"
+ INCBIN "gfx/cards/parasect.2bpp"
INCBIN "gfx/cards/parasect.pal"
VenonatCardGfx:: ; ca158 (32:6158)
- INCBIN "gfx/cards/venonat.8x6.2bpp"
+ INCBIN "gfx/cards/venonat.2bpp"
INCBIN "gfx/cards/venonat.pal"
VenomothCardGfx:: ; ca460 (32:6460)
- INCBIN "gfx/cards/venomoth.8x6.2bpp"
+ INCBIN "gfx/cards/venomoth.2bpp"
INCBIN "gfx/cards/venomoth.pal"
BellsproutCardGfx:: ; ca768 (32:6768)
- INCBIN "gfx/cards/bellsprout.8x6.2bpp"
+ INCBIN "gfx/cards/bellsprout.2bpp"
INCBIN "gfx/cards/bellsprout.pal"
WeepinbellCardGfx:: ; caa70 (32:6a70)
- INCBIN "gfx/cards/weepinbell.8x6.2bpp"
+ INCBIN "gfx/cards/weepinbell.2bpp"
INCBIN "gfx/cards/weepinbell.pal"
VictreebelCardGfx:: ; cad78 (32:6d78)
- INCBIN "gfx/cards/victreebel.8x6.2bpp"
+ INCBIN "gfx/cards/victreebel.2bpp"
INCBIN "gfx/cards/victreebel.pal"
GrimerCardGfx:: ; cb080 (32:7080)
- INCBIN "gfx/cards/grimer.8x6.2bpp"
+ INCBIN "gfx/cards/grimer.2bpp"
INCBIN "gfx/cards/grimer.pal"
MukCardGfx:: ; cb388 (32:7388)
- INCBIN "gfx/cards/muk.8x6.2bpp"
+ INCBIN "gfx/cards/muk.2bpp"
INCBIN "gfx/cards/muk.pal"
ExeggcuteCardGfx:: ; cb690 (32:7690)
- INCBIN "gfx/cards/exeggcute.8x6.2bpp"
+ INCBIN "gfx/cards/exeggcute.2bpp"
INCBIN "gfx/cards/exeggcute.pal"
ExeggutorCardGfx:: ; cb998 (32:7998)
- INCBIN "gfx/cards/exeggutor.8x6.2bpp"
+ INCBIN "gfx/cards/exeggutor.2bpp"
INCBIN "gfx/cards/exeggutor.pal"
KoffingCardGfx:: ; cbca0 (32:7ca0)
- INCBIN "gfx/cards/koffing.8x6.2bpp"
+ INCBIN "gfx/cards/koffing.2bpp"
INCBIN "gfx/cards/koffing.pal"
SECTION "Card Gfx 3", ROMX
WeezingCardGfx:: ; cc000 (33:4000)
- INCBIN "gfx/cards/weezing.8x6.2bpp"
+ INCBIN "gfx/cards/weezing.2bpp"
INCBIN "gfx/cards/weezing.pal"
Tangela1CardGfx:: ; cc308 (33:4308)
- INCBIN "gfx/cards/tangela1.8x6.2bpp"
+ INCBIN "gfx/cards/tangela1.2bpp"
INCBIN "gfx/cards/tangela1.pal"
Tangela2CardGfx:: ; cc610 (33:4610)
- INCBIN "gfx/cards/tangela2.8x6.2bpp"
+ INCBIN "gfx/cards/tangela2.2bpp"
INCBIN "gfx/cards/tangela2.pal"
ScytherCardGfx:: ; cc918 (33:4918)
- INCBIN "gfx/cards/scyther.8x6.2bpp"
+ INCBIN "gfx/cards/scyther.2bpp"
INCBIN "gfx/cards/scyther.pal"
PinsirCardGfx:: ; ccc20 (33:4c20)
- INCBIN "gfx/cards/pinsir.8x6.2bpp"
+ INCBIN "gfx/cards/pinsir.2bpp"
INCBIN "gfx/cards/pinsir.pal"
CharmanderCardGfx:: ; ccf28 (33:4f28)
- INCBIN "gfx/cards/charmander.8x6.2bpp"
+ INCBIN "gfx/cards/charmander.2bpp"
INCBIN "gfx/cards/charmander.pal"
CharmeleonCardGfx:: ; cd230 (33:5230)
- INCBIN "gfx/cards/charmeleon.8x6.2bpp"
+ INCBIN "gfx/cards/charmeleon.2bpp"
INCBIN "gfx/cards/charmeleon.pal"
CharizardCardGfx:: ; cd538 (33:5538)
- INCBIN "gfx/cards/charizard.8x6.2bpp"
+ INCBIN "gfx/cards/charizard.2bpp"
INCBIN "gfx/cards/charizard.pal"
VulpixCardGfx:: ; cd840 (33:5840)
- INCBIN "gfx/cards/vulpix.8x6.2bpp"
+ INCBIN "gfx/cards/vulpix.2bpp"
INCBIN "gfx/cards/vulpix.pal"
Ninetails1CardGfx:: ; cdb48 (33:5b48)
- INCBIN "gfx/cards/ninetails1.8x6.2bpp"
+ INCBIN "gfx/cards/ninetails1.2bpp"
INCBIN "gfx/cards/ninetails1.pal"
Ninetails2CardGfx:: ; cde50 (33:5e50)
- INCBIN "gfx/cards/ninetails2.8x6.2bpp"
+ INCBIN "gfx/cards/ninetails2.2bpp"
INCBIN "gfx/cards/ninetails2.pal"
GrowlitheCardGfx:: ; ce158 (33:6158)
- INCBIN "gfx/cards/growlithe.8x6.2bpp"
+ INCBIN "gfx/cards/growlithe.2bpp"
INCBIN "gfx/cards/growlithe.pal"
Arcanine1CardGfx:: ; ce460 (33:6460)
- INCBIN "gfx/cards/arcanine1.8x6.2bpp"
+ INCBIN "gfx/cards/arcanine1.2bpp"
INCBIN "gfx/cards/arcanine1.pal"
Arcanine2CardGfx:: ; ce768 (33:6768)
- INCBIN "gfx/cards/arcanine2.8x6.2bpp"
+ INCBIN "gfx/cards/arcanine2.2bpp"
INCBIN "gfx/cards/arcanine2.pal"
PonytaCardGfx:: ; cea70 (33:6a70)
- INCBIN "gfx/cards/ponyta.8x6.2bpp"
+ INCBIN "gfx/cards/ponyta.2bpp"
INCBIN "gfx/cards/ponyta.pal"
RapidashCardGfx:: ; ced78 (33:6d78)
- INCBIN "gfx/cards/rapidash.8x6.2bpp"
+ INCBIN "gfx/cards/rapidash.2bpp"
INCBIN "gfx/cards/rapidash.pal"
Magmar1CardGfx:: ; cf080 (33:7080)
- INCBIN "gfx/cards/magmar1.8x6.2bpp"
+ INCBIN "gfx/cards/magmar1.2bpp"
INCBIN "gfx/cards/magmar1.pal"
Magmar2CardGfx:: ; cf388 (33:7388)
- INCBIN "gfx/cards/magmar2.8x6.2bpp"
+ INCBIN "gfx/cards/magmar2.2bpp"
INCBIN "gfx/cards/magmar2.pal"
Flareon1CardGfx:: ; cf690 (33:7690)
- INCBIN "gfx/cards/flareon1.8x6.2bpp"
+ INCBIN "gfx/cards/flareon1.2bpp"
INCBIN "gfx/cards/flareon1.pal"
Flareon2CardGfx:: ; cf998 (33:7998)
- INCBIN "gfx/cards/flareon2.8x6.2bpp"
+ INCBIN "gfx/cards/flareon2.2bpp"
INCBIN "gfx/cards/flareon2.pal"
Moltres1CardGfx:: ; cfca0 (33:7ca0)
- INCBIN "gfx/cards/moltres1.8x6.2bpp"
+ INCBIN "gfx/cards/moltres1.2bpp"
INCBIN "gfx/cards/moltres1.pal"
SECTION "Card Gfx 4", ROMX
Moltres2CardGfx:: ; d0000 (34:4000)
- INCBIN "gfx/cards/moltres2.8x6.2bpp"
+ INCBIN "gfx/cards/moltres2.2bpp"
INCBIN "gfx/cards/moltres2.pal"
SquirtleCardGfx:: ; d0308 (34:4308)
- INCBIN "gfx/cards/squirtle.8x6.2bpp"
+ INCBIN "gfx/cards/squirtle.2bpp"
INCBIN "gfx/cards/squirtle.pal"
WartortleCardGfx:: ; d0610 (34:4610)
- INCBIN "gfx/cards/wartortle.8x6.2bpp"
+ INCBIN "gfx/cards/wartortle.2bpp"
INCBIN "gfx/cards/wartortle.pal"
BlastoiseCardGfx:: ; d0918 (34:4918)
- INCBIN "gfx/cards/blastoise.8x6.2bpp"
+ INCBIN "gfx/cards/blastoise.2bpp"
INCBIN "gfx/cards/blastoise.pal"
PsyduckCardGfx:: ; d0c20 (34:4c20)
- INCBIN "gfx/cards/psyduck.8x6.2bpp"
+ INCBIN "gfx/cards/psyduck.2bpp"
INCBIN "gfx/cards/psyduck.pal"
GolduckCardGfx:: ; d0f28 (34:4f28)
- INCBIN "gfx/cards/golduck.8x6.2bpp"
+ INCBIN "gfx/cards/golduck.2bpp"
INCBIN "gfx/cards/golduck.pal"
PoliwagCardGfx:: ; d1230 (34:5230)
- INCBIN "gfx/cards/poliwag.8x6.2bpp"
+ INCBIN "gfx/cards/poliwag.2bpp"
INCBIN "gfx/cards/poliwag.pal"
PoliwhirlCardGfx:: ; d1538 (34:5538)
- INCBIN "gfx/cards/poliwhirl.8x6.2bpp"
+ INCBIN "gfx/cards/poliwhirl.2bpp"
INCBIN "gfx/cards/poliwhirl.pal"
PoliwrathCardGfx:: ; d1840 (34:5840)
- INCBIN "gfx/cards/poliwrath.8x6.2bpp"
+ INCBIN "gfx/cards/poliwrath.2bpp"
INCBIN "gfx/cards/poliwrath.pal"
TentacoolCardGfx:: ; d1b48 (34:5b48)
- INCBIN "gfx/cards/tentacool.8x6.2bpp"
+ INCBIN "gfx/cards/tentacool.2bpp"
INCBIN "gfx/cards/tentacool.pal"
TentacruelCardGfx:: ; d1e50 (34:5e50)
- INCBIN "gfx/cards/tentacruel.8x6.2bpp"
+ INCBIN "gfx/cards/tentacruel.2bpp"
INCBIN "gfx/cards/tentacruel.pal"
SeelCardGfx:: ; d2158 (34:6158)
- INCBIN "gfx/cards/seel.8x6.2bpp"
+ INCBIN "gfx/cards/seel.2bpp"
INCBIN "gfx/cards/seel.pal"
DewgongCardGfx:: ; d2460 (34:6460)
- INCBIN "gfx/cards/dewgong.8x6.2bpp"
+ INCBIN "gfx/cards/dewgong.2bpp"
INCBIN "gfx/cards/dewgong.pal"
ShellderCardGfx:: ; d2768 (34:6768)
- INCBIN "gfx/cards/shellder.8x6.2bpp"
+ INCBIN "gfx/cards/shellder.2bpp"
INCBIN "gfx/cards/shellder.pal"
CloysterCardGfx:: ; d2a70 (34:6a70)
- INCBIN "gfx/cards/cloyster.8x6.2bpp"
+ INCBIN "gfx/cards/cloyster.2bpp"
INCBIN "gfx/cards/cloyster.pal"
KrabbyCardGfx:: ; d2d78 (34:6d78)
- INCBIN "gfx/cards/krabby.8x6.2bpp"
+ INCBIN "gfx/cards/krabby.2bpp"
INCBIN "gfx/cards/krabby.pal"
KinglerCardGfx:: ; d3080 (34:7080)
- INCBIN "gfx/cards/kingler.8x6.2bpp"
+ INCBIN "gfx/cards/kingler.2bpp"
INCBIN "gfx/cards/kingler.pal"
HorseaCardGfx:: ; d3388 (34:7388)
- INCBIN "gfx/cards/horsea.8x6.2bpp"
+ INCBIN "gfx/cards/horsea.2bpp"
INCBIN "gfx/cards/horsea.pal"
SeadraCardGfx:: ; d3690 (34:7690)
- INCBIN "gfx/cards/seadra.8x6.2bpp"
+ INCBIN "gfx/cards/seadra.2bpp"
INCBIN "gfx/cards/seadra.pal"
GoldeenCardGfx:: ; d3998 (34:7998)
- INCBIN "gfx/cards/goldeen.8x6.2bpp"
+ INCBIN "gfx/cards/goldeen.2bpp"
INCBIN "gfx/cards/goldeen.pal"
SeakingCardGfx:: ; d3ca0 (34:7ca0)
- INCBIN "gfx/cards/seaking.8x6.2bpp"
+ INCBIN "gfx/cards/seaking.2bpp"
INCBIN "gfx/cards/seaking.pal"
SECTION "Card Gfx 5", ROMX
StaryuCardGfx:: ; d4000 (35:4000)
- INCBIN "gfx/cards/staryu.8x6.2bpp"
+ INCBIN "gfx/cards/staryu.2bpp"
INCBIN "gfx/cards/staryu.pal"
StarmieCardGfx:: ; d4308 (35:4308)
- INCBIN "gfx/cards/starmie.8x6.2bpp"
+ INCBIN "gfx/cards/starmie.2bpp"
INCBIN "gfx/cards/starmie.pal"
MagikarpCardGfx:: ; d4610 (35:4610)
- INCBIN "gfx/cards/magikarp.8x6.2bpp"
+ INCBIN "gfx/cards/magikarp.2bpp"
INCBIN "gfx/cards/magikarp.pal"
GyaradosCardGfx:: ; d4918 (35:4918)
- INCBIN "gfx/cards/gyarados.8x6.2bpp"
+ INCBIN "gfx/cards/gyarados.2bpp"
INCBIN "gfx/cards/gyarados.pal"
LaprasCardGfx:: ; d4c20 (35:4c20)
- INCBIN "gfx/cards/lapras.8x6.2bpp"
+ INCBIN "gfx/cards/lapras.2bpp"
INCBIN "gfx/cards/lapras.pal"
Vaporeon1CardGfx:: ; d4f28 (35:4f28)
- INCBIN "gfx/cards/vaporeon1.8x6.2bpp"
+ INCBIN "gfx/cards/vaporeon1.2bpp"
INCBIN "gfx/cards/vaporeon1.pal"
Vaporeon2CardGfx:: ; d5230 (35:5230)
- INCBIN "gfx/cards/vaporeon2.8x6.2bpp"
+ INCBIN "gfx/cards/vaporeon2.2bpp"
INCBIN "gfx/cards/vaporeon2.pal"
OmanyteCardGfx:: ; d5538 (35:5538)
- INCBIN "gfx/cards/omanyte.8x6.2bpp"
+ INCBIN "gfx/cards/omanyte.2bpp"
INCBIN "gfx/cards/omanyte.pal"
OmastarCardGfx:: ; d5840 (35:5840)
- INCBIN "gfx/cards/omastar.8x6.2bpp"
+ INCBIN "gfx/cards/omastar.2bpp"
INCBIN "gfx/cards/omastar.pal"
Articuno1CardGfx:: ; d5b48 (35:5b48)
- INCBIN "gfx/cards/articuno1.8x6.2bpp"
+ INCBIN "gfx/cards/articuno1.2bpp"
INCBIN "gfx/cards/articuno1.pal"
Articuno2CardGfx:: ; d5e50 (35:5e50)
- INCBIN "gfx/cards/articuno2.8x6.2bpp"
+ INCBIN "gfx/cards/articuno2.2bpp"
INCBIN "gfx/cards/articuno2.pal"
Pikachu1CardGfx:: ; d6158 (35:6158)
- INCBIN "gfx/cards/pikachu1.8x6.2bpp"
+ INCBIN "gfx/cards/pikachu1.2bpp"
INCBIN "gfx/cards/pikachu1.pal"
Pikachu2CardGfx:: ; d6460 (35:6460)
- INCBIN "gfx/cards/pikachu2.8x6.2bpp"
+ INCBIN "gfx/cards/pikachu2.2bpp"
INCBIN "gfx/cards/pikachu2.pal"
Pikachu3CardGfx:: ; d6768 (35:6768)
- INCBIN "gfx/cards/pikachu3.8x6.2bpp"
+ INCBIN "gfx/cards/pikachu3.2bpp"
INCBIN "gfx/cards/pikachu3.pal"
Pikachu4CardGfx:: ; d6a70 (35:6a70)
- INCBIN "gfx/cards/pikachu4.8x6.2bpp"
+ INCBIN "gfx/cards/pikachu4.2bpp"
INCBIN "gfx/cards/pikachu4.pal"
FlyingPikachuCardGfx:: ; d6d78 (35:6d78)
- INCBIN "gfx/cards/flyingpikachu.8x6.2bpp"
+ INCBIN "gfx/cards/flyingpikachu.2bpp"
INCBIN "gfx/cards/flyingpikachu.pal"
SurfingPikachu1CardGfx:: ; d7080 (35:7080)
- INCBIN "gfx/cards/surfingpikachu1.8x6.2bpp"
+ INCBIN "gfx/cards/surfingpikachu1.2bpp"
INCBIN "gfx/cards/surfingpikachu1.pal"
SurfingPikachu2CardGfx:: ; d7388 (35:7388)
- INCBIN "gfx/cards/surfingpikachu2.8x6.2bpp"
+ INCBIN "gfx/cards/surfingpikachu2.2bpp"
INCBIN "gfx/cards/surfingpikachu2.pal"
Raichu1CardGfx:: ; d7690 (35:7690)
- INCBIN "gfx/cards/raichu1.8x6.2bpp"
+ INCBIN "gfx/cards/raichu1.2bpp"
INCBIN "gfx/cards/raichu1.pal"
Raichu2CardGfx:: ; d7998 (35:7998)
- INCBIN "gfx/cards/raichu2.8x6.2bpp"
+ INCBIN "gfx/cards/raichu2.2bpp"
INCBIN "gfx/cards/raichu2.pal"
Magnemite1CardGfx:: ; d7ca0 (35:7ca0)
- INCBIN "gfx/cards/magnemite1.8x6.2bpp"
+ INCBIN "gfx/cards/magnemite1.2bpp"
INCBIN "gfx/cards/magnemite1.pal"
SECTION "Card Gfx 6", ROMX
Magnemite2CardGfx:: ; d8000 (36:4000)
- INCBIN "gfx/cards/magnemite2.8x6.2bpp"
+ INCBIN "gfx/cards/magnemite2.2bpp"
INCBIN "gfx/cards/magnemite2.pal"
Magneton1CardGfx:: ; d8308 (36:4308)
- INCBIN "gfx/cards/magneton1.8x6.2bpp"
+ INCBIN "gfx/cards/magneton1.2bpp"
INCBIN "gfx/cards/magneton1.pal"
Magneton2CardGfx:: ; d8610 (36:4610)
- INCBIN "gfx/cards/magneton2.8x6.2bpp"
+ INCBIN "gfx/cards/magneton2.2bpp"
INCBIN "gfx/cards/magneton2.pal"
VoltorbCardGfx:: ; d8918 (36:4918)
- INCBIN "gfx/cards/voltorb.8x6.2bpp"
+ INCBIN "gfx/cards/voltorb.2bpp"
INCBIN "gfx/cards/voltorb.pal"
Electrode1CardGfx:: ; d8c20 (36:4c20)
- INCBIN "gfx/cards/electrode1.8x6.2bpp"
+ INCBIN "gfx/cards/electrode1.2bpp"
INCBIN "gfx/cards/electrode1.pal"
Electrode2CardGfx:: ; d8f28 (36:4f28)
- INCBIN "gfx/cards/electrode2.8x6.2bpp"
+ INCBIN "gfx/cards/electrode2.2bpp"
INCBIN "gfx/cards/electrode2.pal"
Electabuzz1CardGfx:: ; d9230 (36:5230)
- INCBIN "gfx/cards/electabuzz1.8x6.2bpp"
+ INCBIN "gfx/cards/electabuzz1.2bpp"
INCBIN "gfx/cards/electabuzz1.pal"
Electabuzz2CardGfx:: ; d9538 (36:5538)
- INCBIN "gfx/cards/electabuzz2.8x6.2bpp"
+ INCBIN "gfx/cards/electabuzz2.2bpp"
INCBIN "gfx/cards/electabuzz2.pal"
Jolteon1CardGfx:: ; d9840 (36:5840)
- INCBIN "gfx/cards/jolteon1.8x6.2bpp"
+ INCBIN "gfx/cards/jolteon1.2bpp"
INCBIN "gfx/cards/jolteon1.pal"
Jolteon2CardGfx:: ; d9b48 (36:5b48)
- INCBIN "gfx/cards/jolteon2.8x6.2bpp"
+ INCBIN "gfx/cards/jolteon2.2bpp"
INCBIN "gfx/cards/jolteon2.pal"
Zapdos1CardGfx:: ; d9e50 (36:5e50)
- INCBIN "gfx/cards/zapdos1.8x6.2bpp"
+ INCBIN "gfx/cards/zapdos1.2bpp"
INCBIN "gfx/cards/zapdos1.pal"
Zapdos2CardGfx:: ; da158 (36:6158)
- INCBIN "gfx/cards/zapdos2.8x6.2bpp"
+ INCBIN "gfx/cards/zapdos2.2bpp"
INCBIN "gfx/cards/zapdos2.pal"
Zapdos3CardGfx:: ; da460 (36:6460)
- INCBIN "gfx/cards/zapdos3.8x6.2bpp"
+ INCBIN "gfx/cards/zapdos3.2bpp"
INCBIN "gfx/cards/zapdos3.pal"
SandshrewCardGfx:: ; da768 (36:6768)
- INCBIN "gfx/cards/sandshrew.8x6.2bpp"
+ INCBIN "gfx/cards/sandshrew.2bpp"
INCBIN "gfx/cards/sandshrew.pal"
SandslashCardGfx:: ; daa70 (36:6a70)
- INCBIN "gfx/cards/sandslash.8x6.2bpp"
+ INCBIN "gfx/cards/sandslash.2bpp"
INCBIN "gfx/cards/sandslash.pal"
DiglettCardGfx:: ; dad78 (36:6d78)
- INCBIN "gfx/cards/diglett.8x6.2bpp"
+ INCBIN "gfx/cards/diglett.2bpp"
INCBIN "gfx/cards/diglett.pal"
DugtrioCardGfx:: ; db080 (36:7080)
- INCBIN "gfx/cards/dugtrio.8x6.2bpp"
+ INCBIN "gfx/cards/dugtrio.2bpp"
INCBIN "gfx/cards/dugtrio.pal"
MankeyCardGfx:: ; db388 (36:7388)
- INCBIN "gfx/cards/mankey.8x6.2bpp"
+ INCBIN "gfx/cards/mankey.2bpp"
INCBIN "gfx/cards/mankey.pal"
PrimeapeCardGfx:: ; db690 (36:7690)
- INCBIN "gfx/cards/primeape.8x6.2bpp"
+ INCBIN "gfx/cards/primeape.2bpp"
INCBIN "gfx/cards/primeape.pal"
MachopCardGfx:: ; db998 (36:7998)
- INCBIN "gfx/cards/machop.8x6.2bpp"
+ INCBIN "gfx/cards/machop.2bpp"
INCBIN "gfx/cards/machop.pal"
MachokeCardGfx:: ; dbca0 (36:7ca0)
- INCBIN "gfx/cards/machoke.8x6.2bpp"
+ INCBIN "gfx/cards/machoke.2bpp"
INCBIN "gfx/cards/machoke.pal"
SECTION "Card Gfx 7", ROMX
MachampCardGfx:: ; dc000 (37:4000)
- INCBIN "gfx/cards/machamp.8x6.2bpp"
+ INCBIN "gfx/cards/machamp.2bpp"
INCBIN "gfx/cards/machamp.pal"
GeodudeCardGfx:: ; dc308 (37:4308)
- INCBIN "gfx/cards/geodude.8x6.2bpp"
+ INCBIN "gfx/cards/geodude.2bpp"
INCBIN "gfx/cards/geodude.pal"
GravelerCardGfx:: ; dc610 (37:4610)
- INCBIN "gfx/cards/graveler.8x6.2bpp"
+ INCBIN "gfx/cards/graveler.2bpp"
INCBIN "gfx/cards/graveler.pal"
GolemCardGfx:: ; dc918 (37:4918)
- INCBIN "gfx/cards/golem.8x6.2bpp"
+ INCBIN "gfx/cards/golem.2bpp"
INCBIN "gfx/cards/golem.pal"
OnixCardGfx:: ; dcc20 (37:4c20)
- INCBIN "gfx/cards/onix.8x6.2bpp"
+ INCBIN "gfx/cards/onix.2bpp"
INCBIN "gfx/cards/onix.pal"
CuboneCardGfx:: ; dcf28 (37:4f28)
- INCBIN "gfx/cards/cubone.8x6.2bpp"
+ INCBIN "gfx/cards/cubone.2bpp"
INCBIN "gfx/cards/cubone.pal"
Marowak1CardGfx:: ; dd230 (37:5230)
- INCBIN "gfx/cards/marowak1.8x6.2bpp"
+ INCBIN "gfx/cards/marowak1.2bpp"
INCBIN "gfx/cards/marowak1.pal"
Marowak2CardGfx:: ; dd538 (37:5538)
- INCBIN "gfx/cards/marowak2.8x6.2bpp"
+ INCBIN "gfx/cards/marowak2.2bpp"
INCBIN "gfx/cards/marowak2.pal"
HitmonleeCardGfx:: ; dd840 (37:5840)
- INCBIN "gfx/cards/hitmonlee.8x6.2bpp"
+ INCBIN "gfx/cards/hitmonlee.2bpp"
INCBIN "gfx/cards/hitmonlee.pal"
HitmonchanCardGfx:: ; ddb48 (37:5b48)
- INCBIN "gfx/cards/hitmonchan.8x6.2bpp"
+ INCBIN "gfx/cards/hitmonchan.2bpp"
INCBIN "gfx/cards/hitmonchan.pal"
RhyhornCardGfx:: ; dde50 (37:5e50)
- INCBIN "gfx/cards/rhyhorn.8x6.2bpp"
+ INCBIN "gfx/cards/rhyhorn.2bpp"
INCBIN "gfx/cards/rhyhorn.pal"
RhydonCardGfx:: ; de158 (37:6158)
- INCBIN "gfx/cards/rhydon.8x6.2bpp"
+ INCBIN "gfx/cards/rhydon.2bpp"
INCBIN "gfx/cards/rhydon.pal"
KabutoCardGfx:: ; de460 (37:6460)
- INCBIN "gfx/cards/kabuto.8x6.2bpp"
+ INCBIN "gfx/cards/kabuto.2bpp"
INCBIN "gfx/cards/kabuto.pal"
KabutopsCardGfx:: ; de768 (37:6768)
- INCBIN "gfx/cards/kabutops.8x6.2bpp"
+ INCBIN "gfx/cards/kabutops.2bpp"
INCBIN "gfx/cards/kabutops.pal"
AerodactylCardGfx:: ; dea70 (37:6a70)
- INCBIN "gfx/cards/aerodactyl.8x6.2bpp"
+ INCBIN "gfx/cards/aerodactyl.2bpp"
INCBIN "gfx/cards/aerodactyl.pal"
AbraCardGfx:: ; ded78 (37:6d78)
- INCBIN "gfx/cards/abra.8x6.2bpp"
+ INCBIN "gfx/cards/abra.2bpp"
INCBIN "gfx/cards/abra.pal"
KadabraCardGfx:: ; df080 (37:7080)
- INCBIN "gfx/cards/kadabra.8x6.2bpp"
+ INCBIN "gfx/cards/kadabra.2bpp"
INCBIN "gfx/cards/kadabra.pal"
AlakazamCardGfx:: ; df388 (37:7388)
- INCBIN "gfx/cards/alakazam.8x6.2bpp"
+ INCBIN "gfx/cards/alakazam.2bpp"
INCBIN "gfx/cards/alakazam.pal"
Slowpoke1CardGfx:: ; df690 (37:7690)
- INCBIN "gfx/cards/slowpoke1.8x6.2bpp"
+ INCBIN "gfx/cards/slowpoke1.2bpp"
INCBIN "gfx/cards/slowpoke1.pal"
Slowpoke2CardGfx:: ; df998 (37:7998)
- INCBIN "gfx/cards/slowpoke2.8x6.2bpp"
+ INCBIN "gfx/cards/slowpoke2.2bpp"
INCBIN "gfx/cards/slowpoke2.pal"
SlowbroCardGfx:: ; dfca0 (37:7ca0)
- INCBIN "gfx/cards/slowbro.8x6.2bpp"
+ INCBIN "gfx/cards/slowbro.2bpp"
INCBIN "gfx/cards/slowbro.pal"
SECTION "Card Gfx 8", ROMX
Gastly1CardGfx:: ; e0000 (38:4000)
- INCBIN "gfx/cards/gastly1.8x6.2bpp"
+ INCBIN "gfx/cards/gastly1.2bpp"
INCBIN "gfx/cards/gastly1.pal"
Gastly2CardGfx:: ; e0308 (38:4308)
- INCBIN "gfx/cards/gastly2.8x6.2bpp"
+ INCBIN "gfx/cards/gastly2.2bpp"
INCBIN "gfx/cards/gastly2.pal"
Haunter1CardGfx:: ; e0610 (38:4610)
- INCBIN "gfx/cards/haunter1.8x6.2bpp"
+ INCBIN "gfx/cards/haunter1.2bpp"
INCBIN "gfx/cards/haunter1.pal"
Haunter2CardGfx:: ; e0918 (38:4918)
- INCBIN "gfx/cards/haunter2.8x6.2bpp"
+ INCBIN "gfx/cards/haunter2.2bpp"
INCBIN "gfx/cards/haunter2.pal"
GengarCardGfx:: ; e0c20 (38:4c20)
- INCBIN "gfx/cards/gengar.8x6.2bpp"
+ INCBIN "gfx/cards/gengar.2bpp"
INCBIN "gfx/cards/gengar.pal"
DrowzeeCardGfx:: ; e0f28 (38:4f28)
- INCBIN "gfx/cards/drowzee.8x6.2bpp"
+ INCBIN "gfx/cards/drowzee.2bpp"
INCBIN "gfx/cards/drowzee.pal"
HypnoCardGfx:: ; e1230 (38:5230)
- INCBIN "gfx/cards/hypno.8x6.2bpp"
+ INCBIN "gfx/cards/hypno.2bpp"
INCBIN "gfx/cards/hypno.pal"
MrMimeCardGfx:: ; e1538 (38:5538)
- INCBIN "gfx/cards/mrmime.8x6.2bpp"
+ INCBIN "gfx/cards/mrmime.2bpp"
INCBIN "gfx/cards/mrmime.pal"
JynxCardGfx:: ; e1840 (38:5840)
- INCBIN "gfx/cards/jynx.8x6.2bpp"
+ INCBIN "gfx/cards/jynx.2bpp"
INCBIN "gfx/cards/jynx.pal"
Mewtwo1CardGfx:: ; e1b48 (38:5b48)
- INCBIN "gfx/cards/mewtwo1.8x6.2bpp"
+ INCBIN "gfx/cards/mewtwo1.2bpp"
INCBIN "gfx/cards/mewtwo1.pal"
Mewtwo2CardGfx:: ; e1e50 (38:5e50)
- INCBIN "gfx/cards/mewtwo2.8x6.2bpp"
+ INCBIN "gfx/cards/mewtwo2.2bpp"
INCBIN "gfx/cards/mewtwo2.pal"
Mewtwo3CardGfx:: ; e2158 (38:6158)
- INCBIN "gfx/cards/mewtwo3.8x6.2bpp"
+ INCBIN "gfx/cards/mewtwo3.2bpp"
INCBIN "gfx/cards/mewtwo3.pal"
Mew1CardGfx:: ; e2460 (38:6460)
- INCBIN "gfx/cards/mew1.8x6.2bpp"
+ INCBIN "gfx/cards/mew1.2bpp"
INCBIN "gfx/cards/mew1.pal"
Mew2CardGfx:: ; e2768 (38:6768)
- INCBIN "gfx/cards/mew2.8x6.2bpp"
+ INCBIN "gfx/cards/mew2.2bpp"
INCBIN "gfx/cards/mew2.pal"
Mew3CardGfx:: ; e2a70 (38:6a70)
- INCBIN "gfx/cards/mew3.8x6.2bpp"
+ INCBIN "gfx/cards/mew3.2bpp"
INCBIN "gfx/cards/mew3.pal"
PidgeyCardGfx:: ; e2d78 (38:6d78)
- INCBIN "gfx/cards/pidgey.8x6.2bpp"
+ INCBIN "gfx/cards/pidgey.2bpp"
INCBIN "gfx/cards/pidgey.pal"
PidgeottoCardGfx:: ; e3080 (38:7080)
- INCBIN "gfx/cards/pidgeotto.8x6.2bpp"
+ INCBIN "gfx/cards/pidgeotto.2bpp"
INCBIN "gfx/cards/pidgeotto.pal"
Pidgeot1CardGfx:: ; e3388 (38:7388)
- INCBIN "gfx/cards/pidgeot1.8x6.2bpp"
+ INCBIN "gfx/cards/pidgeot1.2bpp"
INCBIN "gfx/cards/pidgeot1.pal"
Pidgeot2CardGfx:: ; e3690 (38:7690)
- INCBIN "gfx/cards/pidgeot2.8x6.2bpp"
+ INCBIN "gfx/cards/pidgeot2.2bpp"
INCBIN "gfx/cards/pidgeot2.pal"
RattataCardGfx:: ; e3998 (38:7998)
- INCBIN "gfx/cards/rattata.8x6.2bpp"
+ INCBIN "gfx/cards/rattata.2bpp"
INCBIN "gfx/cards/rattata.pal"
RaticateCardGfx:: ; e3ca0 (38:7ca0)
- INCBIN "gfx/cards/raticate.8x6.2bpp"
+ INCBIN "gfx/cards/raticate.2bpp"
INCBIN "gfx/cards/raticate.pal"
SECTION "Card Gfx 9", ROMX
SpearowCardGfx:: ; e4000 (39:4000)
- INCBIN "gfx/cards/spearow.8x6.2bpp"
+ INCBIN "gfx/cards/spearow.2bpp"
INCBIN "gfx/cards/spearow.pal"
FearowCardGfx:: ; e4308 (39:4308)
- INCBIN "gfx/cards/fearow.8x6.2bpp"
+ INCBIN "gfx/cards/fearow.2bpp"
INCBIN "gfx/cards/fearow.pal"
ClefairyCardGfx:: ; e4610 (39:4610)
- INCBIN "gfx/cards/clefairy.8x6.2bpp"
+ INCBIN "gfx/cards/clefairy.2bpp"
INCBIN "gfx/cards/clefairy.pal"
ClefableCardGfx:: ; e4918 (39:4918)
- INCBIN "gfx/cards/clefable.8x6.2bpp"
+ INCBIN "gfx/cards/clefable.2bpp"
INCBIN "gfx/cards/clefable.pal"
Jigglypuff1CardGfx:: ; e4c20 (39:4c20)
- INCBIN "gfx/cards/jigglypuff1.8x6.2bpp"
+ INCBIN "gfx/cards/jigglypuff1.2bpp"
INCBIN "gfx/cards/jigglypuff1.pal"
Jigglypuff2CardGfx:: ; e4f28 (39:4f28)
- INCBIN "gfx/cards/jigglypuff2.8x6.2bpp"
+ INCBIN "gfx/cards/jigglypuff2.2bpp"
INCBIN "gfx/cards/jigglypuff2.pal"
Jigglypuff3CardGfx:: ; e5230 (39:5230)
- INCBIN "gfx/cards/jigglypuff3.8x6.2bpp"
+ INCBIN "gfx/cards/jigglypuff3.2bpp"
INCBIN "gfx/cards/jigglypuff3.pal"
WigglytuffCardGfx:: ; e5538 (39:5538)
- INCBIN "gfx/cards/wigglytuff.8x6.2bpp"
+ INCBIN "gfx/cards/wigglytuff.2bpp"
INCBIN "gfx/cards/wigglytuff.pal"
Meowth1CardGfx:: ; e5840 (39:5840)
- INCBIN "gfx/cards/meowth1.8x6.2bpp"
+ INCBIN "gfx/cards/meowth1.2bpp"
INCBIN "gfx/cards/meowth1.pal"
Meowth2CardGfx:: ; e5b48 (39:5b48)
- INCBIN "gfx/cards/meowth2.8x6.2bpp"
+ INCBIN "gfx/cards/meowth2.2bpp"
INCBIN "gfx/cards/meowth2.pal"
PersianCardGfx:: ; e5e50 (39:5e50)
- INCBIN "gfx/cards/persian.8x6.2bpp"
+ INCBIN "gfx/cards/persian.2bpp"
INCBIN "gfx/cards/persian.pal"
FarfetchdCardGfx:: ; e6158 (39:6158)
- INCBIN "gfx/cards/farfetchd.8x6.2bpp"
+ INCBIN "gfx/cards/farfetchd.2bpp"
INCBIN "gfx/cards/farfetchd.pal"
DoduoCardGfx:: ; e6460 (39:6460)
- INCBIN "gfx/cards/doduo.8x6.2bpp"
+ INCBIN "gfx/cards/doduo.2bpp"
INCBIN "gfx/cards/doduo.pal"
DodrioCardGfx:: ; e6768 (39:6768)
- INCBIN "gfx/cards/dodrio.8x6.2bpp"
+ INCBIN "gfx/cards/dodrio.2bpp"
INCBIN "gfx/cards/dodrio.pal"
LickitungCardGfx:: ; e6a70 (39:6a70)
- INCBIN "gfx/cards/lickitung.8x6.2bpp"
+ INCBIN "gfx/cards/lickitung.2bpp"
INCBIN "gfx/cards/lickitung.pal"
ChanseyCardGfx:: ; e6d78 (39:6d78)
- INCBIN "gfx/cards/chansey.8x6.2bpp"
+ INCBIN "gfx/cards/chansey.2bpp"
INCBIN "gfx/cards/chansey.pal"
KangaskhanCardGfx:: ; e7080 (39:7080)
- INCBIN "gfx/cards/kangaskhan.8x6.2bpp"
+ INCBIN "gfx/cards/kangaskhan.2bpp"
INCBIN "gfx/cards/kangaskhan.pal"
TaurosCardGfx:: ; e7388 (39:7388)
- INCBIN "gfx/cards/tauros.8x6.2bpp"
+ INCBIN "gfx/cards/tauros.2bpp"
INCBIN "gfx/cards/tauros.pal"
DittoCardGfx:: ; e7690 (39:7690)
- INCBIN "gfx/cards/ditto.8x6.2bpp"
+ INCBIN "gfx/cards/ditto.2bpp"
INCBIN "gfx/cards/ditto.pal"
EeveeCardGfx:: ; e7998 (39:7998)
- INCBIN "gfx/cards/eevee.8x6.2bpp"
+ INCBIN "gfx/cards/eevee.2bpp"
INCBIN "gfx/cards/eevee.pal"
PorygonCardGfx:: ; e7ca0 (39:7ca0)
- INCBIN "gfx/cards/porygon.8x6.2bpp"
+ INCBIN "gfx/cards/porygon.2bpp"
INCBIN "gfx/cards/porygon.pal"
SECTION "Card Gfx 10", ROMX
SnorlaxCardGfx:: ; e8000 (3a:4000)
- INCBIN "gfx/cards/snorlax.8x6.2bpp"
+ INCBIN "gfx/cards/snorlax.2bpp"
INCBIN "gfx/cards/snorlax.pal"
DratiniCardGfx:: ; e8308 (3a:4308)
- INCBIN "gfx/cards/dratini.8x6.2bpp"
+ INCBIN "gfx/cards/dratini.2bpp"
INCBIN "gfx/cards/dratini.pal"
DragonairCardGfx:: ; e8610 (3a:4610)
- INCBIN "gfx/cards/dragonair.8x6.2bpp"
+ INCBIN "gfx/cards/dragonair.2bpp"
INCBIN "gfx/cards/dragonair.pal"
Dragonite1CardGfx:: ; e8918 (3a:4918)
- INCBIN "gfx/cards/dragonite1.8x6.2bpp"
+ INCBIN "gfx/cards/dragonite1.2bpp"
INCBIN "gfx/cards/dragonite1.pal"
Dragonite2CardGfx:: ; e8c20 (3a:4c20)
- INCBIN "gfx/cards/dragonite2.8x6.2bpp"
+ INCBIN "gfx/cards/dragonite2.2bpp"
INCBIN "gfx/cards/dragonite2.pal"
ProfessorOakCardGfx:: ; e8f28 (3a:4f28)
- INCBIN "gfx/cards/professoroak.8x6.2bpp"
+ INCBIN "gfx/cards/professoroak.2bpp"
INCBIN "gfx/cards/professoroak.pal"
ImposterProfessorOakCardGfx:: ; e9230 (3a:5230)
- INCBIN "gfx/cards/imposterprofessoroak.8x6.2bpp"
+ INCBIN "gfx/cards/imposterprofessoroak.2bpp"
INCBIN "gfx/cards/imposterprofessoroak.pal"
BillCardGfx:: ; e9538 (3a:5538)
- INCBIN "gfx/cards/bill.8x6.2bpp"
+ INCBIN "gfx/cards/bill.2bpp"
INCBIN "gfx/cards/bill.pal"
MrFujiCardGfx:: ; e9840 (3a:5840)
- INCBIN "gfx/cards/mrfuji.8x6.2bpp"
+ INCBIN "gfx/cards/mrfuji.2bpp"
INCBIN "gfx/cards/mrfuji.pal"
LassCardGfx:: ; e9b48 (3a:5b48)
- INCBIN "gfx/cards/lass.8x6.2bpp"
+ INCBIN "gfx/cards/lass.2bpp"
INCBIN "gfx/cards/lass.pal"
ImakuniCardGfx:: ; e9e50 (3a:5e50)
- INCBIN "gfx/cards/imakuni.8x6.2bpp"
+ INCBIN "gfx/cards/imakuni.2bpp"
INCBIN "gfx/cards/imakuni.pal"
PokemonTraderCardGfx:: ; ea158 (3a:6158)
- INCBIN "gfx/cards/pokemontrader.8x6.2bpp"
+ INCBIN "gfx/cards/pokemontrader.2bpp"
INCBIN "gfx/cards/pokemontrader.pal"
PokemonBreederCardGfx:: ; ea460 (3a:6460)
- INCBIN "gfx/cards/pokemonbreeder.8x6.2bpp"
+ INCBIN "gfx/cards/pokemonbreeder.2bpp"
INCBIN "gfx/cards/pokemonbreeder.pal"
ClefairyDollCardGfx:: ; ea768 (3a:6768)
- INCBIN "gfx/cards/clefairydoll.8x6.2bpp"
+ INCBIN "gfx/cards/clefairydoll.2bpp"
INCBIN "gfx/cards/clefairydoll.pal"
MysteriousFossilCardGfx:: ; eaa70 (3a:6a70)
- INCBIN "gfx/cards/mysteriousfossil.8x6.2bpp"
+ INCBIN "gfx/cards/mysteriousfossil.2bpp"
INCBIN "gfx/cards/mysteriousfossil.pal"
EnergyRetrievalCardGfx:: ; ead78 (3a:6d78)
- INCBIN "gfx/cards/energyretrieval.8x6.2bpp"
+ INCBIN "gfx/cards/energyretrieval.2bpp"
INCBIN "gfx/cards/energyretrieval.pal"
SuperEnergyRetrievalCardGfx:: ; eb080 (3a:7080)
- INCBIN "gfx/cards/superenergyretrieval.8x6.2bpp"
+ INCBIN "gfx/cards/superenergyretrieval.2bpp"
INCBIN "gfx/cards/superenergyretrieval.pal"
EnergySearchCardGfx:: ; eb388 (3a:7388)
- INCBIN "gfx/cards/energysearch.8x6.2bpp"
+ INCBIN "gfx/cards/energysearch.2bpp"
INCBIN "gfx/cards/energysearch.pal"
EnergyRemovalCardGfx:: ; eb690 (3a:7690)
- INCBIN "gfx/cards/energyremoval.8x6.2bpp"
+ INCBIN "gfx/cards/energyremoval.2bpp"
INCBIN "gfx/cards/energyremoval.pal"
SuperEnergyRemovalCardGfx:: ; eb998 (3a:7998)
- INCBIN "gfx/cards/superenergyremoval.8x6.2bpp"
+ INCBIN "gfx/cards/superenergyremoval.2bpp"
INCBIN "gfx/cards/superenergyremoval.pal"
SwitchCardGfx:: ; ebca0 (3a:7ca0)
- INCBIN "gfx/cards/switch.8x6.2bpp"
+ INCBIN "gfx/cards/switch.2bpp"
INCBIN "gfx/cards/switch.pal"
SECTION "Card Gfx 11", ROMX
PokemonCenterCardGfx:: ; ec000 (3b:4000)
- INCBIN "gfx/cards/pokemoncenter.8x6.2bpp"
+ INCBIN "gfx/cards/pokemoncenter.2bpp"
INCBIN "gfx/cards/pokemoncenter.pal"
PokeBallCardGfx:: ; ec308 (3b:4308)
- INCBIN "gfx/cards/pokeball.8x6.2bpp"
+ INCBIN "gfx/cards/pokeball.2bpp"
INCBIN "gfx/cards/pokeball.pal"
ScoopUpCardGfx:: ; ec610 (3b:4610)
- INCBIN "gfx/cards/scoopup.8x6.2bpp"
+ INCBIN "gfx/cards/scoopup.2bpp"
INCBIN "gfx/cards/scoopup.pal"
ComputerSearchCardGfx:: ; ec918 (3b:4918)
- INCBIN "gfx/cards/computersearch.8x6.2bpp"
+ INCBIN "gfx/cards/computersearch.2bpp"
INCBIN "gfx/cards/computersearch.pal"
PokedexCardGfx:: ; ecc20 (3b:4c20)
- INCBIN "gfx/cards/pokedex.8x6.2bpp"
+ INCBIN "gfx/cards/pokedex.2bpp"
INCBIN "gfx/cards/pokedex.pal"
PlusPowerCardGfx:: ; ecf28 (3b:4f28)
- INCBIN "gfx/cards/pluspower.8x6.2bpp"
+ INCBIN "gfx/cards/pluspower.2bpp"
INCBIN "gfx/cards/pluspower.pal"
DefenderCardGfx:: ; ed230 (3b:5230)
- INCBIN "gfx/cards/defender.8x6.2bpp"
+ INCBIN "gfx/cards/defender.2bpp"
INCBIN "gfx/cards/defender.pal"
ItemFinderCardGfx:: ; ed538 (3b:5538)
- INCBIN "gfx/cards/itemfinder.8x6.2bpp"
+ INCBIN "gfx/cards/itemfinder.2bpp"
INCBIN "gfx/cards/itemfinder.pal"
GustOfWindCardGfx:: ; ed840 (3b:5840)
- INCBIN "gfx/cards/gustofwind.8x6.2bpp"
+ INCBIN "gfx/cards/gustofwind.2bpp"
INCBIN "gfx/cards/gustofwind.pal"
DevolutionSprayCardGfx:: ; edb48 (3b:5b48)
- INCBIN "gfx/cards/devolutionspray.8x6.2bpp"
+ INCBIN "gfx/cards/devolutionspray.2bpp"
INCBIN "gfx/cards/devolutionspray.pal"
PotionCardGfx:: ; ede50 (3b:5e50)
- INCBIN "gfx/cards/potion.8x6.2bpp"
+ INCBIN "gfx/cards/potion.2bpp"
INCBIN "gfx/cards/potion.pal"
SuperPotionCardGfx:: ; ee158 (3b:6158)
- INCBIN "gfx/cards/superpotion.8x6.2bpp"
+ INCBIN "gfx/cards/superpotion.2bpp"
INCBIN "gfx/cards/superpotion.pal"
FullHealCardGfx:: ; ee460 (3b:6460)
- INCBIN "gfx/cards/fullheal.8x6.2bpp"
+ INCBIN "gfx/cards/fullheal.2bpp"
INCBIN "gfx/cards/fullheal.pal"
ReviveCardGfx:: ; ee768 (3b:6768)
- INCBIN "gfx/cards/revive.8x6.2bpp"
+ INCBIN "gfx/cards/revive.2bpp"
INCBIN "gfx/cards/revive.pal"
MaintenanceCardGfx:: ; eea70 (3b:6a70)
- INCBIN "gfx/cards/maintenance.8x6.2bpp"
+ INCBIN "gfx/cards/maintenance.2bpp"
INCBIN "gfx/cards/maintenance.pal"
PokemonFluteCardGfx:: ; eed78 (3b:6d78)
- INCBIN "gfx/cards/pokemonflute.8x6.2bpp"
+ INCBIN "gfx/cards/pokemonflute.2bpp"
INCBIN "gfx/cards/pokemonflute.pal"
GamblerCardGfx:: ; ef080 (3b:7080)
- INCBIN "gfx/cards/gambler.8x6.2bpp"
+ INCBIN "gfx/cards/gambler.2bpp"
INCBIN "gfx/cards/gambler.pal"
RecycleCardGfx:: ; ef388 (3b:7388)
- INCBIN "gfx/cards/recycle.8x6.2bpp"
+ INCBIN "gfx/cards/recycle.2bpp"
INCBIN "gfx/cards/recycle.pal"
rept $970
diff --git a/src/gfx/booster_packs/colosseum2.t10.png b/src/gfx/booster_packs/colosseum2.png
index 1da1a52..1da1a52 100644
--- a/src/gfx/booster_packs/colosseum2.t10.png
+++ b/src/gfx/booster_packs/colosseum2.png
Binary files differ
diff --git a/src/gfx/booster_packs/evolution2.t10.png b/src/gfx/booster_packs/evolution2.png
index 09affa5..09affa5 100644
--- a/src/gfx/booster_packs/evolution2.t10.png
+++ b/src/gfx/booster_packs/evolution2.png
Binary files differ
diff --git a/src/gfx/booster_packs/laboratory2.t10.png b/src/gfx/booster_packs/laboratory2.png
index 4feb880..4feb880 100644
--- a/src/gfx/booster_packs/laboratory2.t10.png
+++ b/src/gfx/booster_packs/laboratory2.png
Binary files differ
diff --git a/src/gfx/booster_packs/mystery2.t10.png b/src/gfx/booster_packs/mystery2.png
index fc04dbf..fc04dbf 100644
--- a/src/gfx/booster_packs/mystery2.t10.png
+++ b/src/gfx/booster_packs/mystery2.png
Binary files differ
diff --git a/src/gfx/cardpop/cardpop1.t3.png b/src/gfx/cardpop/cardpop1.png
index c607d8d..c607d8d 100644
--- a/src/gfx/cardpop/cardpop1.t3.png
+++ b/src/gfx/cardpop/cardpop1.png
Binary files differ
diff --git a/src/gfx/cardpop/cardpop2.t3.png b/src/gfx/cardpop/cardpop2.png
index 75e5149..75e5149 100644
--- a/src/gfx/cardpop/cardpop2.t3.png
+++ b/src/gfx/cardpop/cardpop2.png
Binary files differ
diff --git a/src/gfx/cardpop/cardpop3.t3.png b/src/gfx/cardpop/cardpop3.png
index 48bd233..48bd233 100644
--- a/src/gfx/cardpop/cardpop3.t3.png
+++ b/src/gfx/cardpop/cardpop3.png
Binary files differ
diff --git a/src/gfx/cards/abra.8x6.png b/src/gfx/cards/abra.8x6.png
deleted file mode 100644
index 336068c..0000000
--- a/src/gfx/cards/abra.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/abra.pal b/src/gfx/cards/abra.pal
deleted file mode 100644
index 8478895..0000000
--- a/src/gfx/cards/abra.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/abra.png b/src/gfx/cards/abra.png
new file mode 100644
index 0000000..e3e8509
--- /dev/null
+++ b/src/gfx/cards/abra.png
Binary files differ
diff --git a/src/gfx/cards/aerodactyl.8x6.png b/src/gfx/cards/aerodactyl.8x6.png
deleted file mode 100644
index f250570..0000000
--- a/src/gfx/cards/aerodactyl.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/aerodactyl.pal b/src/gfx/cards/aerodactyl.pal
deleted file mode 100644
index 40075fb..0000000
--- a/src/gfx/cards/aerodactyl.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/aerodactyl.png b/src/gfx/cards/aerodactyl.png
new file mode 100644
index 0000000..c7bbc9e
--- /dev/null
+++ b/src/gfx/cards/aerodactyl.png
Binary files differ
diff --git a/src/gfx/cards/alakazam.8x6.png b/src/gfx/cards/alakazam.8x6.png
deleted file mode 100644
index de51bc8..0000000
--- a/src/gfx/cards/alakazam.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/alakazam.pal b/src/gfx/cards/alakazam.pal
deleted file mode 100644
index 9905df9..0000000
--- a/src/gfx/cards/alakazam.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/alakazam.png b/src/gfx/cards/alakazam.png
new file mode 100644
index 0000000..099fd66
--- /dev/null
+++ b/src/gfx/cards/alakazam.png
Binary files differ
diff --git a/src/gfx/cards/arbok.8x6.png b/src/gfx/cards/arbok.8x6.png
deleted file mode 100644
index 4d0bccb..0000000
--- a/src/gfx/cards/arbok.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/arbok.pal b/src/gfx/cards/arbok.pal
deleted file mode 100644
index 7220a36..0000000
--- a/src/gfx/cards/arbok.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/arbok.png b/src/gfx/cards/arbok.png
new file mode 100644
index 0000000..0393921
--- /dev/null
+++ b/src/gfx/cards/arbok.png
Binary files differ
diff --git a/src/gfx/cards/arcanine1.8x6.png b/src/gfx/cards/arcanine1.8x6.png
deleted file mode 100644
index 31cb8b0..0000000
--- a/src/gfx/cards/arcanine1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/arcanine1.pal b/src/gfx/cards/arcanine1.pal
deleted file mode 100644
index 844f708..0000000
--- a/src/gfx/cards/arcanine1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/arcanine1.png b/src/gfx/cards/arcanine1.png
new file mode 100644
index 0000000..840865b
--- /dev/null
+++ b/src/gfx/cards/arcanine1.png
Binary files differ
diff --git a/src/gfx/cards/arcanine2.8x6.png b/src/gfx/cards/arcanine2.8x6.png
deleted file mode 100644
index 64fc0bd..0000000
--- a/src/gfx/cards/arcanine2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/arcanine2.pal b/src/gfx/cards/arcanine2.pal
deleted file mode 100644
index f30b0c5..0000000
--- a/src/gfx/cards/arcanine2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/arcanine2.png b/src/gfx/cards/arcanine2.png
new file mode 100644
index 0000000..e943cc4
--- /dev/null
+++ b/src/gfx/cards/arcanine2.png
Binary files differ
diff --git a/src/gfx/cards/articuno1.8x6.png b/src/gfx/cards/articuno1.8x6.png
deleted file mode 100644
index f9c54c4..0000000
--- a/src/gfx/cards/articuno1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/articuno1.pal b/src/gfx/cards/articuno1.pal
deleted file mode 100644
index a7ba53f..0000000
--- a/src/gfx/cards/articuno1.pal
+++ /dev/null
@@ -1 +0,0 @@
-~U \ No newline at end of file
diff --git a/src/gfx/cards/articuno1.png b/src/gfx/cards/articuno1.png
new file mode 100644
index 0000000..e03d821
--- /dev/null
+++ b/src/gfx/cards/articuno1.png
Binary files differ
diff --git a/src/gfx/cards/articuno2.8x6.png b/src/gfx/cards/articuno2.8x6.png
deleted file mode 100644
index d7bdc49..0000000
--- a/src/gfx/cards/articuno2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/articuno2.pal b/src/gfx/cards/articuno2.pal
deleted file mode 100644
index 7d7d50e..0000000
--- a/src/gfx/cards/articuno2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/articuno2.png b/src/gfx/cards/articuno2.png
new file mode 100644
index 0000000..948c5a6
--- /dev/null
+++ b/src/gfx/cards/articuno2.png
Binary files differ
diff --git a/src/gfx/cards/beedrill.8x6.png b/src/gfx/cards/beedrill.8x6.png
deleted file mode 100644
index ec6af50..0000000
--- a/src/gfx/cards/beedrill.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/beedrill.pal b/src/gfx/cards/beedrill.pal
deleted file mode 100644
index 23f06a5..0000000
--- a/src/gfx/cards/beedrill.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/beedrill.png b/src/gfx/cards/beedrill.png
new file mode 100644
index 0000000..fabacc9
--- /dev/null
+++ b/src/gfx/cards/beedrill.png
Binary files differ
diff --git a/src/gfx/cards/bellsprout.8x6.png b/src/gfx/cards/bellsprout.8x6.png
deleted file mode 100644
index 6dd6297..0000000
--- a/src/gfx/cards/bellsprout.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/bellsprout.pal b/src/gfx/cards/bellsprout.pal
deleted file mode 100644
index ede7e7b..0000000
--- a/src/gfx/cards/bellsprout.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/bellsprout.png b/src/gfx/cards/bellsprout.png
new file mode 100644
index 0000000..044fd5b
--- /dev/null
+++ b/src/gfx/cards/bellsprout.png
Binary files differ
diff --git a/src/gfx/cards/bill.8x6.png b/src/gfx/cards/bill.8x6.png
deleted file mode 100644
index f730116..0000000
--- a/src/gfx/cards/bill.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/bill.pal b/src/gfx/cards/bill.pal
deleted file mode 100644
index aab4025..0000000
--- a/src/gfx/cards/bill.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/bill.png b/src/gfx/cards/bill.png
new file mode 100644
index 0000000..d915777
--- /dev/null
+++ b/src/gfx/cards/bill.png
Binary files differ
diff --git a/src/gfx/cards/blastoise.8x6.png b/src/gfx/cards/blastoise.8x6.png
deleted file mode 100644
index 68c7ddb..0000000
--- a/src/gfx/cards/blastoise.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/blastoise.pal b/src/gfx/cards/blastoise.pal
deleted file mode 100644
index 0145e41..0000000
--- a/src/gfx/cards/blastoise.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/blastoise.png b/src/gfx/cards/blastoise.png
new file mode 100644
index 0000000..d2bc5bb
--- /dev/null
+++ b/src/gfx/cards/blastoise.png
Binary files differ
diff --git a/src/gfx/cards/bulbasaur.8x6.png b/src/gfx/cards/bulbasaur.8x6.png
deleted file mode 100644
index fdb0552..0000000
--- a/src/gfx/cards/bulbasaur.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/bulbasaur.pal b/src/gfx/cards/bulbasaur.pal
deleted file mode 100644
index 1d1a8a0..0000000
--- a/src/gfx/cards/bulbasaur.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/bulbasaur.png b/src/gfx/cards/bulbasaur.png
new file mode 100644
index 0000000..5bda906
--- /dev/null
+++ b/src/gfx/cards/bulbasaur.png
Binary files differ
diff --git a/src/gfx/cards/butterfree.8x6.png b/src/gfx/cards/butterfree.8x6.png
deleted file mode 100644
index 5c02eb1..0000000
--- a/src/gfx/cards/butterfree.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/butterfree.pal b/src/gfx/cards/butterfree.pal
deleted file mode 100644
index 66dd06d..0000000
--- a/src/gfx/cards/butterfree.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/butterfree.png b/src/gfx/cards/butterfree.png
new file mode 100644
index 0000000..c1c8d4e
--- /dev/null
+++ b/src/gfx/cards/butterfree.png
Binary files differ
diff --git a/src/gfx/cards/caterpie.8x6.png b/src/gfx/cards/caterpie.8x6.png
deleted file mode 100644
index c1784e0..0000000
--- a/src/gfx/cards/caterpie.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/caterpie.pal b/src/gfx/cards/caterpie.pal
deleted file mode 100644
index 13c1994..0000000
--- a/src/gfx/cards/caterpie.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/caterpie.png b/src/gfx/cards/caterpie.png
new file mode 100644
index 0000000..06cef2a
--- /dev/null
+++ b/src/gfx/cards/caterpie.png
Binary files differ
diff --git a/src/gfx/cards/chansey.8x6.png b/src/gfx/cards/chansey.8x6.png
deleted file mode 100644
index e63a246..0000000
--- a/src/gfx/cards/chansey.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/chansey.pal b/src/gfx/cards/chansey.pal
deleted file mode 100644
index 87ec980..0000000
--- a/src/gfx/cards/chansey.pal
+++ /dev/null
@@ -1 +0,0 @@
-_kB1 \ No newline at end of file
diff --git a/src/gfx/cards/chansey.png b/src/gfx/cards/chansey.png
new file mode 100644
index 0000000..ae31291
--- /dev/null
+++ b/src/gfx/cards/chansey.png
Binary files differ
diff --git a/src/gfx/cards/charizard.8x6.png b/src/gfx/cards/charizard.8x6.png
deleted file mode 100644
index d5d22ef..0000000
--- a/src/gfx/cards/charizard.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/charizard.pal b/src/gfx/cards/charizard.pal
deleted file mode 100644
index 13c5ead..0000000
--- a/src/gfx/cards/charizard.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/charizard.png b/src/gfx/cards/charizard.png
new file mode 100644
index 0000000..6dc3968
--- /dev/null
+++ b/src/gfx/cards/charizard.png
Binary files differ
diff --git a/src/gfx/cards/charmander.8x6.png b/src/gfx/cards/charmander.8x6.png
deleted file mode 100644
index 7fadeaf..0000000
--- a/src/gfx/cards/charmander.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/charmander.pal b/src/gfx/cards/charmander.pal
deleted file mode 100644
index 85d1934..0000000
--- a/src/gfx/cards/charmander.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/charmander.png b/src/gfx/cards/charmander.png
new file mode 100644
index 0000000..8b2f4f0
--- /dev/null
+++ b/src/gfx/cards/charmander.png
Binary files differ
diff --git a/src/gfx/cards/charmeleon.8x6.png b/src/gfx/cards/charmeleon.8x6.png
deleted file mode 100644
index c996d81..0000000
--- a/src/gfx/cards/charmeleon.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/charmeleon.pal b/src/gfx/cards/charmeleon.pal
deleted file mode 100644
index 6133a9e..0000000
--- a/src/gfx/cards/charmeleon.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/charmeleon.png b/src/gfx/cards/charmeleon.png
new file mode 100644
index 0000000..b7ffb64
--- /dev/null
+++ b/src/gfx/cards/charmeleon.png
Binary files differ
diff --git a/src/gfx/cards/clefable.8x6.png b/src/gfx/cards/clefable.8x6.png
deleted file mode 100644
index 014b1b9..0000000
--- a/src/gfx/cards/clefable.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/clefable.pal b/src/gfx/cards/clefable.pal
deleted file mode 100644
index 5f85ff1..0000000
--- a/src/gfx/cards/clefable.pal
+++ /dev/null
@@ -1 +0,0 @@
-V \ No newline at end of file
diff --git a/src/gfx/cards/clefable.png b/src/gfx/cards/clefable.png
new file mode 100644
index 0000000..7c0cb86
--- /dev/null
+++ b/src/gfx/cards/clefable.png
Binary files differ
diff --git a/src/gfx/cards/clefairy.8x6.png b/src/gfx/cards/clefairy.8x6.png
deleted file mode 100644
index cfc66ef..0000000
--- a/src/gfx/cards/clefairy.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/clefairy.pal b/src/gfx/cards/clefairy.pal
deleted file mode 100644
index 1b27709..0000000
--- a/src/gfx/cards/clefairy.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/clefairy.png b/src/gfx/cards/clefairy.png
new file mode 100644
index 0000000..eda9e4d
--- /dev/null
+++ b/src/gfx/cards/clefairy.png
Binary files differ
diff --git a/src/gfx/cards/clefairydoll.8x6.png b/src/gfx/cards/clefairydoll.8x6.png
deleted file mode 100644
index c12f8c4..0000000
--- a/src/gfx/cards/clefairydoll.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/clefairydoll.pal b/src/gfx/cards/clefairydoll.pal
deleted file mode 100644
index 2d980d8..0000000
--- a/src/gfx/cards/clefairydoll.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/clefairydoll.png b/src/gfx/cards/clefairydoll.png
new file mode 100644
index 0000000..e607ea1
--- /dev/null
+++ b/src/gfx/cards/clefairydoll.png
Binary files differ
diff --git a/src/gfx/cards/cloyster.8x6.png b/src/gfx/cards/cloyster.8x6.png
deleted file mode 100644
index 5f59e88..0000000
--- a/src/gfx/cards/cloyster.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/cloyster.pal b/src/gfx/cards/cloyster.pal
deleted file mode 100644
index 8243bd0..0000000
--- a/src/gfx/cards/cloyster.pal
+++ /dev/null
@@ -1 +0,0 @@
-_kU \ No newline at end of file
diff --git a/src/gfx/cards/cloyster.png b/src/gfx/cards/cloyster.png
new file mode 100644
index 0000000..c24df71
--- /dev/null
+++ b/src/gfx/cards/cloyster.png
Binary files differ
diff --git a/src/gfx/cards/computersearch.8x6.png b/src/gfx/cards/computersearch.8x6.png
deleted file mode 100644
index 79f1c78..0000000
--- a/src/gfx/cards/computersearch.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/computersearch.pal b/src/gfx/cards/computersearch.pal
deleted file mode 100644
index de3a143..0000000
--- a/src/gfx/cards/computersearch.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/computersearch.png b/src/gfx/cards/computersearch.png
new file mode 100644
index 0000000..4786ab3
--- /dev/null
+++ b/src/gfx/cards/computersearch.png
Binary files differ
diff --git a/src/gfx/cards/cubone.8x6.png b/src/gfx/cards/cubone.8x6.png
deleted file mode 100644
index 49d5b23..0000000
--- a/src/gfx/cards/cubone.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/cubone.pal b/src/gfx/cards/cubone.pal
deleted file mode 100644
index 3352c5b..0000000
--- a/src/gfx/cards/cubone.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/cubone.png b/src/gfx/cards/cubone.png
new file mode 100644
index 0000000..d914d25
--- /dev/null
+++ b/src/gfx/cards/cubone.png
Binary files differ
diff --git a/src/gfx/cards/defender.8x6.png b/src/gfx/cards/defender.8x6.png
deleted file mode 100644
index adde4fc..0000000
--- a/src/gfx/cards/defender.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/defender.pal b/src/gfx/cards/defender.pal
deleted file mode 100644
index 541b683..0000000
--- a/src/gfx/cards/defender.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/defender.png b/src/gfx/cards/defender.png
new file mode 100644
index 0000000..bdeb050
--- /dev/null
+++ b/src/gfx/cards/defender.png
Binary files differ
diff --git a/src/gfx/cards/devolutionspray.8x6.png b/src/gfx/cards/devolutionspray.8x6.png
deleted file mode 100644
index b3b69a4..0000000
--- a/src/gfx/cards/devolutionspray.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/devolutionspray.pal b/src/gfx/cards/devolutionspray.pal
deleted file mode 100644
index 5b1619f..0000000
--- a/src/gfx/cards/devolutionspray.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/devolutionspray.png b/src/gfx/cards/devolutionspray.png
new file mode 100644
index 0000000..de65594
--- /dev/null
+++ b/src/gfx/cards/devolutionspray.png
Binary files differ
diff --git a/src/gfx/cards/dewgong.8x6.png b/src/gfx/cards/dewgong.8x6.png
deleted file mode 100644
index c4be81b..0000000
--- a/src/gfx/cards/dewgong.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dewgong.pal b/src/gfx/cards/dewgong.pal
deleted file mode 100644
index ae4ee37..0000000
--- a/src/gfx/cards/dewgong.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dewgong.png b/src/gfx/cards/dewgong.png
new file mode 100644
index 0000000..21d8f49
--- /dev/null
+++ b/src/gfx/cards/dewgong.png
Binary files differ
diff --git a/src/gfx/cards/diglett.8x6.png b/src/gfx/cards/diglett.8x6.png
deleted file mode 100644
index cae6aef..0000000
--- a/src/gfx/cards/diglett.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/diglett.pal b/src/gfx/cards/diglett.pal
deleted file mode 100644
index 96817c1..0000000
--- a/src/gfx/cards/diglett.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/diglett.png b/src/gfx/cards/diglett.png
new file mode 100644
index 0000000..06e3f98
--- /dev/null
+++ b/src/gfx/cards/diglett.png
Binary files differ
diff --git a/src/gfx/cards/ditto.8x6.png b/src/gfx/cards/ditto.8x6.png
deleted file mode 100644
index 566dcf4..0000000
--- a/src/gfx/cards/ditto.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ditto.pal b/src/gfx/cards/ditto.pal
deleted file mode 100644
index fcc03f2..0000000
--- a/src/gfx/cards/ditto.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ditto.png b/src/gfx/cards/ditto.png
new file mode 100644
index 0000000..14cf202
--- /dev/null
+++ b/src/gfx/cards/ditto.png
Binary files differ
diff --git a/src/gfx/cards/dodrio.8x6.png b/src/gfx/cards/dodrio.8x6.png
deleted file mode 100644
index 222bb79..0000000
--- a/src/gfx/cards/dodrio.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dodrio.pal b/src/gfx/cards/dodrio.pal
deleted file mode 100644
index 5209538..0000000
--- a/src/gfx/cards/dodrio.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dodrio.png b/src/gfx/cards/dodrio.png
new file mode 100644
index 0000000..4792c45
--- /dev/null
+++ b/src/gfx/cards/dodrio.png
Binary files differ
diff --git a/src/gfx/cards/doduo.8x6.png b/src/gfx/cards/doduo.8x6.png
deleted file mode 100644
index fad2467..0000000
--- a/src/gfx/cards/doduo.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/doduo.pal b/src/gfx/cards/doduo.pal
deleted file mode 100644
index b3e7b20..0000000
--- a/src/gfx/cards/doduo.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/doduo.png b/src/gfx/cards/doduo.png
new file mode 100644
index 0000000..31b44af
--- /dev/null
+++ b/src/gfx/cards/doduo.png
Binary files differ
diff --git a/src/gfx/cards/doublecolorlessenergy.8x6.png b/src/gfx/cards/doublecolorlessenergy.8x6.png
deleted file mode 100644
index b3b367b..0000000
--- a/src/gfx/cards/doublecolorlessenergy.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/doublecolorlessenergy.pal b/src/gfx/cards/doublecolorlessenergy.pal
deleted file mode 100644
index 85c7d41..0000000
--- a/src/gfx/cards/doublecolorlessenergy.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/doublecolorlessenergy.png b/src/gfx/cards/doublecolorlessenergy.png
new file mode 100644
index 0000000..767be48
--- /dev/null
+++ b/src/gfx/cards/doublecolorlessenergy.png
Binary files differ
diff --git a/src/gfx/cards/dragonair.8x6.png b/src/gfx/cards/dragonair.8x6.png
deleted file mode 100644
index e0cf766..0000000
--- a/src/gfx/cards/dragonair.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dragonair.pal b/src/gfx/cards/dragonair.pal
deleted file mode 100644
index 96b3358..0000000
--- a/src/gfx/cards/dragonair.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dragonair.png b/src/gfx/cards/dragonair.png
new file mode 100644
index 0000000..5c88db3
--- /dev/null
+++ b/src/gfx/cards/dragonair.png
Binary files differ
diff --git a/src/gfx/cards/dragonite1.8x6.png b/src/gfx/cards/dragonite1.8x6.png
deleted file mode 100644
index 10c4ed9..0000000
--- a/src/gfx/cards/dragonite1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dragonite1.pal b/src/gfx/cards/dragonite1.pal
deleted file mode 100644
index 9b3e049..0000000
--- a/src/gfx/cards/dragonite1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dragonite1.png b/src/gfx/cards/dragonite1.png
new file mode 100644
index 0000000..205b109
--- /dev/null
+++ b/src/gfx/cards/dragonite1.png
Binary files differ
diff --git a/src/gfx/cards/dragonite2.8x6.png b/src/gfx/cards/dragonite2.8x6.png
deleted file mode 100644
index 9d15c00..0000000
--- a/src/gfx/cards/dragonite2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dragonite2.pal b/src/gfx/cards/dragonite2.pal
deleted file mode 100644
index 1313288..0000000
--- a/src/gfx/cards/dragonite2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dragonite2.png b/src/gfx/cards/dragonite2.png
new file mode 100644
index 0000000..8ba22a7
--- /dev/null
+++ b/src/gfx/cards/dragonite2.png
Binary files differ
diff --git a/src/gfx/cards/dratini.8x6.png b/src/gfx/cards/dratini.8x6.png
deleted file mode 100644
index 1c66ac3..0000000
--- a/src/gfx/cards/dratini.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dratini.pal b/src/gfx/cards/dratini.pal
deleted file mode 100644
index 8cb1478..0000000
--- a/src/gfx/cards/dratini.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dratini.png b/src/gfx/cards/dratini.png
new file mode 100644
index 0000000..77aaa63
--- /dev/null
+++ b/src/gfx/cards/dratini.png
Binary files differ
diff --git a/src/gfx/cards/drowzee.8x6.png b/src/gfx/cards/drowzee.8x6.png
deleted file mode 100644
index 3239903..0000000
--- a/src/gfx/cards/drowzee.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/drowzee.pal b/src/gfx/cards/drowzee.pal
deleted file mode 100644
index e1ac5f8..0000000
--- a/src/gfx/cards/drowzee.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/drowzee.png b/src/gfx/cards/drowzee.png
new file mode 100644
index 0000000..ee65440
--- /dev/null
+++ b/src/gfx/cards/drowzee.png
Binary files differ
diff --git a/src/gfx/cards/dugtrio.8x6.png b/src/gfx/cards/dugtrio.8x6.png
deleted file mode 100644
index bffe640..0000000
--- a/src/gfx/cards/dugtrio.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dugtrio.pal b/src/gfx/cards/dugtrio.pal
deleted file mode 100644
index 6d8c3d2..0000000
--- a/src/gfx/cards/dugtrio.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/dugtrio.png b/src/gfx/cards/dugtrio.png
new file mode 100644
index 0000000..41d93d6
--- /dev/null
+++ b/src/gfx/cards/dugtrio.png
Binary files differ
diff --git a/src/gfx/cards/eevee.8x6.png b/src/gfx/cards/eevee.8x6.png
deleted file mode 100644
index 3114928..0000000
--- a/src/gfx/cards/eevee.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/eevee.pal b/src/gfx/cards/eevee.pal
deleted file mode 100644
index 0cf883c..0000000
--- a/src/gfx/cards/eevee.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/eevee.png b/src/gfx/cards/eevee.png
new file mode 100644
index 0000000..534ed3d
--- /dev/null
+++ b/src/gfx/cards/eevee.png
Binary files differ
diff --git a/src/gfx/cards/ekans.8x6.png b/src/gfx/cards/ekans.8x6.png
deleted file mode 100644
index 416e073..0000000
--- a/src/gfx/cards/ekans.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ekans.pal b/src/gfx/cards/ekans.pal
deleted file mode 100644
index 73f6a7c..0000000
--- a/src/gfx/cards/ekans.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ekans.png b/src/gfx/cards/ekans.png
new file mode 100644
index 0000000..16b6be7
--- /dev/null
+++ b/src/gfx/cards/ekans.png
Binary files differ
diff --git a/src/gfx/cards/electabuzz1.8x6.png b/src/gfx/cards/electabuzz1.8x6.png
deleted file mode 100644
index 75ed8f5..0000000
--- a/src/gfx/cards/electabuzz1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/electabuzz1.pal b/src/gfx/cards/electabuzz1.pal
deleted file mode 100644
index eab69c6..0000000
--- a/src/gfx/cards/electabuzz1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/electabuzz1.png b/src/gfx/cards/electabuzz1.png
new file mode 100644
index 0000000..c6b6711
--- /dev/null
+++ b/src/gfx/cards/electabuzz1.png
Binary files differ
diff --git a/src/gfx/cards/electabuzz2.8x6.png b/src/gfx/cards/electabuzz2.8x6.png
deleted file mode 100644
index 8ca64a8..0000000
--- a/src/gfx/cards/electabuzz2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/electabuzz2.pal b/src/gfx/cards/electabuzz2.pal
deleted file mode 100644
index c4110cb..0000000
--- a/src/gfx/cards/electabuzz2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/electabuzz2.png b/src/gfx/cards/electabuzz2.png
new file mode 100644
index 0000000..84a0067
--- /dev/null
+++ b/src/gfx/cards/electabuzz2.png
Binary files differ
diff --git a/src/gfx/cards/electrode1.8x6.png b/src/gfx/cards/electrode1.8x6.png
deleted file mode 100644
index cdc1fca..0000000
--- a/src/gfx/cards/electrode1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/electrode1.pal b/src/gfx/cards/electrode1.pal
deleted file mode 100644
index 09074fa..0000000
--- a/src/gfx/cards/electrode1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/electrode1.png b/src/gfx/cards/electrode1.png
new file mode 100644
index 0000000..2c3c67a
--- /dev/null
+++ b/src/gfx/cards/electrode1.png
Binary files differ
diff --git a/src/gfx/cards/electrode2.8x6.png b/src/gfx/cards/electrode2.8x6.png
deleted file mode 100644
index 29ccc8b..0000000
--- a/src/gfx/cards/electrode2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/electrode2.pal b/src/gfx/cards/electrode2.pal
deleted file mode 100644
index 7cb4fe9..0000000
--- a/src/gfx/cards/electrode2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/electrode2.png b/src/gfx/cards/electrode2.png
new file mode 100644
index 0000000..10a6163
--- /dev/null
+++ b/src/gfx/cards/electrode2.png
Binary files differ
diff --git a/src/gfx/cards/energyremoval.8x6.png b/src/gfx/cards/energyremoval.8x6.png
deleted file mode 100644
index 1958df7..0000000
--- a/src/gfx/cards/energyremoval.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/energyremoval.pal b/src/gfx/cards/energyremoval.pal
deleted file mode 100644
index ce72955..0000000
--- a/src/gfx/cards/energyremoval.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/energyremoval.png b/src/gfx/cards/energyremoval.png
new file mode 100644
index 0000000..860d517
--- /dev/null
+++ b/src/gfx/cards/energyremoval.png
Binary files differ
diff --git a/src/gfx/cards/energyretrieval.8x6.png b/src/gfx/cards/energyretrieval.8x6.png
deleted file mode 100644
index 270f967..0000000
--- a/src/gfx/cards/energyretrieval.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/energyretrieval.pal b/src/gfx/cards/energyretrieval.pal
deleted file mode 100644
index 770704b..0000000
--- a/src/gfx/cards/energyretrieval.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/energyretrieval.png b/src/gfx/cards/energyretrieval.png
new file mode 100644
index 0000000..93154be
--- /dev/null
+++ b/src/gfx/cards/energyretrieval.png
Binary files differ
diff --git a/src/gfx/cards/energysearch.8x6.png b/src/gfx/cards/energysearch.8x6.png
deleted file mode 100644
index d5d5328..0000000
--- a/src/gfx/cards/energysearch.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/energysearch.pal b/src/gfx/cards/energysearch.pal
deleted file mode 100644
index a638ba4..0000000
--- a/src/gfx/cards/energysearch.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/energysearch.png b/src/gfx/cards/energysearch.png
new file mode 100644
index 0000000..0fe54fd
--- /dev/null
+++ b/src/gfx/cards/energysearch.png
Binary files differ
diff --git a/src/gfx/cards/exeggcute.8x6.png b/src/gfx/cards/exeggcute.8x6.png
deleted file mode 100644
index 585aa5d..0000000
--- a/src/gfx/cards/exeggcute.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/exeggcute.pal b/src/gfx/cards/exeggcute.pal
deleted file mode 100644
index b9cf4ad..0000000
--- a/src/gfx/cards/exeggcute.pal
+++ /dev/null
@@ -1 +0,0 @@
-_U  \ No newline at end of file
diff --git a/src/gfx/cards/exeggcute.png b/src/gfx/cards/exeggcute.png
new file mode 100644
index 0000000..1ae396f
--- /dev/null
+++ b/src/gfx/cards/exeggcute.png
Binary files differ
diff --git a/src/gfx/cards/exeggutor.8x6.png b/src/gfx/cards/exeggutor.8x6.png
deleted file mode 100644
index 6687638..0000000
--- a/src/gfx/cards/exeggutor.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/exeggutor.pal b/src/gfx/cards/exeggutor.pal
deleted file mode 100644
index 5296d43..0000000
--- a/src/gfx/cards/exeggutor.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/exeggutor.png b/src/gfx/cards/exeggutor.png
new file mode 100644
index 0000000..1403e38
--- /dev/null
+++ b/src/gfx/cards/exeggutor.png
Binary files differ
diff --git a/src/gfx/cards/farfetchd.8x6.png b/src/gfx/cards/farfetchd.8x6.png
deleted file mode 100644
index b156585..0000000
--- a/src/gfx/cards/farfetchd.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/farfetchd.pal b/src/gfx/cards/farfetchd.pal
deleted file mode 100644
index 2681635..0000000
--- a/src/gfx/cards/farfetchd.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/farfetchd.png b/src/gfx/cards/farfetchd.png
new file mode 100644
index 0000000..fc5d678
--- /dev/null
+++ b/src/gfx/cards/farfetchd.png
Binary files differ
diff --git a/src/gfx/cards/fearow.8x6.png b/src/gfx/cards/fearow.8x6.png
deleted file mode 100644
index 25f0d12..0000000
--- a/src/gfx/cards/fearow.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/fearow.pal b/src/gfx/cards/fearow.pal
deleted file mode 100644
index 5855ba7..0000000
--- a/src/gfx/cards/fearow.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/fearow.png b/src/gfx/cards/fearow.png
new file mode 100644
index 0000000..dbc9197
--- /dev/null
+++ b/src/gfx/cards/fearow.png
Binary files differ
diff --git a/src/gfx/cards/fightingenergy.8x6.png b/src/gfx/cards/fightingenergy.8x6.png
deleted file mode 100644
index 2c63c5b..0000000
--- a/src/gfx/cards/fightingenergy.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/fightingenergy.pal b/src/gfx/cards/fightingenergy.pal
deleted file mode 100644
index 8680b0c..0000000
--- a/src/gfx/cards/fightingenergy.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/fightingenergy.png b/src/gfx/cards/fightingenergy.png
new file mode 100644
index 0000000..ef50467
--- /dev/null
+++ b/src/gfx/cards/fightingenergy.png
Binary files differ
diff --git a/src/gfx/cards/fireenergy.8x6.png b/src/gfx/cards/fireenergy.8x6.png
deleted file mode 100644
index 2cb3419..0000000
--- a/src/gfx/cards/fireenergy.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/fireenergy.pal b/src/gfx/cards/fireenergy.pal
deleted file mode 100644
index 3cc39b1..0000000
--- a/src/gfx/cards/fireenergy.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/fireenergy.png b/src/gfx/cards/fireenergy.png
new file mode 100644
index 0000000..451dd4f
--- /dev/null
+++ b/src/gfx/cards/fireenergy.png
Binary files differ
diff --git a/src/gfx/cards/flareon1.8x6.png b/src/gfx/cards/flareon1.8x6.png
deleted file mode 100644
index eb5ebe3..0000000
--- a/src/gfx/cards/flareon1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/flareon1.pal b/src/gfx/cards/flareon1.pal
deleted file mode 100644
index 2c9594a..0000000
--- a/src/gfx/cards/flareon1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/flareon1.png b/src/gfx/cards/flareon1.png
new file mode 100644
index 0000000..0faa467
--- /dev/null
+++ b/src/gfx/cards/flareon1.png
Binary files differ
diff --git a/src/gfx/cards/flareon2.8x6.png b/src/gfx/cards/flareon2.8x6.png
deleted file mode 100644
index 6c32566..0000000
--- a/src/gfx/cards/flareon2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/flareon2.pal b/src/gfx/cards/flareon2.pal
deleted file mode 100644
index 28c1b50..0000000
--- a/src/gfx/cards/flareon2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/flareon2.png b/src/gfx/cards/flareon2.png
new file mode 100644
index 0000000..9e822ae
--- /dev/null
+++ b/src/gfx/cards/flareon2.png
Binary files differ
diff --git a/src/gfx/cards/flyingpikachu.8x6.png b/src/gfx/cards/flyingpikachu.8x6.png
deleted file mode 100644
index 14168a3..0000000
--- a/src/gfx/cards/flyingpikachu.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/flyingpikachu.pal b/src/gfx/cards/flyingpikachu.pal
deleted file mode 100644
index 00880ab..0000000
--- a/src/gfx/cards/flyingpikachu.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/flyingpikachu.png b/src/gfx/cards/flyingpikachu.png
new file mode 100644
index 0000000..155855d
--- /dev/null
+++ b/src/gfx/cards/flyingpikachu.png
Binary files differ
diff --git a/src/gfx/cards/fullheal.8x6.png b/src/gfx/cards/fullheal.8x6.png
deleted file mode 100644
index 281cc20..0000000
--- a/src/gfx/cards/fullheal.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/fullheal.pal b/src/gfx/cards/fullheal.pal
deleted file mode 100644
index 3a5a83c..0000000
--- a/src/gfx/cards/fullheal.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/fullheal.png b/src/gfx/cards/fullheal.png
new file mode 100644
index 0000000..d6a5c34
--- /dev/null
+++ b/src/gfx/cards/fullheal.png
Binary files differ
diff --git a/src/gfx/cards/gambler.8x6.png b/src/gfx/cards/gambler.8x6.png
deleted file mode 100644
index 1aeb1e3..0000000
--- a/src/gfx/cards/gambler.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/gambler.pal b/src/gfx/cards/gambler.pal
deleted file mode 100644
index 58f8ec9..0000000
--- a/src/gfx/cards/gambler.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/gambler.png b/src/gfx/cards/gambler.png
new file mode 100644
index 0000000..aa67e41
--- /dev/null
+++ b/src/gfx/cards/gambler.png
Binary files differ
diff --git a/src/gfx/cards/gastly1.8x6.png b/src/gfx/cards/gastly1.8x6.png
deleted file mode 100644
index 2a7bd88..0000000
--- a/src/gfx/cards/gastly1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/gastly1.pal b/src/gfx/cards/gastly1.pal
deleted file mode 100644
index 61e1ce3..0000000
--- a/src/gfx/cards/gastly1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/gastly1.png b/src/gfx/cards/gastly1.png
new file mode 100644
index 0000000..4bac9e6
--- /dev/null
+++ b/src/gfx/cards/gastly1.png
Binary files differ
diff --git a/src/gfx/cards/gastly2.8x6.png b/src/gfx/cards/gastly2.8x6.png
deleted file mode 100644
index b9d56b2..0000000
--- a/src/gfx/cards/gastly2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/gastly2.pal b/src/gfx/cards/gastly2.pal
deleted file mode 100644
index ce711a8..0000000
--- a/src/gfx/cards/gastly2.pal
+++ /dev/null
@@ -1 +0,0 @@
-0 \ No newline at end of file
diff --git a/src/gfx/cards/gastly2.png b/src/gfx/cards/gastly2.png
new file mode 100644
index 0000000..06d393f
--- /dev/null
+++ b/src/gfx/cards/gastly2.png
Binary files differ
diff --git a/src/gfx/cards/gengar.8x6.png b/src/gfx/cards/gengar.8x6.png
deleted file mode 100644
index 53d9bf9..0000000
--- a/src/gfx/cards/gengar.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/gengar.pal b/src/gfx/cards/gengar.pal
deleted file mode 100644
index 42817c1..0000000
--- a/src/gfx/cards/gengar.pal
+++ /dev/null
@@ -1 +0,0 @@
-_ T \ No newline at end of file
diff --git a/src/gfx/cards/gengar.png b/src/gfx/cards/gengar.png
new file mode 100644
index 0000000..74026d0
--- /dev/null
+++ b/src/gfx/cards/gengar.png
Binary files differ
diff --git a/src/gfx/cards/geodude.8x6.png b/src/gfx/cards/geodude.8x6.png
deleted file mode 100644
index 1c5a0fb..0000000
--- a/src/gfx/cards/geodude.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/geodude.pal b/src/gfx/cards/geodude.pal
deleted file mode 100644
index f4ca2f0..0000000
--- a/src/gfx/cards/geodude.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/geodude.png b/src/gfx/cards/geodude.png
new file mode 100644
index 0000000..5d7c9eb
--- /dev/null
+++ b/src/gfx/cards/geodude.png
Binary files differ
diff --git a/src/gfx/cards/gloom.8x6.png b/src/gfx/cards/gloom.8x6.png
deleted file mode 100644
index 973001b..0000000
--- a/src/gfx/cards/gloom.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/gloom.pal b/src/gfx/cards/gloom.pal
deleted file mode 100644
index c10860d..0000000
--- a/src/gfx/cards/gloom.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/gloom.png b/src/gfx/cards/gloom.png
new file mode 100644
index 0000000..e306d98
--- /dev/null
+++ b/src/gfx/cards/gloom.png
Binary files differ
diff --git a/src/gfx/cards/golbat.8x6.png b/src/gfx/cards/golbat.8x6.png
deleted file mode 100644
index 342b48c..0000000
--- a/src/gfx/cards/golbat.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/golbat.pal b/src/gfx/cards/golbat.pal
deleted file mode 100644
index 4d58109..0000000
--- a/src/gfx/cards/golbat.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/golbat.png b/src/gfx/cards/golbat.png
new file mode 100644
index 0000000..239d662
--- /dev/null
+++ b/src/gfx/cards/golbat.png
Binary files differ
diff --git a/src/gfx/cards/goldeen.8x6.png b/src/gfx/cards/goldeen.8x6.png
deleted file mode 100644
index 8427b7b..0000000
--- a/src/gfx/cards/goldeen.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/goldeen.pal b/src/gfx/cards/goldeen.pal
deleted file mode 100644
index 5cab2b8..0000000
--- a/src/gfx/cards/goldeen.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/goldeen.png b/src/gfx/cards/goldeen.png
new file mode 100644
index 0000000..93bc336
--- /dev/null
+++ b/src/gfx/cards/goldeen.png
Binary files differ
diff --git a/src/gfx/cards/golduck.8x6.png b/src/gfx/cards/golduck.8x6.png
deleted file mode 100644
index cdbdf51..0000000
--- a/src/gfx/cards/golduck.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/golduck.pal b/src/gfx/cards/golduck.pal
deleted file mode 100644
index 45e3791..0000000
--- a/src/gfx/cards/golduck.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/golduck.png b/src/gfx/cards/golduck.png
new file mode 100644
index 0000000..ab6e83f
--- /dev/null
+++ b/src/gfx/cards/golduck.png
Binary files differ
diff --git a/src/gfx/cards/golem.8x6.png b/src/gfx/cards/golem.8x6.png
deleted file mode 100644
index e64b911..0000000
--- a/src/gfx/cards/golem.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/golem.pal b/src/gfx/cards/golem.pal
deleted file mode 100644
index c0ec481..0000000
--- a/src/gfx/cards/golem.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/golem.png b/src/gfx/cards/golem.png
new file mode 100644
index 0000000..cffba36
--- /dev/null
+++ b/src/gfx/cards/golem.png
Binary files differ
diff --git a/src/gfx/cards/grassenergy.8x6.png b/src/gfx/cards/grassenergy.8x6.png
deleted file mode 100644
index 2046bcb..0000000
--- a/src/gfx/cards/grassenergy.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/grassenergy.pal b/src/gfx/cards/grassenergy.pal
deleted file mode 100644
index e4d0aaa..0000000
--- a/src/gfx/cards/grassenergy.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/grassenergy.png b/src/gfx/cards/grassenergy.png
new file mode 100644
index 0000000..e76556f
--- /dev/null
+++ b/src/gfx/cards/grassenergy.png
Binary files differ
diff --git a/src/gfx/cards/graveler.8x6.png b/src/gfx/cards/graveler.8x6.png
deleted file mode 100644
index 13a8892..0000000
--- a/src/gfx/cards/graveler.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/graveler.pal b/src/gfx/cards/graveler.pal
deleted file mode 100644
index 50d56dc..0000000
--- a/src/gfx/cards/graveler.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/graveler.png b/src/gfx/cards/graveler.png
new file mode 100644
index 0000000..0d83998
--- /dev/null
+++ b/src/gfx/cards/graveler.png
Binary files differ
diff --git a/src/gfx/cards/grimer.8x6.png b/src/gfx/cards/grimer.8x6.png
deleted file mode 100644
index 19a6737..0000000
--- a/src/gfx/cards/grimer.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/grimer.pal b/src/gfx/cards/grimer.pal
deleted file mode 100644
index 7a5c4d1..0000000
--- a/src/gfx/cards/grimer.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/grimer.png b/src/gfx/cards/grimer.png
new file mode 100644
index 0000000..19d3cbb
--- /dev/null
+++ b/src/gfx/cards/grimer.png
Binary files differ
diff --git a/src/gfx/cards/growlithe.8x6.png b/src/gfx/cards/growlithe.8x6.png
deleted file mode 100644
index 76ce33c..0000000
--- a/src/gfx/cards/growlithe.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/growlithe.pal b/src/gfx/cards/growlithe.pal
deleted file mode 100644
index 6d8c3d2..0000000
--- a/src/gfx/cards/growlithe.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/growlithe.png b/src/gfx/cards/growlithe.png
new file mode 100644
index 0000000..293020a
--- /dev/null
+++ b/src/gfx/cards/growlithe.png
Binary files differ
diff --git a/src/gfx/cards/gustofwind.8x6.png b/src/gfx/cards/gustofwind.8x6.png
deleted file mode 100644
index 70de29d..0000000
--- a/src/gfx/cards/gustofwind.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/gustofwind.pal b/src/gfx/cards/gustofwind.pal
deleted file mode 100644
index 343e078..0000000
--- a/src/gfx/cards/gustofwind.pal
+++ /dev/null
@@ -1 +0,0 @@
-_k!@ \ No newline at end of file
diff --git a/src/gfx/cards/gustofwind.png b/src/gfx/cards/gustofwind.png
new file mode 100644
index 0000000..4d6e073
--- /dev/null
+++ b/src/gfx/cards/gustofwind.png
Binary files differ
diff --git a/src/gfx/cards/gyarados.8x6.png b/src/gfx/cards/gyarados.8x6.png
deleted file mode 100644
index 20c5dac..0000000
--- a/src/gfx/cards/gyarados.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/gyarados.pal b/src/gfx/cards/gyarados.pal
deleted file mode 100644
index dd1984c..0000000
--- a/src/gfx/cards/gyarados.pal
+++ /dev/null
@@ -1 +0,0 @@
-kHA \ No newline at end of file
diff --git a/src/gfx/cards/gyarados.png b/src/gfx/cards/gyarados.png
new file mode 100644
index 0000000..7f5b645
--- /dev/null
+++ b/src/gfx/cards/gyarados.png
Binary files differ
diff --git a/src/gfx/cards/haunter1.8x6.png b/src/gfx/cards/haunter1.8x6.png
deleted file mode 100644
index 1dc1869..0000000
--- a/src/gfx/cards/haunter1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/haunter1.pal b/src/gfx/cards/haunter1.pal
deleted file mode 100644
index f3af7c0..0000000
--- a/src/gfx/cards/haunter1.pal
+++ /dev/null
@@ -1 +0,0 @@
-_U \ No newline at end of file
diff --git a/src/gfx/cards/haunter1.png b/src/gfx/cards/haunter1.png
new file mode 100644
index 0000000..afef947
--- /dev/null
+++ b/src/gfx/cards/haunter1.png
Binary files differ
diff --git a/src/gfx/cards/haunter2.8x6.png b/src/gfx/cards/haunter2.8x6.png
deleted file mode 100644
index ffb76a2..0000000
--- a/src/gfx/cards/haunter2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/haunter2.pal b/src/gfx/cards/haunter2.pal
deleted file mode 100644
index 09ac25b..0000000
--- a/src/gfx/cards/haunter2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/haunter2.png b/src/gfx/cards/haunter2.png
new file mode 100644
index 0000000..cb68e59
--- /dev/null
+++ b/src/gfx/cards/haunter2.png
Binary files differ
diff --git a/src/gfx/cards/hitmonchan.8x6.png b/src/gfx/cards/hitmonchan.8x6.png
deleted file mode 100644
index e9869ac..0000000
--- a/src/gfx/cards/hitmonchan.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/hitmonchan.pal b/src/gfx/cards/hitmonchan.pal
deleted file mode 100644
index 60ce3d0..0000000
--- a/src/gfx/cards/hitmonchan.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/hitmonchan.png b/src/gfx/cards/hitmonchan.png
new file mode 100644
index 0000000..2828e3f
--- /dev/null
+++ b/src/gfx/cards/hitmonchan.png
Binary files differ
diff --git a/src/gfx/cards/hitmonlee.8x6.png b/src/gfx/cards/hitmonlee.8x6.png
deleted file mode 100644
index e67fe78..0000000
--- a/src/gfx/cards/hitmonlee.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/hitmonlee.pal b/src/gfx/cards/hitmonlee.pal
deleted file mode 100644
index 857d807..0000000
--- a/src/gfx/cards/hitmonlee.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/hitmonlee.png b/src/gfx/cards/hitmonlee.png
new file mode 100644
index 0000000..6a40b93
--- /dev/null
+++ b/src/gfx/cards/hitmonlee.png
Binary files differ
diff --git a/src/gfx/cards/horsea.8x6.png b/src/gfx/cards/horsea.8x6.png
deleted file mode 100644
index 19a95d8..0000000
--- a/src/gfx/cards/horsea.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/horsea.pal b/src/gfx/cards/horsea.pal
deleted file mode 100644
index 3dbe59a..0000000
--- a/src/gfx/cards/horsea.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/horsea.png b/src/gfx/cards/horsea.png
new file mode 100644
index 0000000..43116fe
--- /dev/null
+++ b/src/gfx/cards/horsea.png
Binary files differ
diff --git a/src/gfx/cards/hypno.8x6.png b/src/gfx/cards/hypno.8x6.png
deleted file mode 100644
index e58a6c2..0000000
--- a/src/gfx/cards/hypno.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/hypno.pal b/src/gfx/cards/hypno.pal
deleted file mode 100644
index c6f4cdd..0000000
--- a/src/gfx/cards/hypno.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/hypno.png b/src/gfx/cards/hypno.png
new file mode 100644
index 0000000..22b1dfa
--- /dev/null
+++ b/src/gfx/cards/hypno.png
Binary files differ
diff --git a/src/gfx/cards/imakuni.8x6.png b/src/gfx/cards/imakuni.8x6.png
deleted file mode 100644
index ff95e64..0000000
--- a/src/gfx/cards/imakuni.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/imakuni.pal b/src/gfx/cards/imakuni.pal
deleted file mode 100644
index f9c9e88..0000000
--- a/src/gfx/cards/imakuni.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/imakuni.png b/src/gfx/cards/imakuni.png
new file mode 100644
index 0000000..ce74375
--- /dev/null
+++ b/src/gfx/cards/imakuni.png
Binary files differ
diff --git a/src/gfx/cards/imposterprofessoroak.8x6.png b/src/gfx/cards/imposterprofessoroak.8x6.png
deleted file mode 100644
index 2f78301..0000000
--- a/src/gfx/cards/imposterprofessoroak.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/imposterprofessoroak.pal b/src/gfx/cards/imposterprofessoroak.pal
deleted file mode 100644
index 4fdad0f..0000000
--- a/src/gfx/cards/imposterprofessoroak.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/imposterprofessoroak.png b/src/gfx/cards/imposterprofessoroak.png
new file mode 100644
index 0000000..88bfb1c
--- /dev/null
+++ b/src/gfx/cards/imposterprofessoroak.png
Binary files differ
diff --git a/src/gfx/cards/itemfinder.8x6.png b/src/gfx/cards/itemfinder.8x6.png
deleted file mode 100644
index 3ba1499..0000000
--- a/src/gfx/cards/itemfinder.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/itemfinder.pal b/src/gfx/cards/itemfinder.pal
deleted file mode 100644
index 763c960..0000000
--- a/src/gfx/cards/itemfinder.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/itemfinder.png b/src/gfx/cards/itemfinder.png
new file mode 100644
index 0000000..48bee2e
--- /dev/null
+++ b/src/gfx/cards/itemfinder.png
Binary files differ
diff --git a/src/gfx/cards/ivysaur.8x6.png b/src/gfx/cards/ivysaur.8x6.png
deleted file mode 100644
index 4220b52..0000000
--- a/src/gfx/cards/ivysaur.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ivysaur.pal b/src/gfx/cards/ivysaur.pal
deleted file mode 100644
index 4bf4f92..0000000
--- a/src/gfx/cards/ivysaur.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ivysaur.png b/src/gfx/cards/ivysaur.png
new file mode 100644
index 0000000..64d7d4f
--- /dev/null
+++ b/src/gfx/cards/ivysaur.png
Binary files differ
diff --git a/src/gfx/cards/jigglypuff1.8x6.png b/src/gfx/cards/jigglypuff1.8x6.png
deleted file mode 100644
index 0986137..0000000
--- a/src/gfx/cards/jigglypuff1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/jigglypuff1.pal b/src/gfx/cards/jigglypuff1.pal
deleted file mode 100644
index 6a8a81a..0000000
--- a/src/gfx/cards/jigglypuff1.pal
+++ /dev/null
@@ -1 +0,0 @@
-i2 \ No newline at end of file
diff --git a/src/gfx/cards/jigglypuff1.png b/src/gfx/cards/jigglypuff1.png
new file mode 100644
index 0000000..4c1ae0a
--- /dev/null
+++ b/src/gfx/cards/jigglypuff1.png
Binary files differ
diff --git a/src/gfx/cards/jigglypuff2.8x6.png b/src/gfx/cards/jigglypuff2.8x6.png
deleted file mode 100644
index 8fb626e..0000000
--- a/src/gfx/cards/jigglypuff2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/jigglypuff2.pal b/src/gfx/cards/jigglypuff2.pal
deleted file mode 100644
index 147ab62..0000000
--- a/src/gfx/cards/jigglypuff2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/jigglypuff2.png b/src/gfx/cards/jigglypuff2.png
new file mode 100644
index 0000000..a94cba9
--- /dev/null
+++ b/src/gfx/cards/jigglypuff2.png
Binary files differ
diff --git a/src/gfx/cards/jigglypuff3.8x6.png b/src/gfx/cards/jigglypuff3.8x6.png
deleted file mode 100644
index b67b5ba..0000000
--- a/src/gfx/cards/jigglypuff3.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/jigglypuff3.pal b/src/gfx/cards/jigglypuff3.pal
deleted file mode 100644
index f7ef5d5..0000000
--- a/src/gfx/cards/jigglypuff3.pal
+++ /dev/null
@@ -1 +0,0 @@
-0D# \ No newline at end of file
diff --git a/src/gfx/cards/jigglypuff3.png b/src/gfx/cards/jigglypuff3.png
new file mode 100644
index 0000000..a7e8e54
--- /dev/null
+++ b/src/gfx/cards/jigglypuff3.png
Binary files differ
diff --git a/src/gfx/cards/jolteon1.8x6.png b/src/gfx/cards/jolteon1.8x6.png
deleted file mode 100644
index 81d403b..0000000
--- a/src/gfx/cards/jolteon1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/jolteon1.pal b/src/gfx/cards/jolteon1.pal
deleted file mode 100644
index d88630e..0000000
--- a/src/gfx/cards/jolteon1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/jolteon1.png b/src/gfx/cards/jolteon1.png
new file mode 100644
index 0000000..2af9377
--- /dev/null
+++ b/src/gfx/cards/jolteon1.png
Binary files differ
diff --git a/src/gfx/cards/jolteon2.8x6.png b/src/gfx/cards/jolteon2.8x6.png
deleted file mode 100644
index 308966c..0000000
--- a/src/gfx/cards/jolteon2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/jolteon2.pal b/src/gfx/cards/jolteon2.pal
deleted file mode 100644
index 2b1bea1..0000000
--- a/src/gfx/cards/jolteon2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/jolteon2.png b/src/gfx/cards/jolteon2.png
new file mode 100644
index 0000000..5a40770
--- /dev/null
+++ b/src/gfx/cards/jolteon2.png
Binary files differ
diff --git a/src/gfx/cards/jynx.8x6.png b/src/gfx/cards/jynx.8x6.png
deleted file mode 100644
index 048ae21..0000000
--- a/src/gfx/cards/jynx.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/jynx.pal b/src/gfx/cards/jynx.pal
deleted file mode 100644
index 4992e3c..0000000
--- a/src/gfx/cards/jynx.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/jynx.png b/src/gfx/cards/jynx.png
new file mode 100644
index 0000000..93a71f0
--- /dev/null
+++ b/src/gfx/cards/jynx.png
Binary files differ
diff --git a/src/gfx/cards/kabuto.8x6.png b/src/gfx/cards/kabuto.8x6.png
deleted file mode 100644
index 3ebcaf7..0000000
--- a/src/gfx/cards/kabuto.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kabuto.pal b/src/gfx/cards/kabuto.pal
deleted file mode 100644
index f26725b..0000000
--- a/src/gfx/cards/kabuto.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kabuto.png b/src/gfx/cards/kabuto.png
new file mode 100644
index 0000000..86ed76b
--- /dev/null
+++ b/src/gfx/cards/kabuto.png
Binary files differ
diff --git a/src/gfx/cards/kabutops.8x6.png b/src/gfx/cards/kabutops.8x6.png
deleted file mode 100644
index 4efff6b..0000000
--- a/src/gfx/cards/kabutops.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kabutops.pal b/src/gfx/cards/kabutops.pal
deleted file mode 100644
index 44fd608..0000000
--- a/src/gfx/cards/kabutops.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kabutops.png b/src/gfx/cards/kabutops.png
new file mode 100644
index 0000000..e16d426
--- /dev/null
+++ b/src/gfx/cards/kabutops.png
Binary files differ
diff --git a/src/gfx/cards/kadabra.8x6.png b/src/gfx/cards/kadabra.8x6.png
deleted file mode 100644
index fe66443..0000000
--- a/src/gfx/cards/kadabra.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kadabra.pal b/src/gfx/cards/kadabra.pal
deleted file mode 100644
index 6b874e3..0000000
--- a/src/gfx/cards/kadabra.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kadabra.png b/src/gfx/cards/kadabra.png
new file mode 100644
index 0000000..350ab8a
--- /dev/null
+++ b/src/gfx/cards/kadabra.png
Binary files differ
diff --git a/src/gfx/cards/kakuna.8x6.png b/src/gfx/cards/kakuna.8x6.png
deleted file mode 100644
index 9739a1b..0000000
--- a/src/gfx/cards/kakuna.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kakuna.pal b/src/gfx/cards/kakuna.pal
deleted file mode 100644
index 743ac9f..0000000
--- a/src/gfx/cards/kakuna.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kakuna.png b/src/gfx/cards/kakuna.png
new file mode 100644
index 0000000..e185ef6
--- /dev/null
+++ b/src/gfx/cards/kakuna.png
Binary files differ
diff --git a/src/gfx/cards/kangaskhan.8x6.png b/src/gfx/cards/kangaskhan.8x6.png
deleted file mode 100644
index 192fba2..0000000
--- a/src/gfx/cards/kangaskhan.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kangaskhan.pal b/src/gfx/cards/kangaskhan.pal
deleted file mode 100644
index 8a1f94c..0000000
--- a/src/gfx/cards/kangaskhan.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kangaskhan.png b/src/gfx/cards/kangaskhan.png
new file mode 100644
index 0000000..c14b97e
--- /dev/null
+++ b/src/gfx/cards/kangaskhan.png
Binary files differ
diff --git a/src/gfx/cards/kingler.8x6.png b/src/gfx/cards/kingler.8x6.png
deleted file mode 100644
index 19966d9..0000000
--- a/src/gfx/cards/kingler.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kingler.pal b/src/gfx/cards/kingler.pal
deleted file mode 100644
index 3b01628..0000000
--- a/src/gfx/cards/kingler.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/kingler.png b/src/gfx/cards/kingler.png
new file mode 100644
index 0000000..a90a4f9
--- /dev/null
+++ b/src/gfx/cards/kingler.png
Binary files differ
diff --git a/src/gfx/cards/koffing.8x6.png b/src/gfx/cards/koffing.8x6.png
deleted file mode 100644
index cda1a9d..0000000
--- a/src/gfx/cards/koffing.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/koffing.pal b/src/gfx/cards/koffing.pal
deleted file mode 100644
index e2f1b01..0000000
--- a/src/gfx/cards/koffing.pal
+++ /dev/null
@@ -1 +0,0 @@
-3U@ \ No newline at end of file
diff --git a/src/gfx/cards/koffing.png b/src/gfx/cards/koffing.png
new file mode 100644
index 0000000..eac4d34
--- /dev/null
+++ b/src/gfx/cards/koffing.png
Binary files differ
diff --git a/src/gfx/cards/krabby.8x6.png b/src/gfx/cards/krabby.8x6.png
deleted file mode 100644
index 5dda9a9..0000000
--- a/src/gfx/cards/krabby.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/krabby.pal b/src/gfx/cards/krabby.pal
deleted file mode 100644
index b521b6e..0000000
--- a/src/gfx/cards/krabby.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/krabby.png b/src/gfx/cards/krabby.png
new file mode 100644
index 0000000..a669a26
--- /dev/null
+++ b/src/gfx/cards/krabby.png
Binary files differ
diff --git a/src/gfx/cards/lapras.8x6.png b/src/gfx/cards/lapras.8x6.png
deleted file mode 100644
index 2212622..0000000
--- a/src/gfx/cards/lapras.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/lapras.pal b/src/gfx/cards/lapras.pal
deleted file mode 100644
index 096c79d..0000000
--- a/src/gfx/cards/lapras.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/lapras.png b/src/gfx/cards/lapras.png
new file mode 100644
index 0000000..7388e8c
--- /dev/null
+++ b/src/gfx/cards/lapras.png
Binary files differ
diff --git a/src/gfx/cards/lass.8x6.png b/src/gfx/cards/lass.8x6.png
deleted file mode 100644
index aad9f17..0000000
--- a/src/gfx/cards/lass.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/lass.pal b/src/gfx/cards/lass.pal
deleted file mode 100644
index fdbadf4..0000000
--- a/src/gfx/cards/lass.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/lass.png b/src/gfx/cards/lass.png
new file mode 100644
index 0000000..1c33c6f
--- /dev/null
+++ b/src/gfx/cards/lass.png
Binary files differ
diff --git a/src/gfx/cards/lickitung.8x6.png b/src/gfx/cards/lickitung.8x6.png
deleted file mode 100644
index 857e21a..0000000
--- a/src/gfx/cards/lickitung.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/lickitung.pal b/src/gfx/cards/lickitung.pal
deleted file mode 100644
index 8f9a149..0000000
--- a/src/gfx/cards/lickitung.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/lickitung.png b/src/gfx/cards/lickitung.png
new file mode 100644
index 0000000..0abc593
--- /dev/null
+++ b/src/gfx/cards/lickitung.png
Binary files differ
diff --git a/src/gfx/cards/lightningenergy.8x6.png b/src/gfx/cards/lightningenergy.8x6.png
deleted file mode 100644
index 3fdc83c..0000000
--- a/src/gfx/cards/lightningenergy.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/lightningenergy.pal b/src/gfx/cards/lightningenergy.pal
deleted file mode 100644
index fc96784..0000000
--- a/src/gfx/cards/lightningenergy.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/lightningenergy.png b/src/gfx/cards/lightningenergy.png
new file mode 100644
index 0000000..d4b627b
--- /dev/null
+++ b/src/gfx/cards/lightningenergy.png
Binary files differ
diff --git a/src/gfx/cards/machamp.8x6.png b/src/gfx/cards/machamp.8x6.png
deleted file mode 100644
index 55f52fb..0000000
--- a/src/gfx/cards/machamp.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/machamp.pal b/src/gfx/cards/machamp.pal
deleted file mode 100644
index a138a9a..0000000
--- a/src/gfx/cards/machamp.pal
+++ /dev/null
@@ -1 +0,0 @@
-VU \ No newline at end of file
diff --git a/src/gfx/cards/machamp.png b/src/gfx/cards/machamp.png
new file mode 100644
index 0000000..3f21a3b
--- /dev/null
+++ b/src/gfx/cards/machamp.png
Binary files differ
diff --git a/src/gfx/cards/machoke.8x6.png b/src/gfx/cards/machoke.8x6.png
deleted file mode 100644
index 943d13a..0000000
--- a/src/gfx/cards/machoke.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/machoke.pal b/src/gfx/cards/machoke.pal
deleted file mode 100644
index 948967d..0000000
--- a/src/gfx/cards/machoke.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/machoke.png b/src/gfx/cards/machoke.png
new file mode 100644
index 0000000..fe76d14
--- /dev/null
+++ b/src/gfx/cards/machoke.png
Binary files differ
diff --git a/src/gfx/cards/machop.8x6.png b/src/gfx/cards/machop.8x6.png
deleted file mode 100644
index 256a710..0000000
--- a/src/gfx/cards/machop.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/machop.pal b/src/gfx/cards/machop.pal
deleted file mode 100644
index 060094b..0000000
--- a/src/gfx/cards/machop.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/machop.png b/src/gfx/cards/machop.png
new file mode 100644
index 0000000..ab9d40c
--- /dev/null
+++ b/src/gfx/cards/machop.png
Binary files differ
diff --git a/src/gfx/cards/magikarp.8x6.png b/src/gfx/cards/magikarp.8x6.png
deleted file mode 100644
index 0f40b78..0000000
--- a/src/gfx/cards/magikarp.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magikarp.pal b/src/gfx/cards/magikarp.pal
deleted file mode 100644
index 252df21..0000000
--- a/src/gfx/cards/magikarp.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magikarp.png b/src/gfx/cards/magikarp.png
new file mode 100644
index 0000000..41d79af
--- /dev/null
+++ b/src/gfx/cards/magikarp.png
Binary files differ
diff --git a/src/gfx/cards/magmar1.8x6.png b/src/gfx/cards/magmar1.8x6.png
deleted file mode 100644
index 571bdc6..0000000
--- a/src/gfx/cards/magmar1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magmar1.pal b/src/gfx/cards/magmar1.pal
deleted file mode 100644
index f201dfb..0000000
--- a/src/gfx/cards/magmar1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magmar1.png b/src/gfx/cards/magmar1.png
new file mode 100644
index 0000000..b24106b
--- /dev/null
+++ b/src/gfx/cards/magmar1.png
Binary files differ
diff --git a/src/gfx/cards/magmar2.8x6.png b/src/gfx/cards/magmar2.8x6.png
deleted file mode 100644
index 64cd043..0000000
--- a/src/gfx/cards/magmar2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magmar2.pal b/src/gfx/cards/magmar2.pal
deleted file mode 100644
index 00ddb8f..0000000
--- a/src/gfx/cards/magmar2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magmar2.png b/src/gfx/cards/magmar2.png
new file mode 100644
index 0000000..7722142
--- /dev/null
+++ b/src/gfx/cards/magmar2.png
Binary files differ
diff --git a/src/gfx/cards/magnemite1.8x6.png b/src/gfx/cards/magnemite1.8x6.png
deleted file mode 100644
index d81dfb3..0000000
--- a/src/gfx/cards/magnemite1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magnemite1.pal b/src/gfx/cards/magnemite1.pal
deleted file mode 100644
index 632ec88..0000000
--- a/src/gfx/cards/magnemite1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magnemite1.png b/src/gfx/cards/magnemite1.png
new file mode 100644
index 0000000..ff85f09
--- /dev/null
+++ b/src/gfx/cards/magnemite1.png
Binary files differ
diff --git a/src/gfx/cards/magnemite2.8x6.png b/src/gfx/cards/magnemite2.8x6.png
deleted file mode 100644
index 8cb3f4d..0000000
--- a/src/gfx/cards/magnemite2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magnemite2.pal b/src/gfx/cards/magnemite2.pal
deleted file mode 100644
index 8b36fae..0000000
--- a/src/gfx/cards/magnemite2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magnemite2.png b/src/gfx/cards/magnemite2.png
new file mode 100644
index 0000000..c1b84e6
--- /dev/null
+++ b/src/gfx/cards/magnemite2.png
Binary files differ
diff --git a/src/gfx/cards/magneton1.8x6.png b/src/gfx/cards/magneton1.8x6.png
deleted file mode 100644
index efcc9f9..0000000
--- a/src/gfx/cards/magneton1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magneton1.pal b/src/gfx/cards/magneton1.pal
deleted file mode 100644
index 632ec88..0000000
--- a/src/gfx/cards/magneton1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magneton1.png b/src/gfx/cards/magneton1.png
new file mode 100644
index 0000000..d555492
--- /dev/null
+++ b/src/gfx/cards/magneton1.png
Binary files differ
diff --git a/src/gfx/cards/magneton2.8x6.png b/src/gfx/cards/magneton2.8x6.png
deleted file mode 100644
index e20b2f4..0000000
--- a/src/gfx/cards/magneton2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/magneton2.pal b/src/gfx/cards/magneton2.pal
deleted file mode 100644
index 5b13617..0000000
--- a/src/gfx/cards/magneton2.pal
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/src/gfx/cards/magneton2.png b/src/gfx/cards/magneton2.png
new file mode 100644
index 0000000..77eebd7
--- /dev/null
+++ b/src/gfx/cards/magneton2.png
Binary files differ
diff --git a/src/gfx/cards/maintenance.8x6.png b/src/gfx/cards/maintenance.8x6.png
deleted file mode 100644
index 915487a..0000000
--- a/src/gfx/cards/maintenance.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/maintenance.pal b/src/gfx/cards/maintenance.pal
deleted file mode 100644
index fb3554f..0000000
--- a/src/gfx/cards/maintenance.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/maintenance.png b/src/gfx/cards/maintenance.png
new file mode 100644
index 0000000..dba26b4
--- /dev/null
+++ b/src/gfx/cards/maintenance.png
Binary files differ
diff --git a/src/gfx/cards/mankey.8x6.png b/src/gfx/cards/mankey.8x6.png
deleted file mode 100644
index 06b4ab3..0000000
--- a/src/gfx/cards/mankey.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mankey.pal b/src/gfx/cards/mankey.pal
deleted file mode 100644
index f63660e..0000000
--- a/src/gfx/cards/mankey.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mankey.png b/src/gfx/cards/mankey.png
new file mode 100644
index 0000000..74af8e1
--- /dev/null
+++ b/src/gfx/cards/mankey.png
Binary files differ
diff --git a/src/gfx/cards/marowak1.8x6.png b/src/gfx/cards/marowak1.8x6.png
deleted file mode 100644
index 10d6eca..0000000
--- a/src/gfx/cards/marowak1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/marowak1.pal b/src/gfx/cards/marowak1.pal
deleted file mode 100644
index 021cbd4..0000000
--- a/src/gfx/cards/marowak1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/marowak1.png b/src/gfx/cards/marowak1.png
new file mode 100644
index 0000000..7926178
--- /dev/null
+++ b/src/gfx/cards/marowak1.png
Binary files differ
diff --git a/src/gfx/cards/marowak2.8x6.png b/src/gfx/cards/marowak2.8x6.png
deleted file mode 100644
index a7023bc..0000000
--- a/src/gfx/cards/marowak2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/marowak2.pal b/src/gfx/cards/marowak2.pal
deleted file mode 100644
index 05e97c9..0000000
--- a/src/gfx/cards/marowak2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/marowak2.png b/src/gfx/cards/marowak2.png
new file mode 100644
index 0000000..ec924b6
--- /dev/null
+++ b/src/gfx/cards/marowak2.png
Binary files differ
diff --git a/src/gfx/cards/meowth1.8x6.png b/src/gfx/cards/meowth1.8x6.png
deleted file mode 100644
index 3225611..0000000
--- a/src/gfx/cards/meowth1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/meowth1.pal b/src/gfx/cards/meowth1.pal
deleted file mode 100644
index 1505390..0000000
--- a/src/gfx/cards/meowth1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/meowth1.png b/src/gfx/cards/meowth1.png
new file mode 100644
index 0000000..80f502e
--- /dev/null
+++ b/src/gfx/cards/meowth1.png
Binary files differ
diff --git a/src/gfx/cards/meowth2.8x6.png b/src/gfx/cards/meowth2.8x6.png
deleted file mode 100644
index 6dd0c10..0000000
--- a/src/gfx/cards/meowth2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/meowth2.pal b/src/gfx/cards/meowth2.pal
deleted file mode 100644
index ae55a01..0000000
--- a/src/gfx/cards/meowth2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/meowth2.png b/src/gfx/cards/meowth2.png
new file mode 100644
index 0000000..264ce17
--- /dev/null
+++ b/src/gfx/cards/meowth2.png
Binary files differ
diff --git a/src/gfx/cards/metapod.8x6.png b/src/gfx/cards/metapod.8x6.png
deleted file mode 100644
index 3c1df91..0000000
--- a/src/gfx/cards/metapod.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/metapod.pal b/src/gfx/cards/metapod.pal
deleted file mode 100644
index 51a1848..0000000
--- a/src/gfx/cards/metapod.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/metapod.png b/src/gfx/cards/metapod.png
new file mode 100644
index 0000000..3ab895a
--- /dev/null
+++ b/src/gfx/cards/metapod.png
Binary files differ
diff --git a/src/gfx/cards/mew1.8x6.png b/src/gfx/cards/mew1.8x6.png
deleted file mode 100644
index aa5e5d5..0000000
--- a/src/gfx/cards/mew1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mew1.pal b/src/gfx/cards/mew1.pal
deleted file mode 100644
index 7fc106d..0000000
--- a/src/gfx/cards/mew1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mew1.png b/src/gfx/cards/mew1.png
new file mode 100644
index 0000000..983848f
--- /dev/null
+++ b/src/gfx/cards/mew1.png
Binary files differ
diff --git a/src/gfx/cards/mew2.8x6.png b/src/gfx/cards/mew2.8x6.png
deleted file mode 100644
index 8658006..0000000
--- a/src/gfx/cards/mew2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mew2.pal b/src/gfx/cards/mew2.pal
deleted file mode 100644
index 81ae1e6..0000000
--- a/src/gfx/cards/mew2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mew2.png b/src/gfx/cards/mew2.png
new file mode 100644
index 0000000..a2106fb
--- /dev/null
+++ b/src/gfx/cards/mew2.png
Binary files differ
diff --git a/src/gfx/cards/mew3.8x6.png b/src/gfx/cards/mew3.8x6.png
deleted file mode 100644
index 189a97b..0000000
--- a/src/gfx/cards/mew3.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mew3.pal b/src/gfx/cards/mew3.pal
deleted file mode 100644
index e2c6160..0000000
--- a/src/gfx/cards/mew3.pal
+++ /dev/null
@@ -1 +0,0 @@
-UB \ No newline at end of file
diff --git a/src/gfx/cards/mew3.png b/src/gfx/cards/mew3.png
new file mode 100644
index 0000000..476c1bc
--- /dev/null
+++ b/src/gfx/cards/mew3.png
Binary files differ
diff --git a/src/gfx/cards/mewtwo1.8x6.png b/src/gfx/cards/mewtwo1.8x6.png
deleted file mode 100644
index b5566c5..0000000
--- a/src/gfx/cards/mewtwo1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mewtwo1.pal b/src/gfx/cards/mewtwo1.pal
deleted file mode 100644
index 5ae9d52..0000000
--- a/src/gfx/cards/mewtwo1.pal
+++ /dev/null
@@ -1 +0,0 @@
-jh \ No newline at end of file
diff --git a/src/gfx/cards/mewtwo1.png b/src/gfx/cards/mewtwo1.png
new file mode 100644
index 0000000..0200721
--- /dev/null
+++ b/src/gfx/cards/mewtwo1.png
Binary files differ
diff --git a/src/gfx/cards/mewtwo2.8x6.png b/src/gfx/cards/mewtwo2.8x6.png
deleted file mode 100644
index 9f36308..0000000
--- a/src/gfx/cards/mewtwo2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mewtwo2.pal b/src/gfx/cards/mewtwo2.pal
deleted file mode 100644
index bde36b5..0000000
--- a/src/gfx/cards/mewtwo2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mewtwo2.png b/src/gfx/cards/mewtwo2.png
new file mode 100644
index 0000000..9ffefad
--- /dev/null
+++ b/src/gfx/cards/mewtwo2.png
Binary files differ
diff --git a/src/gfx/cards/mewtwo3.8x6.png b/src/gfx/cards/mewtwo3.8x6.png
deleted file mode 100644
index bbe8c6e..0000000
--- a/src/gfx/cards/mewtwo3.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mewtwo3.pal b/src/gfx/cards/mewtwo3.pal
deleted file mode 100644
index d643585..0000000
--- a/src/gfx/cards/mewtwo3.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mewtwo3.png b/src/gfx/cards/mewtwo3.png
new file mode 100644
index 0000000..18abd5c
--- /dev/null
+++ b/src/gfx/cards/mewtwo3.png
Binary files differ
diff --git a/src/gfx/cards/moltres1.8x6.png b/src/gfx/cards/moltres1.8x6.png
deleted file mode 100644
index cc867ea..0000000
--- a/src/gfx/cards/moltres1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/moltres1.pal b/src/gfx/cards/moltres1.pal
deleted file mode 100644
index 481d6d0..0000000
--- a/src/gfx/cards/moltres1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/moltres1.png b/src/gfx/cards/moltres1.png
new file mode 100644
index 0000000..e12fe97
--- /dev/null
+++ b/src/gfx/cards/moltres1.png
Binary files differ
diff --git a/src/gfx/cards/moltres2.8x6.png b/src/gfx/cards/moltres2.8x6.png
deleted file mode 100644
index 220cbee..0000000
--- a/src/gfx/cards/moltres2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/moltres2.pal b/src/gfx/cards/moltres2.pal
deleted file mode 100644
index a60186f..0000000
--- a/src/gfx/cards/moltres2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/moltres2.png b/src/gfx/cards/moltres2.png
new file mode 100644
index 0000000..5071ef4
--- /dev/null
+++ b/src/gfx/cards/moltres2.png
Binary files differ
diff --git a/src/gfx/cards/mrfuji.8x6.png b/src/gfx/cards/mrfuji.8x6.png
deleted file mode 100644
index f012d07..0000000
--- a/src/gfx/cards/mrfuji.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mrfuji.pal b/src/gfx/cards/mrfuji.pal
deleted file mode 100644
index 7a0bbac..0000000
--- a/src/gfx/cards/mrfuji.pal
+++ /dev/null
@@ -1 +0,0 @@
-_W"  \ No newline at end of file
diff --git a/src/gfx/cards/mrfuji.png b/src/gfx/cards/mrfuji.png
new file mode 100644
index 0000000..d1b37ae
--- /dev/null
+++ b/src/gfx/cards/mrfuji.png
Binary files differ
diff --git a/src/gfx/cards/mrmime.8x6.png b/src/gfx/cards/mrmime.8x6.png
deleted file mode 100644
index 2c16ea4..0000000
--- a/src/gfx/cards/mrmime.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mrmime.pal b/src/gfx/cards/mrmime.pal
deleted file mode 100644
index 50495ae..0000000
--- a/src/gfx/cards/mrmime.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mrmime.png b/src/gfx/cards/mrmime.png
new file mode 100644
index 0000000..42605aa
--- /dev/null
+++ b/src/gfx/cards/mrmime.png
Binary files differ
diff --git a/src/gfx/cards/muk.8x6.png b/src/gfx/cards/muk.8x6.png
deleted file mode 100644
index 972d445..0000000
--- a/src/gfx/cards/muk.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/muk.pal b/src/gfx/cards/muk.pal
deleted file mode 100644
index ed9a7d9..0000000
--- a/src/gfx/cards/muk.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/muk.png b/src/gfx/cards/muk.png
new file mode 100644
index 0000000..51893c1
--- /dev/null
+++ b/src/gfx/cards/muk.png
Binary files differ
diff --git a/src/gfx/cards/mysteriousfossil.8x6.png b/src/gfx/cards/mysteriousfossil.8x6.png
deleted file mode 100644
index 93752fc..0000000
--- a/src/gfx/cards/mysteriousfossil.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mysteriousfossil.pal b/src/gfx/cards/mysteriousfossil.pal
deleted file mode 100644
index 0013d02..0000000
--- a/src/gfx/cards/mysteriousfossil.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/mysteriousfossil.png b/src/gfx/cards/mysteriousfossil.png
new file mode 100644
index 0000000..1226faa
--- /dev/null
+++ b/src/gfx/cards/mysteriousfossil.png
Binary files differ
diff --git a/src/gfx/cards/nidoking.8x6.png b/src/gfx/cards/nidoking.8x6.png
deleted file mode 100644
index eff3ccf..0000000
--- a/src/gfx/cards/nidoking.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/nidoking.pal b/src/gfx/cards/nidoking.pal
deleted file mode 100644
index a58a343..0000000
--- a/src/gfx/cards/nidoking.pal
+++ /dev/null
@@ -1 +0,0 @@
-i U \ No newline at end of file
diff --git a/src/gfx/cards/nidoking.png b/src/gfx/cards/nidoking.png
new file mode 100644
index 0000000..2e6f08a
--- /dev/null
+++ b/src/gfx/cards/nidoking.png
Binary files differ
diff --git a/src/gfx/cards/nidoqueen.8x6.png b/src/gfx/cards/nidoqueen.8x6.png
deleted file mode 100644
index 5c67daa..0000000
--- a/src/gfx/cards/nidoqueen.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/nidoqueen.pal b/src/gfx/cards/nidoqueen.pal
deleted file mode 100644
index fc2202a..0000000
--- a/src/gfx/cards/nidoqueen.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/nidoqueen.png b/src/gfx/cards/nidoqueen.png
new file mode 100644
index 0000000..383bbe7
--- /dev/null
+++ b/src/gfx/cards/nidoqueen.png
Binary files differ
diff --git a/src/gfx/cards/nidoranf.8x6.png b/src/gfx/cards/nidoranf.8x6.png
deleted file mode 100644
index 17de19e..0000000
--- a/src/gfx/cards/nidoranf.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/nidoranf.pal b/src/gfx/cards/nidoranf.pal
deleted file mode 100644
index e2209b7..0000000
--- a/src/gfx/cards/nidoranf.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/nidoranf.png b/src/gfx/cards/nidoranf.png
new file mode 100644
index 0000000..f859596
--- /dev/null
+++ b/src/gfx/cards/nidoranf.png
Binary files differ
diff --git a/src/gfx/cards/nidoranm.8x6.png b/src/gfx/cards/nidoranm.8x6.png
deleted file mode 100644
index 00718d9..0000000
--- a/src/gfx/cards/nidoranm.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/nidoranm.pal b/src/gfx/cards/nidoranm.pal
deleted file mode 100644
index b8f783c..0000000
--- a/src/gfx/cards/nidoranm.pal
+++ /dev/null
@@ -1 +0,0 @@
-_kU0 \ No newline at end of file
diff --git a/src/gfx/cards/nidoranm.png b/src/gfx/cards/nidoranm.png
new file mode 100644
index 0000000..bbb304b
--- /dev/null
+++ b/src/gfx/cards/nidoranm.png
Binary files differ
diff --git a/src/gfx/cards/nidorina.8x6.png b/src/gfx/cards/nidorina.8x6.png
deleted file mode 100644
index c879610..0000000
--- a/src/gfx/cards/nidorina.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/nidorina.pal b/src/gfx/cards/nidorina.pal
deleted file mode 100644
index cd74af4..0000000
--- a/src/gfx/cards/nidorina.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/nidorina.png b/src/gfx/cards/nidorina.png
new file mode 100644
index 0000000..939e887
--- /dev/null
+++ b/src/gfx/cards/nidorina.png
Binary files differ
diff --git a/src/gfx/cards/nidorino.8x6.png b/src/gfx/cards/nidorino.8x6.png
deleted file mode 100644
index 65f851c..0000000
--- a/src/gfx/cards/nidorino.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/nidorino.pal b/src/gfx/cards/nidorino.pal
deleted file mode 100644
index 8310b61..0000000
--- a/src/gfx/cards/nidorino.pal
+++ /dev/null
@@ -1 +0,0 @@
-_kVA \ No newline at end of file
diff --git a/src/gfx/cards/nidorino.png b/src/gfx/cards/nidorino.png
new file mode 100644
index 0000000..d9bc6ca
--- /dev/null
+++ b/src/gfx/cards/nidorino.png
Binary files differ
diff --git a/src/gfx/cards/ninetails1.8x6.png b/src/gfx/cards/ninetails1.8x6.png
deleted file mode 100644
index eba870d..0000000
--- a/src/gfx/cards/ninetails1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ninetails1.pal b/src/gfx/cards/ninetails1.pal
deleted file mode 100644
index 90d7857..0000000
--- a/src/gfx/cards/ninetails1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ninetails1.png b/src/gfx/cards/ninetails1.png
new file mode 100644
index 0000000..38ed8be
--- /dev/null
+++ b/src/gfx/cards/ninetails1.png
Binary files differ
diff --git a/src/gfx/cards/ninetails2.8x6.png b/src/gfx/cards/ninetails2.8x6.png
deleted file mode 100644
index 2003e52..0000000
--- a/src/gfx/cards/ninetails2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ninetails2.pal b/src/gfx/cards/ninetails2.pal
deleted file mode 100644
index 8341ea2..0000000
--- a/src/gfx/cards/ninetails2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ninetails2.png b/src/gfx/cards/ninetails2.png
new file mode 100644
index 0000000..43a165d
--- /dev/null
+++ b/src/gfx/cards/ninetails2.png
Binary files differ
diff --git a/src/gfx/cards/oddish.8x6.png b/src/gfx/cards/oddish.8x6.png
deleted file mode 100644
index b37f1c0..0000000
--- a/src/gfx/cards/oddish.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/oddish.pal b/src/gfx/cards/oddish.pal
deleted file mode 100644
index e798b00..0000000
--- a/src/gfx/cards/oddish.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/oddish.png b/src/gfx/cards/oddish.png
new file mode 100644
index 0000000..b5474e6
--- /dev/null
+++ b/src/gfx/cards/oddish.png
Binary files differ
diff --git a/src/gfx/cards/omanyte.8x6.png b/src/gfx/cards/omanyte.8x6.png
deleted file mode 100644
index b56b359..0000000
--- a/src/gfx/cards/omanyte.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/omanyte.pal b/src/gfx/cards/omanyte.pal
deleted file mode 100644
index cddccc7..0000000
--- a/src/gfx/cards/omanyte.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/omanyte.png b/src/gfx/cards/omanyte.png
new file mode 100644
index 0000000..f1ec65f
--- /dev/null
+++ b/src/gfx/cards/omanyte.png
Binary files differ
diff --git a/src/gfx/cards/omastar.8x6.png b/src/gfx/cards/omastar.8x6.png
deleted file mode 100644
index ba090fc..0000000
--- a/src/gfx/cards/omastar.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/omastar.pal b/src/gfx/cards/omastar.pal
deleted file mode 100644
index b9f69b3..0000000
--- a/src/gfx/cards/omastar.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/omastar.png b/src/gfx/cards/omastar.png
new file mode 100644
index 0000000..bce6c17
--- /dev/null
+++ b/src/gfx/cards/omastar.png
Binary files differ
diff --git a/src/gfx/cards/onix.8x6.png b/src/gfx/cards/onix.8x6.png
deleted file mode 100644
index 5d48c2c..0000000
--- a/src/gfx/cards/onix.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/onix.pal b/src/gfx/cards/onix.pal
deleted file mode 100644
index b8cc75e..0000000
--- a/src/gfx/cards/onix.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/onix.png b/src/gfx/cards/onix.png
new file mode 100644
index 0000000..44ef65e
--- /dev/null
+++ b/src/gfx/cards/onix.png
Binary files differ
diff --git a/src/gfx/cards/paras.8x6.png b/src/gfx/cards/paras.8x6.png
deleted file mode 100644
index 6054beb..0000000
--- a/src/gfx/cards/paras.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/paras.pal b/src/gfx/cards/paras.pal
deleted file mode 100644
index 2865103..0000000
--- a/src/gfx/cards/paras.pal
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/src/gfx/cards/paras.png b/src/gfx/cards/paras.png
new file mode 100644
index 0000000..61a5e98
--- /dev/null
+++ b/src/gfx/cards/paras.png
Binary files differ
diff --git a/src/gfx/cards/parasect.8x6.png b/src/gfx/cards/parasect.8x6.png
deleted file mode 100644
index 3c772f4..0000000
--- a/src/gfx/cards/parasect.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/parasect.pal b/src/gfx/cards/parasect.pal
deleted file mode 100644
index a6f1581..0000000
--- a/src/gfx/cards/parasect.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/parasect.png b/src/gfx/cards/parasect.png
new file mode 100644
index 0000000..d5bd538
--- /dev/null
+++ b/src/gfx/cards/parasect.png
Binary files differ
diff --git a/src/gfx/cards/persian.8x6.png b/src/gfx/cards/persian.8x6.png
deleted file mode 100644
index 0cdc9ee..0000000
--- a/src/gfx/cards/persian.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/persian.pal b/src/gfx/cards/persian.pal
deleted file mode 100644
index 17afb1f..0000000
--- a/src/gfx/cards/persian.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/persian.png b/src/gfx/cards/persian.png
new file mode 100644
index 0000000..59144bf
--- /dev/null
+++ b/src/gfx/cards/persian.png
Binary files differ
diff --git a/src/gfx/cards/pidgeot1.8x6.png b/src/gfx/cards/pidgeot1.8x6.png
deleted file mode 100644
index 4f3422a..0000000
--- a/src/gfx/cards/pidgeot1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pidgeot1.pal b/src/gfx/cards/pidgeot1.pal
deleted file mode 100644
index 0cb3532..0000000
--- a/src/gfx/cards/pidgeot1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pidgeot1.png b/src/gfx/cards/pidgeot1.png
new file mode 100644
index 0000000..e6498b4
--- /dev/null
+++ b/src/gfx/cards/pidgeot1.png
Binary files differ
diff --git a/src/gfx/cards/pidgeot2.8x6.png b/src/gfx/cards/pidgeot2.8x6.png
deleted file mode 100644
index ede4ad5..0000000
--- a/src/gfx/cards/pidgeot2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pidgeot2.pal b/src/gfx/cards/pidgeot2.pal
deleted file mode 100644
index b5f5ea0..0000000
--- a/src/gfx/cards/pidgeot2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pidgeot2.png b/src/gfx/cards/pidgeot2.png
new file mode 100644
index 0000000..8e5f742
--- /dev/null
+++ b/src/gfx/cards/pidgeot2.png
Binary files differ
diff --git a/src/gfx/cards/pidgeotto.8x6.png b/src/gfx/cards/pidgeotto.8x6.png
deleted file mode 100644
index ec7e03d..0000000
--- a/src/gfx/cards/pidgeotto.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pidgeotto.pal b/src/gfx/cards/pidgeotto.pal
deleted file mode 100644
index 14413aa..0000000
--- a/src/gfx/cards/pidgeotto.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pidgeotto.png b/src/gfx/cards/pidgeotto.png
new file mode 100644
index 0000000..f52c342
--- /dev/null
+++ b/src/gfx/cards/pidgeotto.png
Binary files differ
diff --git a/src/gfx/cards/pidgey.8x6.png b/src/gfx/cards/pidgey.8x6.png
deleted file mode 100644
index 5fc97a5..0000000
--- a/src/gfx/cards/pidgey.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pidgey.pal b/src/gfx/cards/pidgey.pal
deleted file mode 100644
index 52c807a..0000000
--- a/src/gfx/cards/pidgey.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pidgey.png b/src/gfx/cards/pidgey.png
new file mode 100644
index 0000000..e32186a
--- /dev/null
+++ b/src/gfx/cards/pidgey.png
Binary files differ
diff --git a/src/gfx/cards/pikachu1.8x6.png b/src/gfx/cards/pikachu1.8x6.png
deleted file mode 100644
index 5696eb2..0000000
--- a/src/gfx/cards/pikachu1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pikachu1.pal b/src/gfx/cards/pikachu1.pal
deleted file mode 100644
index 31ce085..0000000
--- a/src/gfx/cards/pikachu1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pikachu1.png b/src/gfx/cards/pikachu1.png
new file mode 100644
index 0000000..a28298a
--- /dev/null
+++ b/src/gfx/cards/pikachu1.png
Binary files differ
diff --git a/src/gfx/cards/pikachu2.8x6.png b/src/gfx/cards/pikachu2.8x6.png
deleted file mode 100644
index b97b530..0000000
--- a/src/gfx/cards/pikachu2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pikachu2.pal b/src/gfx/cards/pikachu2.pal
deleted file mode 100644
index 0a5206f..0000000
--- a/src/gfx/cards/pikachu2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pikachu2.png b/src/gfx/cards/pikachu2.png
new file mode 100644
index 0000000..f85b40a
--- /dev/null
+++ b/src/gfx/cards/pikachu2.png
Binary files differ
diff --git a/src/gfx/cards/pikachu3.8x6.png b/src/gfx/cards/pikachu3.8x6.png
deleted file mode 100644
index 4dec614..0000000
--- a/src/gfx/cards/pikachu3.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pikachu3.pal b/src/gfx/cards/pikachu3.pal
deleted file mode 100644
index 7e93511..0000000
--- a/src/gfx/cards/pikachu3.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pikachu3.png b/src/gfx/cards/pikachu3.png
new file mode 100644
index 0000000..e0155e5
--- /dev/null
+++ b/src/gfx/cards/pikachu3.png
Binary files differ
diff --git a/src/gfx/cards/pikachu4.8x6.png b/src/gfx/cards/pikachu4.8x6.png
deleted file mode 100644
index b355807..0000000
--- a/src/gfx/cards/pikachu4.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pikachu4.pal b/src/gfx/cards/pikachu4.pal
deleted file mode 100644
index 4cdf54b..0000000
--- a/src/gfx/cards/pikachu4.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pikachu4.png b/src/gfx/cards/pikachu4.png
new file mode 100644
index 0000000..c918c94
--- /dev/null
+++ b/src/gfx/cards/pikachu4.png
Binary files differ
diff --git a/src/gfx/cards/pinsir.8x6.png b/src/gfx/cards/pinsir.8x6.png
deleted file mode 100644
index 1e23b81..0000000
--- a/src/gfx/cards/pinsir.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pinsir.pal b/src/gfx/cards/pinsir.pal
deleted file mode 100644
index 13418da..0000000
--- a/src/gfx/cards/pinsir.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pinsir.png b/src/gfx/cards/pinsir.png
new file mode 100644
index 0000000..35a7a67
--- /dev/null
+++ b/src/gfx/cards/pinsir.png
Binary files differ
diff --git a/src/gfx/cards/pluspower.8x6.png b/src/gfx/cards/pluspower.8x6.png
deleted file mode 100644
index efb4b1c..0000000
--- a/src/gfx/cards/pluspower.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pluspower.pal b/src/gfx/cards/pluspower.pal
deleted file mode 100644
index 6ab8631..0000000
--- a/src/gfx/cards/pluspower.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pluspower.png b/src/gfx/cards/pluspower.png
new file mode 100644
index 0000000..5882fcc
--- /dev/null
+++ b/src/gfx/cards/pluspower.png
Binary files differ
diff --git a/src/gfx/cards/pokeball.8x6.png b/src/gfx/cards/pokeball.8x6.png
deleted file mode 100644
index bd99dfd..0000000
--- a/src/gfx/cards/pokeball.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokeball.pal b/src/gfx/cards/pokeball.pal
deleted file mode 100644
index c6230de..0000000
--- a/src/gfx/cards/pokeball.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokeball.png b/src/gfx/cards/pokeball.png
new file mode 100644
index 0000000..bb2750d
--- /dev/null
+++ b/src/gfx/cards/pokeball.png
Binary files differ
diff --git a/src/gfx/cards/pokedex.8x6.png b/src/gfx/cards/pokedex.8x6.png
deleted file mode 100644
index 970be3e..0000000
--- a/src/gfx/cards/pokedex.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokedex.pal b/src/gfx/cards/pokedex.pal
deleted file mode 100644
index ab3a819..0000000
--- a/src/gfx/cards/pokedex.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokedex.png b/src/gfx/cards/pokedex.png
new file mode 100644
index 0000000..cb94fed
--- /dev/null
+++ b/src/gfx/cards/pokedex.png
Binary files differ
diff --git a/src/gfx/cards/pokemonbreeder.8x6.png b/src/gfx/cards/pokemonbreeder.8x6.png
deleted file mode 100644
index 0661bde..0000000
--- a/src/gfx/cards/pokemonbreeder.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokemonbreeder.pal b/src/gfx/cards/pokemonbreeder.pal
deleted file mode 100644
index 411a545..0000000
--- a/src/gfx/cards/pokemonbreeder.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokemonbreeder.png b/src/gfx/cards/pokemonbreeder.png
new file mode 100644
index 0000000..c9b875f
--- /dev/null
+++ b/src/gfx/cards/pokemonbreeder.png
Binary files differ
diff --git a/src/gfx/cards/pokemoncenter.8x6.png b/src/gfx/cards/pokemoncenter.8x6.png
deleted file mode 100644
index 2ddffb8..0000000
--- a/src/gfx/cards/pokemoncenter.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokemoncenter.pal b/src/gfx/cards/pokemoncenter.pal
deleted file mode 100644
index 318425d..0000000
--- a/src/gfx/cards/pokemoncenter.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokemoncenter.png b/src/gfx/cards/pokemoncenter.png
new file mode 100644
index 0000000..652446c
--- /dev/null
+++ b/src/gfx/cards/pokemoncenter.png
Binary files differ
diff --git a/src/gfx/cards/pokemonflute.8x6.png b/src/gfx/cards/pokemonflute.8x6.png
deleted file mode 100644
index f9cb9df..0000000
--- a/src/gfx/cards/pokemonflute.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokemonflute.pal b/src/gfx/cards/pokemonflute.pal
deleted file mode 100644
index 5185e49..0000000
--- a/src/gfx/cards/pokemonflute.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokemonflute.png b/src/gfx/cards/pokemonflute.png
new file mode 100644
index 0000000..979ebf1
--- /dev/null
+++ b/src/gfx/cards/pokemonflute.png
Binary files differ
diff --git a/src/gfx/cards/pokemontrader.8x6.png b/src/gfx/cards/pokemontrader.8x6.png
deleted file mode 100644
index c35959d..0000000
--- a/src/gfx/cards/pokemontrader.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokemontrader.pal b/src/gfx/cards/pokemontrader.pal
deleted file mode 100644
index c0ce4fc..0000000
--- a/src/gfx/cards/pokemontrader.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/pokemontrader.png b/src/gfx/cards/pokemontrader.png
new file mode 100644
index 0000000..bc9dfc2
--- /dev/null
+++ b/src/gfx/cards/pokemontrader.png
Binary files differ
diff --git a/src/gfx/cards/poliwag.8x6.png b/src/gfx/cards/poliwag.8x6.png
deleted file mode 100644
index e555007..0000000
--- a/src/gfx/cards/poliwag.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/poliwag.pal b/src/gfx/cards/poliwag.pal
deleted file mode 100644
index b7612e9..0000000
--- a/src/gfx/cards/poliwag.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/poliwag.png b/src/gfx/cards/poliwag.png
new file mode 100644
index 0000000..f4e0ae8
--- /dev/null
+++ b/src/gfx/cards/poliwag.png
Binary files differ
diff --git a/src/gfx/cards/poliwhirl.8x6.png b/src/gfx/cards/poliwhirl.8x6.png
deleted file mode 100644
index bf73eca..0000000
--- a/src/gfx/cards/poliwhirl.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/poliwhirl.pal b/src/gfx/cards/poliwhirl.pal
deleted file mode 100644
index 1ece94a..0000000
--- a/src/gfx/cards/poliwhirl.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/poliwhirl.png b/src/gfx/cards/poliwhirl.png
new file mode 100644
index 0000000..e778014
--- /dev/null
+++ b/src/gfx/cards/poliwhirl.png
Binary files differ
diff --git a/src/gfx/cards/poliwrath.8x6.png b/src/gfx/cards/poliwrath.8x6.png
deleted file mode 100644
index d4af8a2..0000000
--- a/src/gfx/cards/poliwrath.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/poliwrath.pal b/src/gfx/cards/poliwrath.pal
deleted file mode 100644
index 91d9eda..0000000
--- a/src/gfx/cards/poliwrath.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/poliwrath.png b/src/gfx/cards/poliwrath.png
new file mode 100644
index 0000000..5d50e45
--- /dev/null
+++ b/src/gfx/cards/poliwrath.png
Binary files differ
diff --git a/src/gfx/cards/ponyta.8x6.png b/src/gfx/cards/ponyta.8x6.png
deleted file mode 100644
index 051665a..0000000
--- a/src/gfx/cards/ponyta.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ponyta.pal b/src/gfx/cards/ponyta.pal
deleted file mode 100644
index 0109046..0000000
--- a/src/gfx/cards/ponyta.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/ponyta.png b/src/gfx/cards/ponyta.png
new file mode 100644
index 0000000..c4b7554
--- /dev/null
+++ b/src/gfx/cards/ponyta.png
Binary files differ
diff --git a/src/gfx/cards/porygon.8x6.png b/src/gfx/cards/porygon.8x6.png
deleted file mode 100644
index bd21d61..0000000
--- a/src/gfx/cards/porygon.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/porygon.pal b/src/gfx/cards/porygon.pal
deleted file mode 100644
index 6d540f9..0000000
--- a/src/gfx/cards/porygon.pal
+++ /dev/null
@@ -1 +0,0 @@
-j  \ No newline at end of file
diff --git a/src/gfx/cards/porygon.png b/src/gfx/cards/porygon.png
new file mode 100644
index 0000000..a2ebed7
--- /dev/null
+++ b/src/gfx/cards/porygon.png
Binary files differ
diff --git a/src/gfx/cards/potion.8x6.png b/src/gfx/cards/potion.8x6.png
deleted file mode 100644
index 2ea8805..0000000
--- a/src/gfx/cards/potion.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/potion.pal b/src/gfx/cards/potion.pal
deleted file mode 100644
index 182bfcb..0000000
--- a/src/gfx/cards/potion.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/potion.png b/src/gfx/cards/potion.png
new file mode 100644
index 0000000..15ae183
--- /dev/null
+++ b/src/gfx/cards/potion.png
Binary files differ
diff --git a/src/gfx/cards/primeape.8x6.png b/src/gfx/cards/primeape.8x6.png
deleted file mode 100644
index 6b3186d..0000000
--- a/src/gfx/cards/primeape.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/primeape.pal b/src/gfx/cards/primeape.pal
deleted file mode 100644
index 56cdfa1..0000000
--- a/src/gfx/cards/primeape.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/primeape.png b/src/gfx/cards/primeape.png
new file mode 100644
index 0000000..fdfc577
--- /dev/null
+++ b/src/gfx/cards/primeape.png
Binary files differ
diff --git a/src/gfx/cards/professoroak.8x6.png b/src/gfx/cards/professoroak.8x6.png
deleted file mode 100644
index 1073c5a..0000000
--- a/src/gfx/cards/professoroak.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/professoroak.pal b/src/gfx/cards/professoroak.pal
deleted file mode 100644
index 4ad5671..0000000
--- a/src/gfx/cards/professoroak.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/professoroak.png b/src/gfx/cards/professoroak.png
new file mode 100644
index 0000000..aaf249a
--- /dev/null
+++ b/src/gfx/cards/professoroak.png
Binary files differ
diff --git a/src/gfx/cards/psychicenergy.8x6.png b/src/gfx/cards/psychicenergy.8x6.png
deleted file mode 100644
index d2ed9ab..0000000
--- a/src/gfx/cards/psychicenergy.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/psychicenergy.pal b/src/gfx/cards/psychicenergy.pal
deleted file mode 100644
index 44fd31a..0000000
--- a/src/gfx/cards/psychicenergy.pal
+++ /dev/null
@@ -1 +0,0 @@
-_i@ \ No newline at end of file
diff --git a/src/gfx/cards/psychicenergy.png b/src/gfx/cards/psychicenergy.png
new file mode 100644
index 0000000..20d54d8
--- /dev/null
+++ b/src/gfx/cards/psychicenergy.png
Binary files differ
diff --git a/src/gfx/cards/psyduck.8x6.png b/src/gfx/cards/psyduck.8x6.png
deleted file mode 100644
index 22f2188..0000000
--- a/src/gfx/cards/psyduck.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/psyduck.pal b/src/gfx/cards/psyduck.pal
deleted file mode 100644
index e94c8ff..0000000
--- a/src/gfx/cards/psyduck.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/psyduck.png b/src/gfx/cards/psyduck.png
new file mode 100644
index 0000000..323ae49
--- /dev/null
+++ b/src/gfx/cards/psyduck.png
Binary files differ
diff --git a/src/gfx/cards/raichu1.8x6.png b/src/gfx/cards/raichu1.8x6.png
deleted file mode 100644
index 84aa606..0000000
--- a/src/gfx/cards/raichu1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/raichu1.pal b/src/gfx/cards/raichu1.pal
deleted file mode 100644
index 390ad34..0000000
--- a/src/gfx/cards/raichu1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/raichu1.png b/src/gfx/cards/raichu1.png
new file mode 100644
index 0000000..9b2d6ff
--- /dev/null
+++ b/src/gfx/cards/raichu1.png
Binary files differ
diff --git a/src/gfx/cards/raichu2.8x6.png b/src/gfx/cards/raichu2.8x6.png
deleted file mode 100644
index 708699a..0000000
--- a/src/gfx/cards/raichu2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/raichu2.pal b/src/gfx/cards/raichu2.pal
deleted file mode 100644
index 8cef515..0000000
--- a/src/gfx/cards/raichu2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/raichu2.png b/src/gfx/cards/raichu2.png
new file mode 100644
index 0000000..8c35b05
--- /dev/null
+++ b/src/gfx/cards/raichu2.png
Binary files differ
diff --git a/src/gfx/cards/rapidash.8x6.png b/src/gfx/cards/rapidash.8x6.png
deleted file mode 100644
index 0ae1186..0000000
--- a/src/gfx/cards/rapidash.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/rapidash.pal b/src/gfx/cards/rapidash.pal
deleted file mode 100644
index 87185a3..0000000
--- a/src/gfx/cards/rapidash.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/rapidash.png b/src/gfx/cards/rapidash.png
new file mode 100644
index 0000000..d86f93e
--- /dev/null
+++ b/src/gfx/cards/rapidash.png
Binary files differ
diff --git a/src/gfx/cards/raticate.8x6.png b/src/gfx/cards/raticate.8x6.png
deleted file mode 100644
index 8c79e7f..0000000
--- a/src/gfx/cards/raticate.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/raticate.pal b/src/gfx/cards/raticate.pal
deleted file mode 100644
index 9a861fc..0000000
--- a/src/gfx/cards/raticate.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/raticate.png b/src/gfx/cards/raticate.png
new file mode 100644
index 0000000..a20c6b9
--- /dev/null
+++ b/src/gfx/cards/raticate.png
Binary files differ
diff --git a/src/gfx/cards/rattata.8x6.png b/src/gfx/cards/rattata.8x6.png
deleted file mode 100644
index 2bf4f19..0000000
--- a/src/gfx/cards/rattata.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/rattata.pal b/src/gfx/cards/rattata.pal
deleted file mode 100644
index 9e49d97..0000000
--- a/src/gfx/cards/rattata.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/rattata.png b/src/gfx/cards/rattata.png
new file mode 100644
index 0000000..d90ea49
--- /dev/null
+++ b/src/gfx/cards/rattata.png
Binary files differ
diff --git a/src/gfx/cards/recycle.8x6.png b/src/gfx/cards/recycle.8x6.png
deleted file mode 100644
index e7e809c..0000000
--- a/src/gfx/cards/recycle.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/recycle.pal b/src/gfx/cards/recycle.pal
deleted file mode 100644
index 9da25ce..0000000
--- a/src/gfx/cards/recycle.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/recycle.png b/src/gfx/cards/recycle.png
new file mode 100644
index 0000000..32637ce
--- /dev/null
+++ b/src/gfx/cards/recycle.png
Binary files differ
diff --git a/src/gfx/cards/revive.8x6.png b/src/gfx/cards/revive.8x6.png
deleted file mode 100644
index 6cf1afa..0000000
--- a/src/gfx/cards/revive.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/revive.pal b/src/gfx/cards/revive.pal
deleted file mode 100644
index 5b62c4f..0000000
--- a/src/gfx/cards/revive.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/revive.png b/src/gfx/cards/revive.png
new file mode 100644
index 0000000..e2df762
--- /dev/null
+++ b/src/gfx/cards/revive.png
Binary files differ
diff --git a/src/gfx/cards/rhydon.8x6.png b/src/gfx/cards/rhydon.8x6.png
deleted file mode 100644
index c420a66..0000000
--- a/src/gfx/cards/rhydon.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/rhydon.pal b/src/gfx/cards/rhydon.pal
deleted file mode 100644
index 311cd3e..0000000
--- a/src/gfx/cards/rhydon.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/rhydon.png b/src/gfx/cards/rhydon.png
new file mode 100644
index 0000000..550256f
--- /dev/null
+++ b/src/gfx/cards/rhydon.png
Binary files differ
diff --git a/src/gfx/cards/rhyhorn.8x6.png b/src/gfx/cards/rhyhorn.8x6.png
deleted file mode 100644
index 591f7b5..0000000
--- a/src/gfx/cards/rhyhorn.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/rhyhorn.pal b/src/gfx/cards/rhyhorn.pal
deleted file mode 100644
index fd637ff..0000000
--- a/src/gfx/cards/rhyhorn.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/rhyhorn.png b/src/gfx/cards/rhyhorn.png
new file mode 100644
index 0000000..62740d4
--- /dev/null
+++ b/src/gfx/cards/rhyhorn.png
Binary files differ
diff --git a/src/gfx/cards/sandshrew.8x6.png b/src/gfx/cards/sandshrew.8x6.png
deleted file mode 100644
index db01d0c..0000000
--- a/src/gfx/cards/sandshrew.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/sandshrew.pal b/src/gfx/cards/sandshrew.pal
deleted file mode 100644
index 5b6f131..0000000
--- a/src/gfx/cards/sandshrew.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/sandshrew.png b/src/gfx/cards/sandshrew.png
new file mode 100644
index 0000000..c83e2c4
--- /dev/null
+++ b/src/gfx/cards/sandshrew.png
Binary files differ
diff --git a/src/gfx/cards/sandslash.8x6.png b/src/gfx/cards/sandslash.8x6.png
deleted file mode 100644
index 438b2e2..0000000
--- a/src/gfx/cards/sandslash.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/sandslash.pal b/src/gfx/cards/sandslash.pal
deleted file mode 100644
index 1935ba9..0000000
--- a/src/gfx/cards/sandslash.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/sandslash.png b/src/gfx/cards/sandslash.png
new file mode 100644
index 0000000..a6d739d
--- /dev/null
+++ b/src/gfx/cards/sandslash.png
Binary files differ
diff --git a/src/gfx/cards/scoopup.8x6.png b/src/gfx/cards/scoopup.8x6.png
deleted file mode 100644
index 3e75ec7..0000000
--- a/src/gfx/cards/scoopup.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/scoopup.pal b/src/gfx/cards/scoopup.pal
deleted file mode 100644
index 343e078..0000000
--- a/src/gfx/cards/scoopup.pal
+++ /dev/null
@@ -1 +0,0 @@
-_k!@ \ No newline at end of file
diff --git a/src/gfx/cards/scoopup.png b/src/gfx/cards/scoopup.png
new file mode 100644
index 0000000..e9364ff
--- /dev/null
+++ b/src/gfx/cards/scoopup.png
Binary files differ
diff --git a/src/gfx/cards/scyther.8x6.png b/src/gfx/cards/scyther.8x6.png
deleted file mode 100644
index 85d9255..0000000
--- a/src/gfx/cards/scyther.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/scyther.pal b/src/gfx/cards/scyther.pal
deleted file mode 100644
index 1da0cd9..0000000
--- a/src/gfx/cards/scyther.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/scyther.png b/src/gfx/cards/scyther.png
new file mode 100644
index 0000000..ddc9624
--- /dev/null
+++ b/src/gfx/cards/scyther.png
Binary files differ
diff --git a/src/gfx/cards/seadra.8x6.png b/src/gfx/cards/seadra.8x6.png
deleted file mode 100644
index 168eb4e..0000000
--- a/src/gfx/cards/seadra.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/seadra.pal b/src/gfx/cards/seadra.pal
deleted file mode 100644
index 1fc8f85..0000000
--- a/src/gfx/cards/seadra.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/seadra.png b/src/gfx/cards/seadra.png
new file mode 100644
index 0000000..1ceefc6
--- /dev/null
+++ b/src/gfx/cards/seadra.png
Binary files differ
diff --git a/src/gfx/cards/seaking.8x6.png b/src/gfx/cards/seaking.8x6.png
deleted file mode 100644
index ada6702..0000000
--- a/src/gfx/cards/seaking.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/seaking.pal b/src/gfx/cards/seaking.pal
deleted file mode 100644
index 08a50b6..0000000
--- a/src/gfx/cards/seaking.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/seaking.png b/src/gfx/cards/seaking.png
new file mode 100644
index 0000000..8f58c89
--- /dev/null
+++ b/src/gfx/cards/seaking.png
Binary files differ
diff --git a/src/gfx/cards/seel.8x6.png b/src/gfx/cards/seel.8x6.png
deleted file mode 100644
index 9face9f..0000000
--- a/src/gfx/cards/seel.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/seel.pal b/src/gfx/cards/seel.pal
deleted file mode 100644
index ba76726..0000000
--- a/src/gfx/cards/seel.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/seel.png b/src/gfx/cards/seel.png
new file mode 100644
index 0000000..dec2c2f
--- /dev/null
+++ b/src/gfx/cards/seel.png
Binary files differ
diff --git a/src/gfx/cards/shellder.8x6.png b/src/gfx/cards/shellder.8x6.png
deleted file mode 100644
index ad49832..0000000
--- a/src/gfx/cards/shellder.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/shellder.pal b/src/gfx/cards/shellder.pal
deleted file mode 100644
index 70e70bf..0000000
--- a/src/gfx/cards/shellder.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/shellder.png b/src/gfx/cards/shellder.png
new file mode 100644
index 0000000..1c336f6
--- /dev/null
+++ b/src/gfx/cards/shellder.png
Binary files differ
diff --git a/src/gfx/cards/slowbro.8x6.png b/src/gfx/cards/slowbro.8x6.png
deleted file mode 100644
index ad59fd6..0000000
--- a/src/gfx/cards/slowbro.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/slowbro.pal b/src/gfx/cards/slowbro.pal
deleted file mode 100644
index 4b51616..0000000
--- a/src/gfx/cards/slowbro.pal
+++ /dev/null
@@ -1 +0,0 @@
-_3  \ No newline at end of file
diff --git a/src/gfx/cards/slowbro.png b/src/gfx/cards/slowbro.png
new file mode 100644
index 0000000..e574738
--- /dev/null
+++ b/src/gfx/cards/slowbro.png
Binary files differ
diff --git a/src/gfx/cards/slowpoke1.8x6.png b/src/gfx/cards/slowpoke1.8x6.png
deleted file mode 100644
index a74d1a4..0000000
--- a/src/gfx/cards/slowpoke1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/slowpoke1.pal b/src/gfx/cards/slowpoke1.pal
deleted file mode 100644
index 81b0ad9..0000000
--- a/src/gfx/cards/slowpoke1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/slowpoke1.png b/src/gfx/cards/slowpoke1.png
new file mode 100644
index 0000000..54cd6c9
--- /dev/null
+++ b/src/gfx/cards/slowpoke1.png
Binary files differ
diff --git a/src/gfx/cards/slowpoke2.8x6.png b/src/gfx/cards/slowpoke2.8x6.png
deleted file mode 100644
index 834cf05..0000000
--- a/src/gfx/cards/slowpoke2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/slowpoke2.pal b/src/gfx/cards/slowpoke2.pal
deleted file mode 100644
index 73881a1..0000000
--- a/src/gfx/cards/slowpoke2.pal
+++ /dev/null
@@ -1 +0,0 @@
-_k0 \ No newline at end of file
diff --git a/src/gfx/cards/slowpoke2.png b/src/gfx/cards/slowpoke2.png
new file mode 100644
index 0000000..c951930
--- /dev/null
+++ b/src/gfx/cards/slowpoke2.png
Binary files differ
diff --git a/src/gfx/cards/snorlax.8x6.png b/src/gfx/cards/snorlax.8x6.png
deleted file mode 100644
index 4eb26a4..0000000
--- a/src/gfx/cards/snorlax.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/snorlax.pal b/src/gfx/cards/snorlax.pal
deleted file mode 100644
index e1d7d63..0000000
--- a/src/gfx/cards/snorlax.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/snorlax.png b/src/gfx/cards/snorlax.png
new file mode 100644
index 0000000..cfd5ca7
--- /dev/null
+++ b/src/gfx/cards/snorlax.png
Binary files differ
diff --git a/src/gfx/cards/spearow.8x6.png b/src/gfx/cards/spearow.8x6.png
deleted file mode 100644
index f76c643..0000000
--- a/src/gfx/cards/spearow.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/spearow.pal b/src/gfx/cards/spearow.pal
deleted file mode 100644
index f241eaa..0000000
--- a/src/gfx/cards/spearow.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/spearow.png b/src/gfx/cards/spearow.png
new file mode 100644
index 0000000..c3d39dd
--- /dev/null
+++ b/src/gfx/cards/spearow.png
Binary files differ
diff --git a/src/gfx/cards/squirtle.8x6.png b/src/gfx/cards/squirtle.8x6.png
deleted file mode 100644
index e8907eb..0000000
--- a/src/gfx/cards/squirtle.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/squirtle.pal b/src/gfx/cards/squirtle.pal
deleted file mode 100644
index a7aaec5..0000000
--- a/src/gfx/cards/squirtle.pal
+++ /dev/null
@@ -1 +0,0 @@
-kLC \ No newline at end of file
diff --git a/src/gfx/cards/squirtle.png b/src/gfx/cards/squirtle.png
new file mode 100644
index 0000000..ba604ac
--- /dev/null
+++ b/src/gfx/cards/squirtle.png
Binary files differ
diff --git a/src/gfx/cards/starmie.8x6.png b/src/gfx/cards/starmie.8x6.png
deleted file mode 100644
index 5e4c0b1..0000000
--- a/src/gfx/cards/starmie.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/starmie.pal b/src/gfx/cards/starmie.pal
deleted file mode 100644
index 7bcf392..0000000
--- a/src/gfx/cards/starmie.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/starmie.png b/src/gfx/cards/starmie.png
new file mode 100644
index 0000000..96efadd
--- /dev/null
+++ b/src/gfx/cards/starmie.png
Binary files differ
diff --git a/src/gfx/cards/staryu.8x6.png b/src/gfx/cards/staryu.8x6.png
deleted file mode 100644
index 1e63f1c..0000000
--- a/src/gfx/cards/staryu.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/staryu.pal b/src/gfx/cards/staryu.pal
deleted file mode 100644
index 2664741..0000000
--- a/src/gfx/cards/staryu.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/staryu.png b/src/gfx/cards/staryu.png
new file mode 100644
index 0000000..23b5322
--- /dev/null
+++ b/src/gfx/cards/staryu.png
Binary files differ
diff --git a/src/gfx/cards/superenergyremoval.8x6.png b/src/gfx/cards/superenergyremoval.8x6.png
deleted file mode 100644
index f71ac87..0000000
--- a/src/gfx/cards/superenergyremoval.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/superenergyremoval.pal b/src/gfx/cards/superenergyremoval.pal
deleted file mode 100644
index f6fab91..0000000
--- a/src/gfx/cards/superenergyremoval.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/superenergyremoval.png b/src/gfx/cards/superenergyremoval.png
new file mode 100644
index 0000000..05460b7
--- /dev/null
+++ b/src/gfx/cards/superenergyremoval.png
Binary files differ
diff --git a/src/gfx/cards/superenergyretrieval.8x6.png b/src/gfx/cards/superenergyretrieval.8x6.png
deleted file mode 100644
index be4c186..0000000
--- a/src/gfx/cards/superenergyretrieval.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/superenergyretrieval.pal b/src/gfx/cards/superenergyretrieval.pal
deleted file mode 100644
index 9dcf420..0000000
--- a/src/gfx/cards/superenergyretrieval.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/superenergyretrieval.png b/src/gfx/cards/superenergyretrieval.png
new file mode 100644
index 0000000..93e967b
--- /dev/null
+++ b/src/gfx/cards/superenergyretrieval.png
Binary files differ
diff --git a/src/gfx/cards/superpotion.8x6.png b/src/gfx/cards/superpotion.8x6.png
deleted file mode 100644
index b476aba..0000000
--- a/src/gfx/cards/superpotion.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/superpotion.pal b/src/gfx/cards/superpotion.pal
deleted file mode 100644
index fe84a56..0000000
--- a/src/gfx/cards/superpotion.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/superpotion.png b/src/gfx/cards/superpotion.png
new file mode 100644
index 0000000..86ac5ef
--- /dev/null
+++ b/src/gfx/cards/superpotion.png
Binary files differ
diff --git a/src/gfx/cards/surfingpikachu1.8x6.png b/src/gfx/cards/surfingpikachu1.8x6.png
deleted file mode 100644
index 9b84774..0000000
--- a/src/gfx/cards/surfingpikachu1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/surfingpikachu1.pal b/src/gfx/cards/surfingpikachu1.pal
deleted file mode 100644
index f7a0dd9..0000000
--- a/src/gfx/cards/surfingpikachu1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/surfingpikachu1.png b/src/gfx/cards/surfingpikachu1.png
new file mode 100644
index 0000000..029c89b
--- /dev/null
+++ b/src/gfx/cards/surfingpikachu1.png
Binary files differ
diff --git a/src/gfx/cards/surfingpikachu2.8x6.png b/src/gfx/cards/surfingpikachu2.8x6.png
deleted file mode 100644
index 53e796a..0000000
--- a/src/gfx/cards/surfingpikachu2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/surfingpikachu2.pal b/src/gfx/cards/surfingpikachu2.pal
deleted file mode 100644
index f7a0dd9..0000000
--- a/src/gfx/cards/surfingpikachu2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/surfingpikachu2.png b/src/gfx/cards/surfingpikachu2.png
new file mode 100644
index 0000000..3fac2c2
--- /dev/null
+++ b/src/gfx/cards/surfingpikachu2.png
Binary files differ
diff --git a/src/gfx/cards/switch.8x6.png b/src/gfx/cards/switch.8x6.png
deleted file mode 100644
index cdcec01..0000000
--- a/src/gfx/cards/switch.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/switch.pal b/src/gfx/cards/switch.pal
deleted file mode 100644
index 4675255..0000000
--- a/src/gfx/cards/switch.pal
+++ /dev/null
@@ -1 +0,0 @@
-_k  \ No newline at end of file
diff --git a/src/gfx/cards/switch.png b/src/gfx/cards/switch.png
new file mode 100644
index 0000000..c93063b
--- /dev/null
+++ b/src/gfx/cards/switch.png
Binary files differ
diff --git a/src/gfx/cards/tangela1.8x6.png b/src/gfx/cards/tangela1.8x6.png
deleted file mode 100644
index 0907f14..0000000
--- a/src/gfx/cards/tangela1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/tangela1.pal b/src/gfx/cards/tangela1.pal
deleted file mode 100644
index 245aa95..0000000
--- a/src/gfx/cards/tangela1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/tangela1.png b/src/gfx/cards/tangela1.png
new file mode 100644
index 0000000..9f4fdb8
--- /dev/null
+++ b/src/gfx/cards/tangela1.png
Binary files differ
diff --git a/src/gfx/cards/tangela2.8x6.png b/src/gfx/cards/tangela2.8x6.png
deleted file mode 100644
index 5fb06c8..0000000
--- a/src/gfx/cards/tangela2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/tangela2.pal b/src/gfx/cards/tangela2.pal
deleted file mode 100644
index 0eedb04..0000000
--- a/src/gfx/cards/tangela2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/tangela2.png b/src/gfx/cards/tangela2.png
new file mode 100644
index 0000000..c689a50
--- /dev/null
+++ b/src/gfx/cards/tangela2.png
Binary files differ
diff --git a/src/gfx/cards/tauros.8x6.png b/src/gfx/cards/tauros.8x6.png
deleted file mode 100644
index 8a372a2..0000000
--- a/src/gfx/cards/tauros.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/tauros.pal b/src/gfx/cards/tauros.pal
deleted file mode 100644
index ac7554b..0000000
--- a/src/gfx/cards/tauros.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/tauros.png b/src/gfx/cards/tauros.png
new file mode 100644
index 0000000..04a7a64
--- /dev/null
+++ b/src/gfx/cards/tauros.png
Binary files differ
diff --git a/src/gfx/cards/tentacool.8x6.png b/src/gfx/cards/tentacool.8x6.png
deleted file mode 100644
index 7da303a..0000000
--- a/src/gfx/cards/tentacool.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/tentacool.pal b/src/gfx/cards/tentacool.pal
deleted file mode 100644
index 210122c..0000000
--- a/src/gfx/cards/tentacool.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/tentacool.png b/src/gfx/cards/tentacool.png
new file mode 100644
index 0000000..fe24fae
--- /dev/null
+++ b/src/gfx/cards/tentacool.png
Binary files differ
diff --git a/src/gfx/cards/tentacruel.8x6.png b/src/gfx/cards/tentacruel.8x6.png
deleted file mode 100644
index 74b2c43..0000000
--- a/src/gfx/cards/tentacruel.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/tentacruel.pal b/src/gfx/cards/tentacruel.pal
deleted file mode 100644
index 212e1bf..0000000
--- a/src/gfx/cards/tentacruel.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/tentacruel.png b/src/gfx/cards/tentacruel.png
new file mode 100644
index 0000000..9c69872
--- /dev/null
+++ b/src/gfx/cards/tentacruel.png
Binary files differ
diff --git a/src/gfx/cards/vaporeon1.8x6.png b/src/gfx/cards/vaporeon1.8x6.png
deleted file mode 100644
index 3ac523a..0000000
--- a/src/gfx/cards/vaporeon1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/vaporeon1.pal b/src/gfx/cards/vaporeon1.pal
deleted file mode 100644
index 0c16866..0000000
--- a/src/gfx/cards/vaporeon1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/vaporeon1.png b/src/gfx/cards/vaporeon1.png
new file mode 100644
index 0000000..487bc18
--- /dev/null
+++ b/src/gfx/cards/vaporeon1.png
Binary files differ
diff --git a/src/gfx/cards/vaporeon2.8x6.png b/src/gfx/cards/vaporeon2.8x6.png
deleted file mode 100644
index a90ba62..0000000
--- a/src/gfx/cards/vaporeon2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/vaporeon2.pal b/src/gfx/cards/vaporeon2.pal
deleted file mode 100644
index 5455a43..0000000
--- a/src/gfx/cards/vaporeon2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/vaporeon2.png b/src/gfx/cards/vaporeon2.png
new file mode 100644
index 0000000..d370ea0
--- /dev/null
+++ b/src/gfx/cards/vaporeon2.png
Binary files differ
diff --git a/src/gfx/cards/venomoth.8x6.png b/src/gfx/cards/venomoth.8x6.png
deleted file mode 100644
index d1c9fce..0000000
--- a/src/gfx/cards/venomoth.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/venomoth.pal b/src/gfx/cards/venomoth.pal
deleted file mode 100644
index 663c93f..0000000
--- a/src/gfx/cards/venomoth.pal
+++ /dev/null
@@ -1 +0,0 @@
-_U0 \ No newline at end of file
diff --git a/src/gfx/cards/venomoth.png b/src/gfx/cards/venomoth.png
new file mode 100644
index 0000000..47d6510
--- /dev/null
+++ b/src/gfx/cards/venomoth.png
Binary files differ
diff --git a/src/gfx/cards/venonat.8x6.png b/src/gfx/cards/venonat.8x6.png
deleted file mode 100644
index 1638261..0000000
--- a/src/gfx/cards/venonat.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/venonat.pal b/src/gfx/cards/venonat.pal
deleted file mode 100644
index 5be80c9..0000000
--- a/src/gfx/cards/venonat.pal
+++ /dev/null
@@ -1 +0,0 @@
-ZT \ No newline at end of file
diff --git a/src/gfx/cards/venonat.png b/src/gfx/cards/venonat.png
new file mode 100644
index 0000000..5b6d970
--- /dev/null
+++ b/src/gfx/cards/venonat.png
Binary files differ
diff --git a/src/gfx/cards/venusaur1.8x6.png b/src/gfx/cards/venusaur1.8x6.png
deleted file mode 100644
index d2d3989..0000000
--- a/src/gfx/cards/venusaur1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/venusaur1.pal b/src/gfx/cards/venusaur1.pal
deleted file mode 100644
index ff5c74c..0000000
--- a/src/gfx/cards/venusaur1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/venusaur1.png b/src/gfx/cards/venusaur1.png
new file mode 100644
index 0000000..9f71a39
--- /dev/null
+++ b/src/gfx/cards/venusaur1.png
Binary files differ
diff --git a/src/gfx/cards/venusaur2.8x6.png b/src/gfx/cards/venusaur2.8x6.png
deleted file mode 100644
index dcfa858..0000000
--- a/src/gfx/cards/venusaur2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/venusaur2.pal b/src/gfx/cards/venusaur2.pal
deleted file mode 100644
index fc789ff..0000000
--- a/src/gfx/cards/venusaur2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/venusaur2.png b/src/gfx/cards/venusaur2.png
new file mode 100644
index 0000000..5f91e9b
--- /dev/null
+++ b/src/gfx/cards/venusaur2.png
Binary files differ
diff --git a/src/gfx/cards/victreebel.8x6.png b/src/gfx/cards/victreebel.8x6.png
deleted file mode 100644
index d8536a0..0000000
--- a/src/gfx/cards/victreebel.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/victreebel.pal b/src/gfx/cards/victreebel.pal
deleted file mode 100644
index 529eecf..0000000
--- a/src/gfx/cards/victreebel.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/victreebel.png b/src/gfx/cards/victreebel.png
new file mode 100644
index 0000000..37cf69c
--- /dev/null
+++ b/src/gfx/cards/victreebel.png
Binary files differ
diff --git a/src/gfx/cards/vileplume.8x6.png b/src/gfx/cards/vileplume.8x6.png
deleted file mode 100644
index a3766d5..0000000
--- a/src/gfx/cards/vileplume.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/vileplume.pal b/src/gfx/cards/vileplume.pal
deleted file mode 100644
index 3c4f707..0000000
--- a/src/gfx/cards/vileplume.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/vileplume.png b/src/gfx/cards/vileplume.png
new file mode 100644
index 0000000..7ef4386
--- /dev/null
+++ b/src/gfx/cards/vileplume.png
Binary files differ
diff --git a/src/gfx/cards/voltorb.8x6.png b/src/gfx/cards/voltorb.8x6.png
deleted file mode 100644
index cb39c66..0000000
--- a/src/gfx/cards/voltorb.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/voltorb.pal b/src/gfx/cards/voltorb.pal
deleted file mode 100644
index 01eca85..0000000
--- a/src/gfx/cards/voltorb.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/voltorb.png b/src/gfx/cards/voltorb.png
new file mode 100644
index 0000000..a9e0ec9
--- /dev/null
+++ b/src/gfx/cards/voltorb.png
Binary files differ
diff --git a/src/gfx/cards/vulpix.8x6.png b/src/gfx/cards/vulpix.8x6.png
deleted file mode 100644
index e83d888..0000000
--- a/src/gfx/cards/vulpix.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/vulpix.pal b/src/gfx/cards/vulpix.pal
deleted file mode 100644
index eb6af99..0000000
--- a/src/gfx/cards/vulpix.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/vulpix.png b/src/gfx/cards/vulpix.png
new file mode 100644
index 0000000..987a5dd
--- /dev/null
+++ b/src/gfx/cards/vulpix.png
Binary files differ
diff --git a/src/gfx/cards/wartortle.8x6.png b/src/gfx/cards/wartortle.8x6.png
deleted file mode 100644
index fad87c7..0000000
--- a/src/gfx/cards/wartortle.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/wartortle.pal b/src/gfx/cards/wartortle.pal
deleted file mode 100644
index 0c9dd7c..0000000
--- a/src/gfx/cards/wartortle.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/wartortle.png b/src/gfx/cards/wartortle.png
new file mode 100644
index 0000000..5c046f7
--- /dev/null
+++ b/src/gfx/cards/wartortle.png
Binary files differ
diff --git a/src/gfx/cards/waterenergy.8x6.png b/src/gfx/cards/waterenergy.8x6.png
deleted file mode 100644
index 1fe022e..0000000
--- a/src/gfx/cards/waterenergy.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/waterenergy.pal b/src/gfx/cards/waterenergy.pal
deleted file mode 100644
index 387346f..0000000
--- a/src/gfx/cards/waterenergy.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/waterenergy.png b/src/gfx/cards/waterenergy.png
new file mode 100644
index 0000000..d1f28e2
--- /dev/null
+++ b/src/gfx/cards/waterenergy.png
Binary files differ
diff --git a/src/gfx/cards/weedle.8x6.png b/src/gfx/cards/weedle.8x6.png
deleted file mode 100644
index f53e060..0000000
--- a/src/gfx/cards/weedle.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/weedle.pal b/src/gfx/cards/weedle.pal
deleted file mode 100644
index e640ad3..0000000
--- a/src/gfx/cards/weedle.pal
+++ /dev/null
@@ -1 +0,0 @@
-k_1 \ No newline at end of file
diff --git a/src/gfx/cards/weedle.png b/src/gfx/cards/weedle.png
new file mode 100644
index 0000000..6073fb7
--- /dev/null
+++ b/src/gfx/cards/weedle.png
Binary files differ
diff --git a/src/gfx/cards/weepinbell.8x6.png b/src/gfx/cards/weepinbell.8x6.png
deleted file mode 100644
index bdff148..0000000
--- a/src/gfx/cards/weepinbell.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/weepinbell.pal b/src/gfx/cards/weepinbell.pal
deleted file mode 100644
index b1c7dc7..0000000
--- a/src/gfx/cards/weepinbell.pal
+++ /dev/null
@@ -1 +0,0 @@
-C \ No newline at end of file
diff --git a/src/gfx/cards/weepinbell.png b/src/gfx/cards/weepinbell.png
new file mode 100644
index 0000000..aa0acb7
--- /dev/null
+++ b/src/gfx/cards/weepinbell.png
Binary files differ
diff --git a/src/gfx/cards/weezing.8x6.png b/src/gfx/cards/weezing.8x6.png
deleted file mode 100644
index 12d3514..0000000
--- a/src/gfx/cards/weezing.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/weezing.pal b/src/gfx/cards/weezing.pal
deleted file mode 100644
index 4d7faab..0000000
--- a/src/gfx/cards/weezing.pal
+++ /dev/null
@@ -1 +0,0 @@
-L3@ \ No newline at end of file
diff --git a/src/gfx/cards/weezing.png b/src/gfx/cards/weezing.png
new file mode 100644
index 0000000..eaadb67
--- /dev/null
+++ b/src/gfx/cards/weezing.png
Binary files differ
diff --git a/src/gfx/cards/wigglytuff.8x6.png b/src/gfx/cards/wigglytuff.8x6.png
deleted file mode 100644
index 3429ddf..0000000
--- a/src/gfx/cards/wigglytuff.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/wigglytuff.pal b/src/gfx/cards/wigglytuff.pal
deleted file mode 100644
index b8f2caf..0000000
--- a/src/gfx/cards/wigglytuff.pal
+++ /dev/null
@@ -1 +0,0 @@
-j2 \ No newline at end of file
diff --git a/src/gfx/cards/wigglytuff.png b/src/gfx/cards/wigglytuff.png
new file mode 100644
index 0000000..762ad41
--- /dev/null
+++ b/src/gfx/cards/wigglytuff.png
Binary files differ
diff --git a/src/gfx/cards/zapdos1.8x6.png b/src/gfx/cards/zapdos1.8x6.png
deleted file mode 100644
index b34c5c7..0000000
--- a/src/gfx/cards/zapdos1.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/zapdos1.pal b/src/gfx/cards/zapdos1.pal
deleted file mode 100644
index f68430a..0000000
--- a/src/gfx/cards/zapdos1.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/zapdos1.png b/src/gfx/cards/zapdos1.png
new file mode 100644
index 0000000..321dba7
--- /dev/null
+++ b/src/gfx/cards/zapdos1.png
Binary files differ
diff --git a/src/gfx/cards/zapdos2.8x6.png b/src/gfx/cards/zapdos2.8x6.png
deleted file mode 100644
index 1583f11..0000000
--- a/src/gfx/cards/zapdos2.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/zapdos2.pal b/src/gfx/cards/zapdos2.pal
deleted file mode 100644
index fe18659..0000000
--- a/src/gfx/cards/zapdos2.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/zapdos2.png b/src/gfx/cards/zapdos2.png
new file mode 100644
index 0000000..43c1164
--- /dev/null
+++ b/src/gfx/cards/zapdos2.png
Binary files differ
diff --git a/src/gfx/cards/zapdos3.8x6.png b/src/gfx/cards/zapdos3.8x6.png
deleted file mode 100644
index 3683243..0000000
--- a/src/gfx/cards/zapdos3.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/zapdos3.pal b/src/gfx/cards/zapdos3.pal
deleted file mode 100644
index fc0facc..0000000
--- a/src/gfx/cards/zapdos3.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/zapdos3.png b/src/gfx/cards/zapdos3.png
new file mode 100644
index 0000000..def590c
--- /dev/null
+++ b/src/gfx/cards/zapdos3.png
Binary files differ
diff --git a/src/gfx/cards/zubat.8x6.png b/src/gfx/cards/zubat.8x6.png
deleted file mode 100644
index 2a0c346..0000000
--- a/src/gfx/cards/zubat.8x6.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/zubat.pal b/src/gfx/cards/zubat.pal
deleted file mode 100644
index 3583362..0000000
--- a/src/gfx/cards/zubat.pal
+++ /dev/null
Binary files differ
diff --git a/src/gfx/cards/zubat.png b/src/gfx/cards/zubat.png
new file mode 100644
index 0000000..f6cdc0e
--- /dev/null
+++ b/src/gfx/cards/zubat.png
Binary files differ
diff --git a/src/gfx/duel/anims/51.t10.png b/src/gfx/duel/anims/51.png
index 98eb770..98eb770 100644
--- a/src/gfx/duel/anims/51.t10.png
+++ b/src/gfx/duel/anims/51.png
Binary files differ
diff --git a/src/gfx/duel/cgb_symbols.png b/src/gfx/duel/cgb_symbols.png
new file mode 100644
index 0000000..ac0f54d
--- /dev/null
+++ b/src/gfx/duel/cgb_symbols.png
Binary files differ
diff --git a/src/gfx/duel/cgb_symbols.t7.png b/src/gfx/duel/cgb_symbols.t7.png
deleted file mode 100644
index 578867f..0000000
--- a/src/gfx/duel/cgb_symbols.t7.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/duel/dmg_sgb_symbols.png b/src/gfx/duel/dmg_sgb_symbols.png
new file mode 100644
index 0000000..91eede5
--- /dev/null
+++ b/src/gfx/duel/dmg_sgb_symbols.png
Binary files differ
diff --git a/src/gfx/duel/dmg_sgb_symbols.t7.png b/src/gfx/duel/dmg_sgb_symbols.t7.png
deleted file mode 100644
index 10715db..0000000
--- a/src/gfx/duel/dmg_sgb_symbols.t7.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/duel/other.png b/src/gfx/duel/other.png
new file mode 100644
index 0000000..d2aa1e9
--- /dev/null
+++ b/src/gfx/duel/other.png
Binary files differ
diff --git a/src/gfx/duel/other.t7.png b/src/gfx/duel/other.t7.png
deleted file mode 100644
index 796ecf7..0000000
--- a/src/gfx/duel/other.t7.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/fonts/full_width/4.png b/src/gfx/fonts/full_width/4.png
new file mode 100644
index 0000000..c872a6d
--- /dev/null
+++ b/src/gfx/fonts/full_width/4.png
Binary files differ
diff --git a/src/gfx/fonts/full_width/4.t3.png b/src/gfx/fonts/full_width/4.t3.png
deleted file mode 100644
index 6ccef5d..0000000
--- a/src/gfx/fonts/full_width/4.t3.png
+++ /dev/null
Binary files differ
diff --git a/src/gfx/fonts/symbols.png b/src/gfx/fonts/symbols.png
index 81afc3b..347001a 100644
--- a/src/gfx/fonts/symbols.png
+++ b/src/gfx/fonts/symbols.png
Binary files differ
diff --git a/src/gfx/overworld_map.t15.png b/src/gfx/overworld_map.png
index 5d8e819..5d8e819 100644
--- a/src/gfx/overworld_map.t15.png
+++ b/src/gfx/overworld_map.png
Binary files differ
diff --git a/src/gfx/tilesets/challengehall.t3.png b/src/gfx/tilesets/challengehall.png
index 9783378..9783378 100644
--- a/src/gfx/tilesets/challengehall.t3.png
+++ b/src/gfx/tilesets/challengehall.png
Binary files differ
diff --git a/src/gfx/tilesets/clubentrance.t15.png b/src/gfx/tilesets/clubentrance.png
index e641020..e641020 100644
--- a/src/gfx/tilesets/clubentrance.t15.png
+++ b/src/gfx/tilesets/clubentrance.png
Binary files differ
diff --git a/src/gfx/tilesets/clublobby.t8.png b/src/gfx/tilesets/clublobby.png
index 7a5a7be..7a5a7be 100644
--- a/src/gfx/tilesets/clublobby.t8.png
+++ b/src/gfx/tilesets/clublobby.png
Binary files differ
diff --git a/src/gfx/tilesets/fightingclub.t13.png b/src/gfx/tilesets/fightingclub.png
index 6747644..6747644 100644
--- a/src/gfx/tilesets/fightingclub.t13.png
+++ b/src/gfx/tilesets/fightingclub.png
Binary files differ
diff --git a/src/gfx/tilesets/fireclub.t9.png b/src/gfx/tilesets/fireclub.png
index 28638bd..28638bd 100644
--- a/src/gfx/tilesets/fireclub.t9.png
+++ b/src/gfx/tilesets/fireclub.png
Binary files differ
diff --git a/src/gfx/tilesets/grassclub.t9.png b/src/gfx/tilesets/grassclub.png
index 69496ad..69496ad 100644
--- a/src/gfx/tilesets/grassclub.t9.png
+++ b/src/gfx/tilesets/grassclub.png
Binary files differ
diff --git a/src/gfx/tilesets/hallofhonor.t7.png b/src/gfx/tilesets/hallofhonor.png
index 358630d..358630d 100644
--- a/src/gfx/tilesets/hallofhonor.t7.png
+++ b/src/gfx/tilesets/hallofhonor.png
Binary files differ
diff --git a/src/gfx/tilesets/ishihara.t3.png b/src/gfx/tilesets/ishihara.png
index 4761a69..4761a69 100644
--- a/src/gfx/tilesets/ishihara.t3.png
+++ b/src/gfx/tilesets/ishihara.png
Binary files differ
diff --git a/src/gfx/tilesets/lightningclub.t13.png b/src/gfx/tilesets/lightningclub.png
index bbe0572..bbe0572 100644
--- a/src/gfx/tilesets/lightningclub.t13.png
+++ b/src/gfx/tilesets/lightningclub.png
Binary files differ
diff --git a/src/gfx/tilesets/masonlaboratory.t9.png b/src/gfx/tilesets/masonlaboratory.png
index 4c5d90b..4c5d90b 100644
--- a/src/gfx/tilesets/masonlaboratory.t9.png
+++ b/src/gfx/tilesets/masonlaboratory.png
Binary files differ
diff --git a/src/gfx/tilesets/pokemondome.t1.png b/src/gfx/tilesets/pokemondome.png
index b4abf6c..b4abf6c 100644
--- a/src/gfx/tilesets/pokemondome.t1.png
+++ b/src/gfx/tilesets/pokemondome.png
Binary files differ
diff --git a/src/gfx/tilesets/pokemondomeentrance.t2.png b/src/gfx/tilesets/pokemondomeentrance.png
index c80ef7f..c80ef7f 100644
--- a/src/gfx/tilesets/pokemondomeentrance.t2.png
+++ b/src/gfx/tilesets/pokemondomeentrance.png
Binary files differ
diff --git a/src/gfx/tilesets/psychicclub.t6.png b/src/gfx/tilesets/psychicclub.png
index 6a3a00f..6a3a00f 100644
--- a/src/gfx/tilesets/psychicclub.t6.png
+++ b/src/gfx/tilesets/psychicclub.png
Binary files differ
diff --git a/src/gfx/tilesets/rockclub.t4.png b/src/gfx/tilesets/rockclub.png
index 59bf1bb..59bf1bb 100644
--- a/src/gfx/tilesets/rockclub.t4.png
+++ b/src/gfx/tilesets/rockclub.png
Binary files differ
diff --git a/src/gfx/tilesets/scienceclub.t14.png b/src/gfx/tilesets/scienceclub.png
index a736fe1..a736fe1 100644
--- a/src/gfx/tilesets/scienceclub.t14.png
+++ b/src/gfx/tilesets/scienceclub.png
Binary files differ
diff --git a/src/gfx/tilesets/waterclub.t15.png b/src/gfx/tilesets/waterclub.png
index 815e5ae..815e5ae 100644
--- a/src/gfx/tilesets/waterclub.t15.png
+++ b/src/gfx/tilesets/waterclub.png
Binary files differ
diff --git a/src/gfx/titlescreen/titlescreen1.t15.png b/src/gfx/titlescreen/titlescreen1.png
index 82b39e5..82b39e5 100644
--- a/src/gfx/titlescreen/titlescreen1.t15.png
+++ b/src/gfx/titlescreen/titlescreen1.png
Binary files differ
diff --git a/src/gfx/titlescreen/titlescreen2.t15.png b/src/gfx/titlescreen/titlescreen2.png
index f54b7c3..f54b7c3 100644
--- a/src/gfx/titlescreen/titlescreen2.t15.png
+++ b/src/gfx/titlescreen/titlescreen2.png
Binary files differ
diff --git a/src/gfx/titlescreen/titlescreen3.t12.png b/src/gfx/titlescreen/titlescreen3.png
index adddee4..adddee4 100644
--- a/src/gfx/titlescreen/titlescreen3.t12.png
+++ b/src/gfx/titlescreen/titlescreen3.png
Binary files differ
diff --git a/src/gfx/titlescreen/titlescreen4.t5.png b/src/gfx/titlescreen/titlescreen4.png
index 1d3cb92..1d3cb92 100644
--- a/src/gfx/titlescreen/titlescreen4.t5.png
+++ b/src/gfx/titlescreen/titlescreen4.png
Binary files differ
diff --git a/src/gfx/titlescreen/titlescreen5.t4.png b/src/gfx/titlescreen/titlescreen5.png
index 3cb6ab3..3cb6ab3 100644
--- a/src/gfx/titlescreen/titlescreen5.t4.png
+++ b/src/gfx/titlescreen/titlescreen5.png
Binary files differ
diff --git a/src/gfx/titlescreen/titlescreen6.t12.png b/src/gfx/titlescreen/titlescreen6.png
index 4f0dbe8..4f0dbe8 100644
--- a/src/gfx/titlescreen/titlescreen6.t12.png
+++ b/src/gfx/titlescreen/titlescreen6.png
Binary files differ
diff --git a/src/hram.asm b/src/hram.asm
index f22b172..9aa1504 100644
--- a/src/hram.asm
+++ b/src/hram.asm
@@ -77,12 +77,15 @@ hOppActionTableIndex:: ; ff9e
hTempCardIndex_ff9f:: ; ff9f
ds $1
+UNION
+
; multipurpose temp storage (card's deck index, selected move index, status condition...)
hTemp_ffa0:: ; ffa0
ds $1
; a PLAY_AREA_* constant (0: arena card, 1-5: bench card)
hTempPlayAreaLocation_ffa1:: ; ffa1
+
; parameter to be used by the AI's Pkmn Power effect
hAIPkmnPowerEffectParam:: ; ffa1
ds $1
@@ -99,16 +102,24 @@ NEXTU
; the deck index (0-59) of the energy card to transfer
; and the Play Area location (PLAY_AREA_*) of card to receive that energy card.
hAIEnergyTransEnergyCard:: ; ffa2
+
+; PLAY_AREA_* of target selected for some Pkmn Powers,
+; (e.g. Curse, Damage Swap) and for trainer card effect.
+hPlayAreaEffectTarget:: ; ffa2
ds $1
+
hAIEnergyTransPlayAreaLocation:: ; ffa3
ds $1
+ENDU
+
NEXTU
-; Play Area location (PLAY_AREA_*) of card
-; chosen by AI to use Heal Pkmn Power on.
-hAIHealCard:: ; ffa2
- ds $1
+; list of various items, such as
+; cards selected for various effects,
+; Play Area locations, etc.
+hTempList:: ; ffa0
+ ds $8
ENDU
@@ -153,7 +164,11 @@ hffb0:: ; ffb0
hCurMenuItem:: ; ffb1
ds $1
- ds $3
+; stores the item number in the selection menu of various effects
+hCurSelectionItem:: ; ffb2
+ ds $1
+
+ ds $2
hffb5:: ; ffb5
ds $1
diff --git a/src/layout.link b/src/layout.link
new file mode 100644
index 0000000..49511eb
--- /dev/null
+++ b/src/layout.link
@@ -0,0 +1,180 @@
+ROM0
+ org $0000
+ "rst00"
+ org $0008
+ "rst08"
+ org $0010
+ "rst10"
+ org $0018
+ "rst18"
+ org $0020
+ "rst20"
+ org $0028
+ "rst28"
+ org $0030
+ "rst30"
+ org $0038
+ "rst38"
+ org $0040
+ "vblank"
+ org $0048
+ "lcdc"
+ org $0050
+ "timer"
+ org $0058
+ "serial"
+ org $0060
+ "joypad"
+ org $0100
+ "romheader"
+ org $0150
+ "start"
+ROMX $01
+ "Bank 1"
+ROMX $02
+ "Bank 2"
+ROMX $03
+ "Bank 3"
+ROMX $04
+ "Bank 4"
+ROMX $06
+ "Bank 6"
+ROMX $07
+ "Bank 7"
+ "Booster Packs"
+ROMX $08
+ "Bank 8"
+ROMX $09
+ "Empty Bank 9"
+ROMX $0a
+ "Empty Bank A"
+ROMX $0b
+ "Effect Functions"
+ROMX $0c
+ "Decks"
+ "Cards"
+ROMX $0d
+ "Text 1"
+ROMX $0e
+ "Text 2"
+ROMX $0f
+ "Text 3"
+ROMX $10
+ "Text 4"
+ROMX $11
+ "Text 5"
+ROMX $12
+ "Text 6"
+ROMX $13
+ "Text 7"
+ROMX $14
+ "Text 8"
+ROMX $15
+ "Text 9"
+ROMX $16
+ "Text 10"
+ROMX $17
+ "Text 11"
+ROMX $18
+ "Text 12"
+ROMX $19
+ "Text 13"
+ROMX $1a
+ "Empty Bank 1A"
+ROMX $1b
+ "Empty Bank 1B"
+ROMX $1c
+ "Bank 1C"
+ROMX $1d
+ "Gfx 1"
+ROMX $1e
+ "Gfx 2"
+ROMX $1f
+ "Empty Bank 1F"
+ROMX $20
+ "Bank 20"
+ROMX $21
+ "Gfx 3"
+ROMX $22
+ "Gfx 4"
+ROMX $23
+ "Gfx 5"
+ROMX $24
+ "Gfx 6"
+ROMX $25
+ "Gfx 7"
+ROMX $26
+ "Gfx 8"
+ROMX $27
+ "Gfx 9"
+ROMX $28
+ "Gfx 10"
+ROMX $29
+ "Gfx 11"
+ROMX $2a
+ "Gfx 12"
+ROMX $2b
+ "Gfx 13"
+ROMX $2c
+ "Gfx 14"
+ROMX $2d
+ "Gfx 15"
+ROMX $2e
+ "Gfx 16"
+ROMX $2f
+ "Empty Bank 2F"
+ROMX $30
+ "Empty Bank 30"
+ROMX $31
+ "Card Gfx 1"
+ROMX $32
+ "Card Gfx 2"
+ROMX $33
+ "Card Gfx 3"
+ROMX $34
+ "Card Gfx 4"
+ROMX $35
+ "Card Gfx 5"
+ROMX $36
+ "Card Gfx 6"
+ROMX $37
+ "Card Gfx 7"
+ROMX $38
+ "Card Gfx 8"
+ROMX $39
+ "Card Gfx 9"
+ROMX $3a
+ "Card Gfx 10"
+ROMX $3b
+ "Card Gfx 11"
+ROMX $3c
+ "Empty Bank 3C"
+ROMX $3d
+ "Audio 1"
+ROMX $3e
+ "Audio 2"
+ROMX $3f
+ "Audio 3"
+WRAM0
+ "WRAM0"
+ "WRAM0 Duels 1"
+ "WRAM0 Text Engine"
+ "WRAM0 1"
+ "WRAM0 Serial Transfer"
+ "WRAM0 Duels 2"
+ "WRAM0 2"
+WRAMX 1
+ "WRAM1"
+ "WRAM1 Audio"
+VRAM $00
+ "VRAM0"
+VRAM $01
+ "VRAM1"
+SRAM $00
+ "SRAM0"
+SRAM $01
+ "SRAM1"
+SRAM $02
+ "SRAM2"
+SRAM $03
+ "SRAM3"
diff --git a/src/macros/data.asm b/src/macros/data.asm
index d08ec4e..23de208 100644
--- a/src/macros/data.asm
+++ b/src/macros/data.asm
@@ -20,7 +20,7 @@ dx: MACRO
x = 8 * ((\1) - 1)
rept \1
db ((\2) >> x) & $ff
-x = x + -8
+x = x - 8
endr
ENDM
diff --git a/src/macros/scripts.asm b/src/macros/scripts.asm
index 1201408..9825501 100644..100755
--- a/src/macros/scripts.asm
+++ b/src/macros/scripts.asm
@@ -5,110 +5,110 @@ run_command: MACRO
ENDM
const_def
- const ScriptCommand_EndScriptLoop1_index ; $00
- const ScriptCommand_CloseAdvancedTextBox_index ; $01
- const ScriptCommand_PrintTextString_index ; $02
- const Func_ccdc_index ; $03
- const ScriptCommand_AskQuestionJump_index ; $04
- const ScriptCommand_StartBattle_index ; $05
- const ScriptCommand_PrintVariableText_index ; $06
- const Func_cda8_index ; $07
- const ScriptCommand_PrintTextQuitFully_index ; $08
- const Func_cdcb_index ; $09
- const ScriptCommand_MoveActiveNPCByDirection_index ; $0a
- const ScriptCommand_CloseTextBox_index ; $0b
- const ScriptCommand_GiveBoosterPacks_index ; $0c
- const ScriptCommand_JumpIfCardOwned_index ; $0d
- const ScriptCommand_JumpIfCardInCollection_index ; $0e
- const ScriptCommand_GiveCard_index ; $0f
- const ScriptCommand_TakeCard_index ; $10
- const Func_cf53_index ; $11
- const Func_cf7b_index ; $12
- const ScriptCommand_JumpIfEnoughCardsOwned_index ; $13
- const ScriptCommand_JumpBasedOnFightingClubPupilStatus_index ; $14
- const Func_cfc6_index ; $15
- const Func_cfd4_index ; $16
- const Func_d00b_index ; $17
- const Func_d025_index ; $18
- const Func_d032_index ; $19
- const Func_d03f_index ; $1a
- const ScriptCommand_Jump_index ; $1b
- const ScriptCommand_TryGiveMedalPCPacks_index ; $1c
- const ScriptCommand_SetPlayerDirection_index ; $1d
- const ScriptCommand_MovePlayer_index ; $1e
- const ScriptCommand_ShowCardReceivedScreen_index ; $1f
- const ScriptCommand_SetDialogNPC_index ; $20
- const ScriptCommand_SetNextNPCAndScript_index ; $21
- const Func_d095_index ; $22
- const Func_d0be_index ; $23
- const ScriptCommand_DoFrames_index ; $24
- const Func_d0d9_index ; $25
- const ScriptCommand_JumpIfPlayerCoordsMatch_index ; $26
- const ScriptCommand_MoveActiveNPC_index ; $27
- const ScriptCommand_GiveOneOfEachTrainerBooster_index ; $28
- const Func_d103_index ; $29
- const Func_d125_index ; $2a
- const Func_d135_index ; $2b
- const Func_d16b_index ; $2c
- const Func_cd4f_index ; $2d
- const Func_cd94_index ; $2e
- const ScriptCommand_MoveWramNPC_index ; $2f
- const Func_cdd8_index ; $30
- const Func_cdf5_index ; $31
- const Func_d195_index ; $32
- const Func_d1ad_index ; $33
- const Func_d1b3_index ; $34
- const ScriptCommand_QuitScriptFully_index ; $35
- const Func_d244_index ; $36
- const Func_d24c_index ; $37
- const ScriptCommand_OpenDeckMachine_index ; $38
- const Func_d271_index ; $39
- const ScriptCommand_EnterMap_index ; $3a
- const ScriptCommand_MoveArbitraryNPC_index ; $3b
- const Func_d209_index ; $3c
- const Func_d38f_index ; $3d
- const Func_d396_index ; $3e
- const Func_cd76_index ; $3f
- const Func_d39d_index ; $40
- const Func_d3b9_index ; $41
- const ScriptCommand_TryGivePCPack_index ; $42
- const ScriptCommand_nop_index ; $43
- const Func_d3d4_index ; $44
- const Func_d3e0_index ; $45
- const Func_d3fe_index ; $46
- const Func_d408_index ; $47
- const Func_d40f_index ; $48
- const ScriptCommand_PlaySFX_index ; $49
- const ScriptCommand_PauseSong_index ; $4a
- const ScriptCommand_ResumeSong_index ; $4b
- const Func_d41d_index ; $4c
- const ScriptCommand_WaitForSongToFinish_index ; $4d
- const Func_d435_index ; $4e
- const ScriptCommand_AskQuestionJumpDefaultYes_index ; $4f
- const Func_d2f6_index ; $50
- const Func_d317_index ; $51
- const Func_d43d_index ; $52
- const ScriptCommand_EndScriptLoop2_index ; $53
- const ScriptCommand_EndScriptLoop3_index ; $54
- const ScriptCommand_EndScriptLoop4_index ; $55
- const ScriptCommand_EndScriptLoop5_index ; $56
- const ScriptCommand_EndScriptLoop6_index ; $57
- const ScriptCommand_SetFlagValue_index ; $58
- const ScriptCommand_JumpIfFlagZero1_index ; $59
- const ScriptCommand_JumpIfFlagNonzero1_index ; $5a
- const ScriptCommand_JumpIfFlagEqual_index ; $5b
- const ScriptCommand_JumpIfFlagNotEqual_index ; $5c
- const ScriptCommand_JumpIfFlagNotLessThan_index ; $5d
- const ScriptCommand_JumpIfFlagLessThan_index ; $5e
- const ScriptCommand_MaxOutFlagValue_index ; $5f
- const ScriptCommand_ZeroOutFlagValue_index ; $60
- const ScriptCommand_JumpIfFlagNonzero2_index ; $61
- const ScriptCommand_JumpIfFlagZero2_index ; $62
- const ScriptCommand_IncrementFlagValue_index ; $63
- const ScriptCommand_EndScriptLoop7_index ; $64
- const ScriptCommand_EndScriptLoop8_index ; $65
- const ScriptCommand_EndScriptLoop9_index ; $66
- const ScriptCommand_EndScriptLoop10_index ; $67
+ const ScriptCommand_EndScriptLoop1_index ; $00
+ const ScriptCommand_CloseAdvancedTextBox_index ; $01
+ const ScriptCommand_PrintTextString_index ; $02
+ const Func_ccdc_index ; $03
+ const ScriptCommand_AskQuestionJump_index ; $04
+ const ScriptCommand_StartBattle_index ; $05
+ const ScriptCommand_PrintVariableText_index ; $06
+ const Func_cda8_index ; $07
+ const ScriptCommand_PrintTextQuitFully_index ; $08
+ const Func_cdcb_index ; $09
+ const ScriptCommand_MoveActiveNPCByDirection_index ; $0a
+ const ScriptCommand_CloseTextBox_index ; $0b
+ const ScriptCommand_GiveBoosterPacks_index ; $0c
+ const ScriptCommand_JumpIfCardOwned_index ; $0d
+ const ScriptCommand_JumpIfCardInCollection_index ; $0e
+ const ScriptCommand_GiveCard_index ; $0f
+ const ScriptCommand_TakeCard_index ; $10
+ const Func_cf53_index ; $11
+ const Func_cf7b_index ; $12
+ const ScriptCommand_JumpIfEnoughCardsOwned_index ; $13
+ const ScriptCommand_JumpBasedOnFightingClubPupilStatus_index ; $14
+ const Func_cfc6_index ; $15
+ const Func_cfd4_index ; $16
+ const Func_d00b_index ; $17
+ const Func_d025_index ; $18
+ const Func_d032_index ; $19
+ const Func_d03f_index ; $1a
+ const ScriptCommand_Jump_index ; $1b
+ const ScriptCommand_TryGiveMedalPCPacks_index ; $1c
+ const ScriptCommand_SetPlayerDirection_index ; $1d
+ const ScriptCommand_MovePlayer_index ; $1e
+ const ScriptCommand_ShowCardReceivedScreen_index ; $1f
+ const ScriptCommand_SetDialogNPC_index ; $20
+ const ScriptCommand_SetNextNPCAndScript_index ; $21
+ const Func_d095_index ; $22
+ const Func_d0be_index ; $23
+ const ScriptCommand_DoFrames_index ; $24
+ const Func_d0d9_index ; $25
+ const ScriptCommand_JumpIfPlayerCoordsMatch_index ; $26
+ const ScriptCommand_MoveActiveNPC_index ; $27
+ const ScriptCommand_GiveOneOfEachTrainerBooster_index ; $28
+ const Func_d103_index ; $29
+ const Func_d125_index ; $2a
+ const Func_d135_index ; $2b
+ const Func_d16b_index ; $2c
+ const Func_cd4f_index ; $2d
+ const Func_cd94_index ; $2e
+ const ScriptCommand_MoveWramNPC_index ; $2f
+ const Func_cdd8_index ; $30
+ const Func_cdf5_index ; $31
+ const Func_d195_index ; $32
+ const Func_d1ad_index ; $33
+ const Func_d1b3_index ; $34
+ const ScriptCommand_QuitScriptFully_index ; $35
+ const Func_d244_index ; $36
+ const ScriptCommand_ChooseDeckToDuelAgainstMultichoice_index ; $37
+ const ScriptCommand_OpenDeckMachine_index ; $38
+ const ScriptCommand_ChooseStarterDeckMultichoice_index ; $39
+ const ScriptCommand_EnterMap_index ; $3a
+ const ScriptCommand_MoveArbitraryNPC_index ; $3b
+ const Func_d209_index ; $3c
+ const Func_d38f_index ; $3d
+ const Func_d396_index ; $3e
+ const Func_cd76_index ; $3f
+ const Func_d39d_index ; $40
+ const Func_d3b9_index ; $41
+ const ScriptCommand_TryGivePCPack_index ; $42
+ const ScriptCommand_nop_index ; $43
+ const Func_d3d4_index ; $44
+ const Func_d3e0_index ; $45
+ const Func_d3fe_index ; $46
+ const Func_d408_index ; $47
+ const Func_d40f_index ; $48
+ const ScriptCommand_PlaySFX_index ; $49
+ const ScriptCommand_PauseSong_index ; $4a
+ const ScriptCommand_ResumeSong_index ; $4b
+ const Func_d41d_index ; $4c
+ const ScriptCommand_WaitForSongToFinish_index ; $4d
+ const Func_d435_index ; $4e
+ const ScriptCommand_AskQuestionJumpDefaultYes_index ; $4f
+ const ScriptCommand_ShowSamNormalMultichoice_index ; $50
+ const ScriptCommand_ShowSamTutorialMultichoice_index ; $51
+ const Func_d43d_index ; $52
+ const ScriptCommand_EndScriptLoop2_index ; $53
+ const ScriptCommand_EndScriptLoop3_index ; $54
+ const ScriptCommand_EndScriptLoop4_index ; $55
+ const ScriptCommand_EndScriptLoop5_index ; $56
+ const ScriptCommand_EndScriptLoop6_index ; $57
+ const ScriptCommand_SetFlagValue_index ; $58
+ const ScriptCommand_JumpIfFlagZero1_index ; $59
+ const ScriptCommand_JumpIfFlagNonzero1_index ; $5a
+ const ScriptCommand_JumpIfFlagEqual_index ; $5b
+ const ScriptCommand_JumpIfFlagNotEqual_index ; $5c
+ const ScriptCommand_JumpIfFlagNotLessThan_index ; $5d
+ const ScriptCommand_JumpIfFlagLessThan_index ; $5e
+ const ScriptCommand_MaxOutFlagValue_index ; $5f
+ const ScriptCommand_ZeroOutFlagValue_index ; $60
+ const ScriptCommand_JumpIfFlagNonzero2_index ; $61
+ const ScriptCommand_JumpIfFlagZero2_index ; $62
+ const ScriptCommand_IncrementFlagValue_index ; $63
+ const ScriptCommand_EndScriptLoop7_index ; $64
+ const ScriptCommand_EndScriptLoop8_index ; $65
+ const ScriptCommand_EndScriptLoop9_index ; $66
+ const ScriptCommand_EndScriptLoop10_index ; $67
; Script Macros
end_script_loop: MACRO
@@ -248,11 +248,16 @@ quit_script_fully: MACRO
run_command ScriptCommand_QuitScriptFully
ENDM
+choose_deck_to_duel_against_multichoice: MACRO
+ run_command ScriptCommand_ChooseDeckToDuelAgainstMultichoice
+ENDM
open_deck_machine: MACRO
run_command ScriptCommand_OpenDeckMachine
db \1
ENDM
-
+choose_starter_deck_multichoice: MACRO
+ run_command ScriptCommand_ChooseStarterDeckMultichoice
+ENDM
enter_map: MACRO
run_command ScriptCommand_EnterMap
db \1
@@ -299,6 +304,12 @@ ELSE
ENDC
dw \2
ENDM
+show_sam_normal_multichoice: MACRO
+ run_command ScriptCommand_ShowSamNormalMultichoice
+ENDM
+show_sam_tutorial_multichoice: MACRO
+ run_command ScriptCommand_ShowSamTutorialMultichoice
+ENDM
end_script_loop_2: MACRO
run_command ScriptCommand_EndScriptLoop2
diff --git a/src/macros/text.asm b/src/macros/text.asm
index 2b29afe..bd33833 100644
--- a/src/macros/text.asm
+++ b/src/macros/text.asm
@@ -1,6 +1,6 @@
-text EQUS "db TX_HALFWIDTH, "
-line EQUS "db TX_LINE, "
-done EQUS "db TX_END"
+text EQUS "db TX_HALFWIDTH, "
+line EQUS "db TX_LINE, "
+done EQUS "db TX_END"
half2full EQUS "db TX_HALF2FULL"
diff --git a/src/rgbdscheck.asm b/src/rgbdscheck.asm
new file mode 100644
index 0000000..622023d
--- /dev/null
+++ b/src/rgbdscheck.asm
@@ -0,0 +1,12 @@
+; poketcg requires rgbds 0.4.1 or newer.
+MAJOR EQU 0
+MINOR EQU 4
+PATCH EQU 1
+
+IF !DEF(__RGBDS_MAJOR__) || !DEF(__RGBDS_MINOR__) || !DEF(__RGBDS_PATCH__)
+ fail "poketcg requires rgbds {MAJOR}.{MINOR}.{PATCH} or newer."
+ELIF (__RGBDS_MAJOR__ < MAJOR) || \
+ (__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ < MINOR) || \
+ (__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ == MINOR && __RGBDS_PATCH__ < PATCH)
+ fail "poketcg requires rgbds {MAJOR}.{MINOR}.{PATCH} or newer."
+ENDC
diff --git a/src/text/text1.asm b/src/text/text1.asm
index 07d7a7a..93c389f 100644
--- a/src/text/text1.asm
+++ b/src/text/text1.asm
@@ -290,11 +290,11 @@ DuelistPlacedACardText: ; 367f9 (d:67f9)
line "a <RAMTEXT>."
done
-Text0045: ; 36808 (d:6808)
+UnableToSelectText: ; 36808 (d:6808)
text "Unable to select."
done
-Text0046: ; 3681b (d:681b)
+ColorListText: ; 3681b (d:681b)
text "Grass"
line "Fire"
line "Water"
@@ -303,31 +303,31 @@ Text0046: ; 3681b (d:681b)
line "Psychic"
done
-Text0047: ; 36848 (d:6848)
+GrassSymbolText: ; 36848 (d:6848)
textfw0 "<GRASS>"
done
-Text0048: ; 3684b (d:684b)
+FireSymbolText: ; 3684b (d:684b)
textfw0 "<FIRE>"
done
-Text0049: ; 3684e (d:684e)
+WaterSymbolText: ; 3684e (d:684e)
textfw0 "<WATER>"
done
-Text004a: ; 36851 (d:6851)
+LightningSymbolText: ; 36851 (d:6851)
textfw0 "<LIGHTNING>"
done
-Text004b: ; 36854 (d:6854)
+FightingSymbolText: ; 36854 (d:6854)
textfw0 "<FIGHTING>"
done
-Text004c: ; 36857 (d:6857)
+PsychicSymbolText: ; 36857 (d:6857)
textfw0 "<PSYCHIC>"
done
-Text004d: ; 3685a (d:685a)
+BenchText: ; 3685a (d:685a)
text "Bench"
done
@@ -372,7 +372,7 @@ ChooseTheCardYouWishToExamineText: ; 3697c (d:697c)
line "you wish to examine."
done
-TransmitingDataText: ; 369a2 (d:69a2)
+TransmittingDataText: ; 369a2 (d:69a2)
text "Transmitting data..."
done
@@ -821,17 +821,17 @@ NoEnergyAttachedToOpponentsActiveText: ; 3742a (d:742a)
line "the opponent's Active Pokémon."
done
-Text00af: ; 3746a (d:746a)
+ThereAreNoEnergyCardsInDiscardPileText: ; 3746a (d:746a)
text "There are no Energy cards"
line "in the the Discard Pile."
done
-Text00b0: ; 3749e (d:749e)
+ThereAreNoBasicEnergyCardsInDiscardPileText: ; 3749e (d:749e)
text "There are no Basic Energy cards"
line "in the Discard Pile."
done
-Text00b1: ; 374d4 (d:74d4)
+NoCardsLeftInTheDeckText: ; 374d4 (d:74d4)
text "There are no cards left in the Deck."
done
@@ -849,50 +849,50 @@ CantEvolvePokemonInSameTurnItsPlacedText: ; 37546 (d:7546)
line "in the same turn it was placed."
done
-Text00b5: ; 37583 (d:7583)
+NotAffectedByPoisonSleepParalysisOrConfusionText: ; 37583 (d:7583)
text "Not affected by Poison,"
line "Sleep, Paralysis, or Confusion."
done
-Text00b6: ; 375bc (d:75bc)
+NotEnoughCardsInHandText: ; 375bc (d:75bc)
text "Not enough cards in Hand."
done
-Text00b7: ; 375d7 (d:75d7)
+EffectNoPokemonOnTheBenchText: ; 375d7 (d:75d7)
text "No Pokémon on the Bench."
done
-Text00b8: ; 375f1 (d:75f1)
+ThereAreNoPokemonInDiscardPileText: ; 375f1 (d:75f1)
text "There are no Pokémon"
line "in the Discard Pile."
done
-Text00b9: ; 3761c (d:761c)
+ConditionsForEvolvingToStage2NotFulfilledText: ; 3761c (d:761c)
text "Conditions for evolving to"
line "Stage 2 not fulfilled."
done
-Text00ba: ; 3764f (d:764f)
+ThereAreNoCardsInHandThatYouCanChangeText: ; 3764f (d:764f)
text "There are no cards in Hand"
line "that you can change."
done
-Text00bb: ; 37680 (d:7680)
+ThereAreNoCardsInTheDiscardPileText: ; 37680 (d:7680)
text "There are no cards in the"
line "Discard Pile."
done
-Text00bc: ; 376a9 (d:76a9)
+ThereAreNoStage1PokemonText: ; 376a9 (d:76a9)
text "There are no Stage 1 Pokémon"
line "in the Play Area."
done
-Text00bd: ; 376d9 (d:76d9)
+NoEnergyCardsAttachedToPokemonInYourPlayAreaText: ; 376d9 (d:76d9)
text "No Energy cards are attached to"
line "Pokémon in your Play Area."
done
-Text00be: ; 37715 (d:7715)
+NoEnergyCardsAttachedToPokemonInOppPlayAreaText: ; 37715 (d:7715)
text "No Energy cards attached to Pokémon"
line "in your opponent's Play Area."
done
@@ -906,46 +906,46 @@ NotEnoughEnergyCardsText: ; 37781 (d:7781)
text "Not enough Energy cards."
done
-Text00c1: ; 3779b (d:779b)
+NotEnoughFireEnergyText: ; 3779b (d:779b)
text "Not enough Fire Energy."
done
-Text00c2: ; 377b4 (d:77b4)
+NotEnoughPsychicEnergyText: ; 377b4 (d:77b4)
text "Not enough Psychic Energy."
done
-Text00c3: ; 377d0 (d:77d0)
+NotEnoughWaterEnergyText: ; 377d0 (d:77d0)
text "Not enough Water Energy."
done
-Text00c4: ; 377ea (d:77ea)
+ThereAreNoTrainerCardsInDiscardPileText: ; 377ea (d:77ea)
text "There are no Trainer Cards"
line "in the Discard Pile."
done
-Text00c5: ; 3781b (d:781b)
+NoAttackMayBeChoosenText: ; 3781b (d:781b)
text "No Attacks may be choosen."
done
-Text00c6: ; 37837 (d:7837)
+YouDidNotReceiveAnAttackToMirrorMoveText: ; 37837 (d:7837)
text "You did not receive an Attack"
line "to Mirror Move."
done
-Text00c7: ; 37866 (d:7866)
+ThisAttackCannotBeUsedTwiceText: ; 37866 (d:7866)
text "This attack cannot"
line "be used twice."
done
-Text00c8: ; 37889 (d:7889)
+NoWeaknessText: ; 37889 (d:7889)
text "No Weakness."
done
-Text00c9: ; 37897 (d:7897)
+NoResistanceText: ; 37897 (d:7897)
text "No Resistance."
done
-Text00ca: ; 378a7 (d:78a7)
+OnlyOncePerTurnText: ; 378a7 (d:78a7)
text "Only once per turn."
done
@@ -954,38 +954,38 @@ CannotUseDueToStatusText: ; 378bc (d:78bc)
line "or Confusion."
done
-Text00cc: ; 378ef (d:78ef)
+CannotBeUsedInTurnWhichWasPlayedText: ; 378ef (d:78ef)
text "Cannot be used in the turn in"
line "which it was played."
done
-Text00cd: ; 37923 (d:7923)
+ThereIsNoEnergyCardAttachedText: ; 37923 (d:7923)
text "There is no Energy card attached."
done
-Text00ce: ; 37946 (d:7946)
+NoGrassEnergyText: ; 37946 (d:7946)
text "No Grass Energy."
done
-Text00cf: ; 37958 (d:7958)
+CannotUseSinceTheresOnly1PkmnText: ; 37958 (d:7958)
text "Cannot use since there's only"
line "1 Pokémon."
done
-Text00d0: ; 37982 (d:7982)
+CannotUseBecauseItWillBeKnockedOutText: ; 37982 (d:7982)
text "Cannot use because"
line "it will be Knocked Out."
done
-Text00d1: ; 379ae (d:79ae)
+CanOnlyBeUsedOnTheBenchText: ; 379ae (d:79ae)
text "Can only be used on the Bench."
done
-Text00d2: ; 379ce (d:79ce)
+ThereAreNoPokemonOnBenchText: ; 379ce (d:79ce)
text "There are no Pokémon on the Bench."
done
-Text00d3: ; 379f2 (d:79f2)
+OpponentIsNotAsleepText: ; 379f2 (d:79f2)
text "Opponent is not Asleep"
done
@@ -1073,22 +1073,22 @@ VenomPowderCheckText: ; 37cdf (d:7cdf)
line "opponent is Poisoned & Confused."
done
-Text00e5: ; 37d1f (d:7d1f)
+IfTailsYourPokemonBecomesConfusedText: ; 37d1f (d:7d1f)
text "If Tails, your Pokémon"
line "becomes Confused."
done
-Text00e6: ; 37d4a (d:7d4a)
+DamageCheckIfTailsNoDamageText: ; 37d4a (d:7d4a)
text "Damage check!"
line "If Tails, no damage!!!"
done
-Text00e7: ; 37d70 (d:7d70)
+IfHeadsDraw1CardFromDeckText: ; 37d70 (d:7d70)
text "If Heads,"
line "Draw 1 card from Deck!"
done
-Text00e8: ; 37d92 (d:7d92)
+FlipUntilFailAppears10DamageForEachHeadsText: ; 37d92 (d:7d92)
text "Flip until Tails appears."
line "10 damage for each Heads!!!"
done
@@ -1098,7 +1098,7 @@ IfHeadPlus10IfTails10ToYourselfText: ; 37dc9 (d:7dc9)
line "If Tails, +10 damage to yourself!"
done
-Text00ea: ; 37e03 (d:7e03)
+DamageToOppBenchIfHeadsDamageToYoursIfTailsText: ; 37e03 (d:7e03)
text "10 damage to opponent's Bench if"
line "Heads, damage to yours if Tails."
done
@@ -1108,17 +1108,17 @@ IfHeadsChangeOpponentsActivePokemonText: ; 37e46 (d:7e46)
line "Active Pokémon."
done
-Text00ec: ; 37e73 (d:7e73)
+IfHeadsHealIsSuccessfulText: ; 37e73 (d:7e73)
text "If Heads,"
line "Heal is successful."
done
-Text00ed: ; 37e92 (d:7e92)
+IfTailsDamageToYourselfTooText: ; 37e92 (d:7e92)
text "If Tails, <RAMNUM> damage"
line "to yourself, too."
done
-Text00ee: ; 37eb8 (d:7eb8)
+SuccessCheckIfHeadsAttackIsSuccessfulText: ; 37eb8 (d:7eb8)
text "Success check!!!"
line "If Heads, Attack is successful!"
done
@@ -1128,7 +1128,7 @@ TrainerCardSuccessCheckText: ; 37eea (d:7eea)
line "If Heads, you're successful!"
done
-Text00f0: ; 37f24 (d:7f24)
+CardCheckIfHeads8CardsIfTails1CardText: ; 37f24 (d:7f24)
text "Card check!"
line "If Heads, 8 cards! If Tails, 1 card!"
done
diff --git a/src/text/text10.asm b/src/text/text10.asm
index 057820f..49fb302 100644
--- a/src/text/text10.asm
+++ b/src/text/text10.asm
@@ -85,7 +85,7 @@ NidoranFName: ; 582e5 (16:42e5)
text "Nidoran♀"
done
-FurySweepesName: ; 582ef (16:42ef)
+FurySwipesName: ; 582ef (16:42ef)
text "Fury Swipes"
done
diff --git a/src/text/text2.asm b/src/text/text2.asm
index 97ecf45..43a8ba5 100644
--- a/src/text/text2.asm
+++ b/src/text/text2.asm
@@ -27,12 +27,12 @@ PoisonedIfHeadsConfusedIfTailsText: ; 380ed (e:40ed)
line "and Confused if Tails."
done
-Text00fb: ; 38124 (e:4124)
+IfHeadsDoNotReceiveDamageOrEffectText: ; 38124 (e:4124)
text "If Heads, do not receive damage"
line "or effect of opponent's next Attack!"
done
-Text00fc: ; 3816a (e:416a)
+IfHeadsOpponentCannotAttackText: ; 3816a (e:416a)
text "If Heads, opponent cannot Attack"
line "next turn!"
done
@@ -116,7 +116,7 @@ NoDamageOrEffectDueToTransparencyText: ; 384d8 (e:44d8)
line "due to the effects of Transparency"
done
-Text010d: ; 3851f (e:451f)
+MetamorphsToText: ; 3851f (e:451f)
text "<RAMTEXT>"
line "metamorphs to <RAMTEXT>."
done
@@ -136,40 +136,40 @@ DuelistIsSelectingPokemonToPlaceInArenaText: ; 3859e (e:459e)
line "to place in the Arena."
done
-Text0111: ; 385cf (e:45cf)
+ChooseWeaknessYouWishToChangeText: ; 385cf (e:45cf)
text "Choose the Weakness you wish"
line "to change with Conversion 1."
done
-Text0112: ; 3860a (e:460a)
+ChooseResistanceYouWishToChangeText: ; 3860a (e:460a)
text "Choose the Resistance you wish"
line "to change with Conversion 2."
done
-Text0113: ; 38647 (e:4647)
+ChoosePokemonWishToColorChangeText: ; 38647 (e:4647)
text "Choose the Pokémon whose color you"
line "wish to change with Color change."
done
-Text0114: ; 3868d (e:468d)
+ChangedTheWeaknessOfPokemonToColorText: ; 3868d (e:468d)
text "Changed the Weakness of"
line ""
text "<RAMTEXT> to <RAMTEXT>."
done
-Text0115: ; 386af (e:46af)
+ChangedTheResistanceOfPokemonToColorText: ; 386af (e:46af)
text "Changed the Resistance of"
line ""
text "<RAMTEXT> to <RAMTEXT>."
done
-Text0116: ; 386d3 (e:46d3)
+ChangedTheColorOfText: ; 386d3 (e:46d3)
text "Changed the color of"
line ""
text "<RAMTEXT> to <RAMTEXT>."
done
-Text0117: ; 386f2 (e:46f2)
+Draw1CardFromTheDeckText: ; 386f2 (e:46f2)
text "Draw 1 card from the Deck."
done
@@ -182,22 +182,22 @@ CannotDrawCardBecauseNoCardsInDeckText: ; 3872d (e:472d)
line "there are no cards in the Deck."
done
-Text011a: ; 38769 (e:4769)
+ChoosePkmnInTheBenchToGiveDamageText: ; 38769 (e:4769)
text "Choose a Pokémon on the Bench"
line "to give damage to."
done
-Text011b: ; 3879b (e:479b)
+ChooseUpTo3PkmnOnBenchToGiveDamageText: ; 3879b (e:479b)
text "Choose up to 3 Pokémon on the"
line "Bench to give damage to."
done
-Text011c: ; 387d3 (e:47d3)
+Choose1BasicEnergyCardFromDeckText: ; 387d3 (e:47d3)
text "Choose 1 Basic Energy card"
line "from the Deck."
done
-Text011d: ; 387fe (e:47fe)
+ChoosePokemonToAttachEnergyCardText: ; 387fe (e:47fe)
text "Choose a Pokémon to attach"
line "the Energy card to."
done
@@ -207,75 +207,75 @@ Text011e: ; 3882e (e:482e)
line "1 Fire Energy card."
done
-Text011f: ; 38856 (e:4856)
+ChooseAndDiscard2FireEnergyCardsText: ; 38856 (e:4856)
text "Choose and Discard"
line "2 Fire Energy cards."
done
-Text0120: ; 3887f (e:487f)
+DiscardOppDeckAsManyFireEnergyCardsText: ; 3887f (e:487f)
text "Discard from opponent's Deck as many"
line "Fire Energy cards as were discarded."
done
-Text0121: ; 388ca (e:48ca)
+ChooseAndDiscard2EnergyCardsText: ; 388ca (e:48ca)
text "Choose and Discard"
line "2 Energy cards."
done
-Text0122: ; 388ee (e:48ee)
+ChooseAKrabbyFromDeckText: ; 388ee (e:48ee)
text "Choose a Krabby"
line "from the Deck."
done
-Text0123: ; 3890e (e:490e)
+ChooseDiscardEnergyCardFromOpponentText: ; 3890e (e:490e)
text "Choose and Discard an Energy card"
line "from the opponent's Active Pokémon."
done
-Text0124: ; 38955 (e:4955)
+ChooseAttackOpponentWillNotBeAbleToUseText: ; 38955 (e:4955)
text "Choose the Attack the opponent will"
line "not be able to use on the next turn."
done
-Text0125: ; 3899f (e:499f)
+ChooseBasicFightingPokemonFromDeckText: ; 3899f (e:499f)
text "Choose a Basic Fighting Pokémon"
line "from the Deck."
done
-Text0126: ; 389cf (e:49cf)
+ChooseAnOddishFromDeckText: ; 389cf (e:49cf)
text "Choose an Oddish"
line "from the Deck."
done
-Text0127: ; 389f0 (e:49f0)
+ChooseAnOddishText: ; 389f0 (e:49f0)
text "Choose an Oddish"
done
-Text0128: ; 38a02 (e:4a02)
+ChooseAKrabbyText: ; 38a02 (e:4a02)
text "Choose a Krabby."
done
-Text0129: ; 38a14 (e:4a14)
+ChooseBasicEnergyCardText: ; 38a14 (e:4a14)
text "Choose a Basic"
line "Energy card."
done
-Text012a: ; 38a31 (e:4a31)
+ChooseNidoranFromDeckText: ; 38a31 (e:4a31)
text "Choose a Nidoran♀ or a"
line "Nidoran♂ from the Deck."
done
-Text012b: ; 38a61 (e:4a61)
+ChooseNidoranText: ; 38a61 (e:4a61)
text "Choose a Nidoran♀"
line "or a Nidoran♂."
done
-Text012c: ; 38a83 (e:4a83)
+ChooseBasicFightingPokemonText: ; 38a83 (e:4a83)
text "Choose a Basic"
line "Fighting Pokémon"
done
-Text012d: ; 38aa4 (e:4aa4)
+ProcedureForEnergyTransferText: ; 38aa4 (e:4aa4)
text "Procedure for Energy Transfer:"
line ""
line "1. Choose the Pokémon to move Grass"
@@ -289,21 +289,21 @@ Text012d: ; 38aa4 (e:4aa4)
line "4. Press the B Button to end."
done
-Text012e: ; 38b8f (e:4b8f)
+ChooseABellsproutFromDeckText: ; 38b8f (e:4b8f)
text "Choose a Bellsprout"
line "from the Deck."
done
-Text012f: ; 38bb3 (e:4bb3)
+ChooseABellsproutText: ; 38bb3 (e:4bb3)
text "Choose a Bellsprout."
done
-Text0130: ; 38bc9 (e:4bc9)
+ChoosePkmnToRemoveDamageCounterText: ; 38bc9 (e:4bc9)
text "Choose a Pokémon to remove"
line "the Damage counter from."
done
-Text0131: ; 38bfe (e:4bfe)
+ProcedureForCurseText: ; 38bfe (e:4bfe)
text "Procedure for Curse:"
line ""
line "1. Choose a Pokémon to move the"
@@ -317,22 +317,22 @@ Text0131: ; 38bfe (e:4bfe)
line "3. Press the B Button to cancel."
done
-Text0132: ; 38cda (e:4cda)
+Choose2EnergyCardsFromDiscardPileToAttachText: ; 38cda (e:4cda)
text "Choose 2 Energy cards from the"
line "Discard Pileto attach to a Pokémon."
done
-Text0133: ; 38d1e (e:4d1e)
+Choose2EnergyCardsFromDiscardPileForHandText: ; 38d1e (e:4d1e)
text "Choose 2 Energy cards from the"
line "Discard Pile for your Hand."
done
-Text0134: ; 38d5a (e:4d5a)
+ChooseAnEnergyCardText: ; 38d5a (e:4d5a)
text "Choose an Energy"
line "card."
done
-Text0135: ; 38d72 (e:4d72)
+ProcedureForProphecyText: ; 38d72 (e:4d72)
text "Procedure for Prophecy:"
line ""
line "1. Choose either your Deck"
@@ -348,12 +348,12 @@ Text0135: ; 38d72 (e:4d72)
line "4. Press the B Button to cancel."
done
-Text0136: ; 38e70 (e:4e70)
+ChooseTheOrderOfTheCardsText: ; 38e70 (e:4e70)
text "Choose the order"
line "of the cards."
done
-Text0137: ; 38e90 (e:4e90)
+ProcedureForDamageSwapText: ; 38e90 (e:4e90)
text "Procedure for Damage Swap:"
line ""
line "1. Choose a Pokémon to move a"
@@ -372,7 +372,7 @@ Text0137: ; 38e90 (e:4e90)
line " it will Knock Out the Pokémon."
done
-Text0138: ; 38fcc (e:4fcc)
+ProcedureForDevolutionBeamText: ; 38fcc (e:4fcc)
text "Procedure for Devolution Beam."
line ""
line "1. Choose either a Pokémon in your"
@@ -385,7 +385,7 @@ Text0138: ; 38fcc (e:4fcc)
line "3. Press the B Button to cancel."
done
-Text0139: ; 390b4 (e:50b4)
+ProcedureForStrangeBehaviorText: ; 390b4 (e:50b4)
text "Procedure for Strange Behavior:"
line ""
line "1. Choose the Pokémon with the"
@@ -401,74 +401,74 @@ Text0139: ; 390b4 (e:50b4)
line " Slowbro will be Knocked Out."
done
-Text013a: ; 391dc (e:51dc)
+ChooseOppAttackToBeUsedWithMetronomeText: ; 391dc (e:51dc)
text "Choose the opponent's Attack"
line "to be used with Metronome."
done
-Text013b: ; 39215 (e:5215)
+ThereIsNoInTheDeckText: ; 39215 (e:5215)
text "There is no <RAMTEXT>"
line "in the Deck."
done
-Text013c: ; 39231 (e:5231)
+WouldYouLikeToCheckTheDeckText: ; 39231 (e:5231)
text "Would you like to check the Deck?"
done
-Text013d: ; 39254 (e:5254)
+PleaseSelectTheDeckText: ; 39254 (e:5254)
text "Please select the Deck:"
line " Yours Opponent's"
done
-Text013e: ; 3928c (e:528c)
+PleaseSelectThePlayAreaText: ; 3928c (e:528c)
text "Please select the Play Area:"
line " Yours Opponent's"
done
-Text013f: ; 392c9 (e:52c9)
+NidoranMNidoranFText: ; 392c9 (e:52c9)
text "Nidoran♂ Nidoran♀"
done
-Text0140: ; 392dc (e:52dc)
+OddishText: ; 392dc (e:52dc)
text "Oddish"
done
-Text0141: ; 392e4 (e:52e4)
+BellsproutText: ; 392e4 (e:52e4)
text "Bellsprout"
done
-Text0142: ; 392f0 (e:52f0)
+KrabbyText: ; 392f0 (e:52f0)
text "Krabby"
done
-Text0143: ; 392f8 (e:52f8)
+FightingPokemonDeckText: ; 392f8 (e:52f8)
text "Fighting Pokémon"
done
-Text0144: ; 3930a (e:530a)
+BasicEnergyText: ; 3930a (e:530a)
text "Basic Energy"
done
-Text0145: ; 39318 (e:5318)
+PeekWasUsedToLookInYourHandText: ; 39318 (e:5318)
text "Peek was used to look at the"
line "<RAMTEXT> in your Hand."
done
-Text0146: ; 39346 (e:5346)
+CardPeekWasUsedOnText: ; 39346 (e:5346)
text "Card Peek was used on"
done
-Text0147: ; 3935d (e:535d)
+PokemonAndAllAttachedCardsReturnedToHandText: ; 3935d (e:535d)
text "<RAMTEXT> and all attached"
line "cards were returned to the Hand."
done
-Text0148: ; 39392 (e:5392)
+WasChosenForTheEffectOfAmnesiaText: ; 39392 (e:5392)
text "<RAMTEXT> was chosen"
line "for the effect of Amnesia."
done
-Text0149: ; 393bb (e:53bb)
+BasicPokemonWasPlacedOnEachBenchText: ; 393bb (e:53bb)
text "A Basic Pokémon was placed"
line "on each Bench."
done
@@ -483,17 +483,17 @@ ThereWasNoEffectFromTxRam2Text: ; 393ff (e:53ff)
line "from <RAMTEXT>."
done
-Text014c: ; 3941c (e:541c)
+TheEnergyCardFromPlayAreaWasMovedText: ; 3941c (e:541c)
text "The Energy card from <RAMNAME>'s"
line "Play Area was moved."
done
-Text014d: ; 3944b (e:544b)
+DrewFireEnergyFromTheHandText: ; 3944b (e:544b)
text "<RAMNAME> drew"
line "<RAMNUM> Fire Energy from the Hand."
done
-Text014e: ; 39470 (e:5470)
+ThePkmnCardsInHandAndDeckWereShuffledText: ; 39470 (e:5470)
text "The Pokémon cards in <RAMNAME>'s"
line "Hand and Deck were shuffled"
done
@@ -503,22 +503,22 @@ Text014f: ; 394a6 (e:54a6)
line "A Button is pressed. B Button quits."
done
-Text0150: ; 394f0 (e:54f0)
+ChoosePokemonToRemoveDamageCounterFromText: ; 394f0 (e:54f0)
text "Choose a Pokémon to remove"
line "the Damage counter from."
done
-Text0151: ; 39525 (e:5525)
+ChooseCardToDiscardFromHandText: ; 39525 (e:5525)
text "Choose the card to Discard"
line "from the Hand."
done
-Text0152: ; 39550 (e:5550)
+ChoosePokemonToRemoveEnergyFromText: ; 39550 (e:5550)
text "Choose a Pokémon to remove"
line "Energy from and choose the Energy."
done
-Text0153: ; 3958f (e:558f)
+Choose2BasicEnergyCardsFromDiscardPileText: ; 3958f (e:558f)
text "Choose 2 Basic Energy cards"
line "from the Discard Pile."
done
@@ -528,22 +528,22 @@ Text0154: ; 395c3 (e:55c3)
line "Button to remove Damage counters."
done
-Text0155: ; 39607 (e:5607)
+Choose2CardsFromHandToDiscardText: ; 39607 (e:5607)
text "Choose 2 cards from the Hand"
line "to Discard."
done
-Text0156: ; 39631 (e:5631)
+Choose2HandCardsFromHandToReturnToDeckText: ; 39631 (e:5631)
text "Choose 2 cards from the Hand"
line "to return to the Deck."
done
-Text0157: ; 39666 (e:5666)
+ChooseCardToPlaceInHandText: ; 39666 (e:5666)
text "Choose a card to"
line "place in the Hand."
done
-Text0158: ; 3968b (e:568b)
+ChoosePokemonToAttachDefenderToText: ; 3968b (e:568b)
text "Choose a Pokémon to"
line "attach Defender to."
done
@@ -553,75 +553,75 @@ Text0159: ; 396b4 (e:56b4)
line "A to Draw, B to End."
done
-Text015a: ; 396e6 (e:56e6)
+ChoosePokemonToReturnToTheDeckText: ; 396e6 (e:56e6)
text "Choose a Pokémon to"
line "return to the Deck."
done
-Text015b: ; 3970f (e:570f)
+ChoosePokemonToPlaceInPlayText: ; 3970f (e:570f)
text "Choose a Pokémon to"
line "place in play."
done
-Text015c: ; 39733 (e:5733)
+ChooseBasicPokemonToEvolveText: ; 39733 (e:5733)
text "Choose a Basic Pokémon"
line "to Evolve."
done
-Text015d: ; 39756 (e:5756)
+ChoosePokemonToScoopUpText: ; 39756 (e:5756)
text "Choose a Pokémon to"
line "Scoop Up."
done
-Text015e: ; 39775 (e:5775)
+ChooseCardFromYourHandToSwitchText: ; 39775 (e:5775)
text "Choose a card from your"
line "Hand to Switch."
done
-Text015f: ; 3979e (e:579e)
+ChooseCardToSwitchText: ; 3979e (e:579e)
text "Choose a card to"
line "Switch."
done
-Text0160: ; 397b8 (e:57b8)
+ChooseBasicOrEvolutionPokemonCardFromDeckText: ; 397b8 (e:57b8)
text "Choose a Basic or Evolution"
line "Pokémon card from the Deck."
done
-Text0161: ; 397f1 (e:57f1)
+ChoosePokemonCardText: ; 397f1 (e:57f1)
text "Choose"
line "a Pokémon card."
done
-Text0162: ; 39809 (e:5809)
+RearrangeThe5CardsAtTopOfDeckText: ; 39809 (e:5809)
text "Rearrange the 5 cards at"
line "the top of the Deck."
done
-Text0163: ; 39838 (e:5838)
+PleaseCheckTheOpponentsHandText: ; 39838 (e:5838)
text "Please check the opponent's"
line "Hand."
done
-Text0164: ; 3985b (e:585b)
+EvolutionCardText: ; 3985b (e:585b)
text "Evolution card"
done
-Text0165: ; 3986b (e:586b)
+CardWasChosenText: ; 3986b (e:586b)
text "<RAMTEXT> was chosen."
done
-Text0166: ; 3987a (e:587a)
+ChooseBasicPokemonToPlaceOnBenchText: ; 3987a (e:587a)
text "Choose a Basic Pokémon"
line "to place on the Bench."
done
-Text0167: ; 398a9 (e:58a9)
+ChooseEvolutionCardAndPressAButtonToDevolveText: ; 398a9 (e:58a9)
text "Choose an Evolution card and"
line "press the A Button to Devolve 1."
done
-Text0168: ; 398e8 (e:58e8)
+ChoosePokemonInYourAreaThenPokemonInYourOppText: ; 398e8 (e:58e8)
text "Choose a Pokémon in your Area, then"
line "a Pokémon in your opponent's."
done
@@ -636,27 +636,27 @@ Text016a: ; 39952 (e:5952)
line "with the Active Pokémon."
done
-Text016b: ; 39987 (e:5987)
+PokemonAndAllAttachedCardsWereReturnedToDeckText: ; 39987 (e:5987)
text "<RAMTEXT> and all attached"
line "cards were returned to the Deck."
done
-Text016c: ; 399bc (e:59bc)
+PokemonWasReturnedFromArenaToHandText: ; 399bc (e:59bc)
text "<RAMTEXT> was returned"
line "from the Arena to the Hand."
done
-Text016d: ; 399e8 (e:59e8)
+PokemonWasReturnedFromBenchToHandText: ; 399e8 (e:59e8)
text "<RAMTEXT> was returned"
line "from the Bench to the Hand."
done
-Text016e: ; 39a14 (e:5a14)
+PokemonWasReturnedToDeckText: ; 39a14 (e:5a14)
text "<RAMTEXT> was returned"
line "to the Deck."
done
-Text016f: ; 39a31 (e:5a31)
+WasPlacedInTheHandText: ; 39a31 (e:5a31)
text "<RAMTEXT> was placed"
line "in the Hand."
done
@@ -669,17 +669,17 @@ YouReceivedTheseCardsText: ; 39a63 (e:5a63)
text "You received these cards:"
done
-Text0172: ; 39a7e (e:5a7e)
+ChooseTheCardToPutBackText: ; 39a7e (e:5a7e)
text "Choose the card"
line "to put back."
done
-Text0173: ; 39a9c (e:5a9c)
+ChooseTheCardToDiscardText: ; 39a9c (e:5a9c)
text "Choose the card"
line "to Discard."
done
-Text0174: ; 39ab9 (e:5ab9)
+DiscardedCardsFromDeckText: ; 39ab9 (e:5ab9)
text "Discarded <RAMNUM> cards"
line "from <RAMNAME>'s Deck."
done
@@ -689,39 +689,39 @@ Text0175: ; 39adb (e:5adb)
line "from the Hand."
done
-Text0176: ; 39af7 (e:5af7)
+NoneCameText: ; 39af7 (e:5af7)
text "None came!"
done
-Text0177: ; 39b03 (e:5b03)
+CameToTheBenchText: ; 39b03 (e:5b03)
text "<RAMTEXT>"
line "came to the Bench!"
done
-Text0178: ; 39b19 (e:5b19)
+DuelistHasNoCardsInHandText: ; 39b19 (e:5b19)
text "<RAMNAME> has"
line "no cards in Hand!"
done
-Text0179: ; 39b32 (e:5b32)
+PokemonHealedDamageText: ; 39b32 (e:5b32)
text "<RAMTEXT> healed"
line "<RAMNUM> damage!"
done
-Text017a: ; 39b46 (e:5b46)
+PokemonDevolvedToText: ; 39b46 (e:5b46)
text "<RAMTEXT> devolved"
line "to <RAMTEXT>!"
done
-Text017b: ; 39b58 (e:5b58)
+ThereWasNoFireEnergyText: ; 39b58 (e:5b58)
text "There was no Fire Energy."
done
-Text017c: ; 39b73 (e:5b73)
+YouCanSelectMoreCardsQuitText: ; 39b73 (e:5b73)
text "You can select <RAMNUM> more cards. Quit?"
done
-Text017d: ; 39b97 (e:5b97)
+ThereWasNoEffectText: ; 39b97 (e:5b97)
text "There was no effect!"
done
@@ -755,7 +755,7 @@ ThereWasNoEffectFromPoisonConfusionText: ; 39c5a (e:5c5a)
line "from Poison, Confusion."
done
-Text0184: ; 39c86 (e:5c86)
+ExchangedCardsInDuelistsHandText: ; 39c86 (e:5c86)
text "Exchanged the cards"
line "in <RAMNAME>'s Hand."
done
diff --git a/src/text/text_offsets.asm b/src/text/text_offsets.asm
index 605ec7d..23a7ddf 100644
--- a/src/text/text_offsets.asm
+++ b/src/text/text_offsets.asm
@@ -70,15 +70,15 @@ TextOffsets:: ; 34000 (d:4000)
textpointer WillDrawNPrizesText ; 0x0042
textpointer DrewNPrizesText ; 0x0043
textpointer DuelistPlacedACardText ; 0x0044
- textpointer Text0045 ; 0x0045
- textpointer Text0046 ; 0x0046
- textpointer Text0047 ; 0x0047
- textpointer Text0048 ; 0x0048
- textpointer Text0049 ; 0x0049
- textpointer Text004a ; 0x004a
- textpointer Text004b ; 0x004b
- textpointer Text004c ; 0x004c
- textpointer Text004d ; 0x004d
+ textpointer UnableToSelectText ; 0x0045
+ textpointer ColorListText ; 0x0046
+ textpointer GrassSymbolText ; 0x0047
+ textpointer FireSymbolText ; 0x0048
+ textpointer WaterSymbolText ; 0x0049
+ textpointer LightningSymbolText ; 0x004a
+ textpointer FightingSymbolText ; 0x004b
+ textpointer PsychicSymbolText ; 0x004c
+ textpointer BenchText ; 0x004d
textpointer KnockOutText ; 0x004e
textpointer DamageToSelfDueToConfusionText ; 0x004f
textpointer ChooseEnergyCardToDiscardText ; 0x0050
@@ -88,7 +88,7 @@ TextOffsets:: ; 34000 (d:4000)
textpointer YouPlaySecondText ; 0x0054
textpointer TransmissionErrorText ; 0x0055
textpointer ChooseTheCardYouWishToExamineText ; 0x0056
- textpointer TransmitingDataText ; 0x0057
+ textpointer TransmittingDataText ; 0x0057
textpointer WaitingHandExamineText ; 0x0058
textpointer SelectingBenchPokemonHandExamineBackText ; 0x0059
textpointer RetreatedToTheBenchText ; 0x005a
@@ -176,43 +176,43 @@ TextOffsets:: ; 34000 (d:4000)
textpointer NoPokemonWithDamageCountersText ; 0x00ac
textpointer NoDamageCountersText ; 0x00ad
textpointer NoEnergyAttachedToOpponentsActiveText ; 0x00ae
- textpointer Text00af ; 0x00af
- textpointer Text00b0 ; 0x00b0
- textpointer Text00b1 ; 0x00b1
+ textpointer ThereAreNoEnergyCardsInDiscardPileText ; 0x00af
+ textpointer ThereAreNoBasicEnergyCardsInDiscardPileText ; 0x00b0
+ textpointer NoCardsLeftInTheDeckText ; 0x00b1
textpointer NoSpaceOnTheBenchText ; 0x00b2
textpointer NoPokemonCapableOfEvolvingText ; 0x00b3
textpointer CantEvolvePokemonInSameTurnItsPlacedText ; 0x00b4
- textpointer Text00b5 ; 0x00b5
- textpointer Text00b6 ; 0x00b6
- textpointer Text00b7 ; 0x00b7
- textpointer Text00b8 ; 0x00b8
- textpointer Text00b9 ; 0x00b9
- textpointer Text00ba ; 0x00ba
- textpointer Text00bb ; 0x00bb
- textpointer Text00bc ; 0x00bc
- textpointer Text00bd ; 0x00bd
- textpointer Text00be ; 0x00be
+ textpointer NotAffectedByPoisonSleepParalysisOrConfusionText ; 0x00b5
+ textpointer NotEnoughCardsInHandText ; 0x00b6
+ textpointer EffectNoPokemonOnTheBenchText ; 0x00b7
+ textpointer ThereAreNoPokemonInDiscardPileText ; 0x00b8
+ textpointer ConditionsForEvolvingToStage2NotFulfilledText ; 0x00b9
+ textpointer ThereAreNoCardsInHandThatYouCanChangeText ; 0x00ba
+ textpointer ThereAreNoCardsInTheDiscardPileText ; 0x00bb
+ textpointer ThereAreNoStage1PokemonText ; 0x00bc
+ textpointer NoEnergyCardsAttachedToPokemonInYourPlayAreaText ; 0x00bd
+ textpointer NoEnergyCardsAttachedToPokemonInOppPlayAreaText ; 0x00be
textpointer EnergyCardsRequiredToRetreatText ; 0x00bf
textpointer NotEnoughEnergyCardsText ; 0x00c0
- textpointer Text00c1 ; 0x00c1
- textpointer Text00c2 ; 0x00c2
- textpointer Text00c3 ; 0x00c3
- textpointer Text00c4 ; 0x00c4
- textpointer Text00c5 ; 0x00c5
- textpointer Text00c6 ; 0x00c6
- textpointer Text00c7 ; 0x00c7
- textpointer Text00c8 ; 0x00c8
- textpointer Text00c9 ; 0x00c9
- textpointer Text00ca ; 0x00ca
+ textpointer NotEnoughFireEnergyText ; 0x00c1
+ textpointer NotEnoughPsychicEnergyText ; 0x00c2
+ textpointer NotEnoughWaterEnergyText ; 0x00c3
+ textpointer ThereAreNoTrainerCardsInDiscardPileText ; 0x00c4
+ textpointer NoAttackMayBeChoosenText ; 0x00c5
+ textpointer YouDidNotReceiveAnAttackToMirrorMoveText ; 0x00c6
+ textpointer ThisAttackCannotBeUsedTwiceText ; 0x00c7
+ textpointer NoWeaknessText ; 0x00c8
+ textpointer NoResistanceText ; 0x00c9
+ textpointer OnlyOncePerTurnText ; 0x00ca
textpointer CannotUseDueToStatusText ; 0x00cb
- textpointer Text00cc ; 0x00cc
- textpointer Text00cd ; 0x00cd
- textpointer Text00ce ; 0x00ce
- textpointer Text00cf ; 0x00cf
- textpointer Text00d0 ; 0x00d0
- textpointer Text00d1 ; 0x00d1
- textpointer Text00d2 ; 0x00d2
- textpointer Text00d3 ; 0x00d3
+ textpointer CannotBeUsedInTurnWhichWasPlayedText ; 0x00cc
+ textpointer ThereIsNoEnergyCardAttachedText ; 0x00cd
+ textpointer NoGrassEnergyText ; 0x00ce
+ textpointer CannotUseSinceTheresOnly1PkmnText ; 0x00cf
+ textpointer CannotUseBecauseItWillBeKnockedOutText ; 0x00d0
+ textpointer CanOnlyBeUsedOnTheBenchText ; 0x00d1
+ textpointer ThereAreNoPokemonOnBenchText ; 0x00d2
+ textpointer OpponentIsNotAsleepText ; 0x00d3
textpointer UnableDueToToxicGasText ; 0x00d4
textpointer Text00d5 ; 0x00d5
textpointer BackUpIsBrokenText ; 0x00d6
@@ -230,18 +230,18 @@ TextOffsets:: ; 34000 (d:4000)
textpointer PoisonCheckText ; 0x00e2
textpointer ConfusionCheckText ; 0x00e3
textpointer VenomPowderCheckText ; 0x00e4
- textpointer Text00e5 ; 0x00e5
- textpointer Text00e6 ; 0x00e6
- textpointer Text00e7 ; 0x00e7
- textpointer Text00e8 ; 0x00e8
+ textpointer IfTailsYourPokemonBecomesConfusedText ; 0x00e5
+ textpointer DamageCheckIfTailsNoDamageText ; 0x00e6
+ textpointer IfHeadsDraw1CardFromDeckText ; 0x00e7
+ textpointer FlipUntilFailAppears10DamageForEachHeadsText ; 0x00e8
textpointer IfHeadPlus10IfTails10ToYourselfText ; 0x00e9
- textpointer Text00ea ; 0x00ea
+ textpointer DamageToOppBenchIfHeadsDamageToYoursIfTailsText ; 0x00ea
textpointer IfHeadsChangeOpponentsActivePokemonText ; 0x00eb
- textpointer Text00ec ; 0x00ec
- textpointer Text00ed ; 0x00ed
- textpointer Text00ee ; 0x00ee
+ textpointer IfHeadsHealIsSuccessfulText ; 0x00ec
+ textpointer IfTailsDamageToYourselfTooText ; 0x00ed
+ textpointer SuccessCheckIfHeadsAttackIsSuccessfulText ; 0x00ee
textpointer TrainerCardSuccessCheckText ; 0x00ef
- textpointer Text00f0 ; 0x00f0
+ textpointer CardCheckIfHeads8CardsIfTails1CardText ; 0x00f0
textpointer IfHeadsNoDamageNextTurnText ; 0x00f1
textpointer Text00f2 ; 0x00f2
textpointer DamageCheckIfHeadsPlusDamageText ; 0x00f3
@@ -252,8 +252,8 @@ TextOffsets:: ; 34000 (d:4000)
textpointer ConfusionCheckRetreatText ; 0x00f8
textpointer PokemonsSleepCheckText ; 0x00f9
textpointer PoisonedIfHeadsConfusedIfTailsText ; 0x00fa
- textpointer Text00fb ; 0x00fb
- textpointer Text00fc ; 0x00fc
+ textpointer IfHeadsDoNotReceiveDamageOrEffectText ; 0x00fb
+ textpointer IfHeadsOpponentCannotAttackText ; 0x00fc
textpointer AttackUnsuccessfulText ; 0x00fd
textpointer UnableToRetreatDueToAcidText ; 0x00fe
textpointer UnableToUseTrainerDueToHeadacheText ; 0x00ff
@@ -270,126 +270,126 @@ TextOffsets:: ; 34000 (d:4000)
textpointer UnableToUseAttackDueToNShieldText ; 0x010a
textpointer NoDamageOrEffectDueToNShieldText ; 0x010b
textpointer NoDamageOrEffectDueToTransparencyText ; 0x010c
- textpointer Text010d ; 0x010d
+ textpointer MetamorphsToText ; 0x010d
textpointer SelectPkmnOnBenchToSwitchWithActiveText ; 0x010e
textpointer SelectPokemonToPlaceInTheArenaText ; 0x010f
textpointer DuelistIsSelectingPokemonToPlaceInArenaText ; 0x0110
- textpointer Text0111 ; 0x0111
- textpointer Text0112 ; 0x0112
- textpointer Text0113 ; 0x0113
- textpointer Text0114 ; 0x0114
- textpointer Text0115 ; 0x0115
- textpointer Text0116 ; 0x0116
- textpointer Text0117 ; 0x0117
+ textpointer ChooseWeaknessYouWishToChangeText ; 0x0111
+ textpointer ChooseResistanceYouWishToChangeText ; 0x0112
+ textpointer ChoosePokemonWishToColorChangeText ; 0x0113
+ textpointer ChangedTheWeaknessOfPokemonToColorText ; 0x0114
+ textpointer ChangedTheResistanceOfPokemonToColorText ; 0x0115
+ textpointer ChangedTheColorOfText ; 0x0116
+ textpointer Draw1CardFromTheDeckText ; 0x0117
textpointer DrawCardsFromTheDeckText ; 0x0118
textpointer CannotDrawCardBecauseNoCardsInDeckText ; 0x0119
- textpointer Text011a ; 0x011a
- textpointer Text011b ; 0x011b
- textpointer Text011c ; 0x011c
- textpointer Text011d ; 0x011d
+ textpointer ChoosePkmnInTheBenchToGiveDamageText ; 0x011a
+ textpointer ChooseUpTo3PkmnOnBenchToGiveDamageText ; 0x011b
+ textpointer Choose1BasicEnergyCardFromDeckText ; 0x011c
+ textpointer ChoosePokemonToAttachEnergyCardText ; 0x011d
textpointer Text011e ; 0x011e
- textpointer Text011f ; 0x011f
- textpointer Text0120 ; 0x0120
- textpointer Text0121 ; 0x0121
- textpointer Text0122 ; 0x0122
- textpointer Text0123 ; 0x0123
- textpointer Text0124 ; 0x0124
- textpointer Text0125 ; 0x0125
- textpointer Text0126 ; 0x0126
- textpointer Text0127 ; 0x0127
- textpointer Text0128 ; 0x0128
- textpointer Text0129 ; 0x0129
- textpointer Text012a ; 0x012a
- textpointer Text012b ; 0x012b
- textpointer Text012c ; 0x012c
- textpointer Text012d ; 0x012d
- textpointer Text012e ; 0x012e
- textpointer Text012f ; 0x012f
- textpointer Text0130 ; 0x0130
- textpointer Text0131 ; 0x0131
- textpointer Text0132 ; 0x0132
- textpointer Text0133 ; 0x0133
- textpointer Text0134 ; 0x0134
- textpointer Text0135 ; 0x0135
- textpointer Text0136 ; 0x0136
- textpointer Text0137 ; 0x0137
- textpointer Text0138 ; 0x0138
- textpointer Text0139 ; 0x0139
- textpointer Text013a ; 0x013a
- textpointer Text013b ; 0x013b
- textpointer Text013c ; 0x013c
- textpointer Text013d ; 0x013d
- textpointer Text013e ; 0x013e
- textpointer Text013f ; 0x013f
- textpointer Text0140 ; 0x0140
- textpointer Text0141 ; 0x0141
- textpointer Text0142 ; 0x0142
- textpointer Text0143 ; 0x0143
- textpointer Text0144 ; 0x0144
- textpointer Text0145 ; 0x0145
- textpointer Text0146 ; 0x0146
- textpointer Text0147 ; 0x0147
- textpointer Text0148 ; 0x0148
- textpointer Text0149 ; 0x0149
+ textpointer ChooseAndDiscard2FireEnergyCardsText ; 0x011f
+ textpointer DiscardOppDeckAsManyFireEnergyCardsText ; 0x0120
+ textpointer ChooseAndDiscard2EnergyCardsText ; 0x0121
+ textpointer ChooseAKrabbyFromDeckText ; 0x0122
+ textpointer ChooseDiscardEnergyCardFromOpponentText ; 0x0123
+ textpointer ChooseAttackOpponentWillNotBeAbleToUseText ; 0x0124
+ textpointer ChooseBasicFightingPokemonFromDeckText ; 0x0125
+ textpointer ChooseAnOddishFromDeckText ; 0x0126
+ textpointer ChooseAnOddishText ; 0x0127
+ textpointer ChooseAKrabbyText ; 0x0128
+ textpointer ChooseBasicEnergyCardText ; 0x0129
+ textpointer ChooseNidoranFromDeckText ; 0x012a
+ textpointer ChooseNidoranText ; 0x012b
+ textpointer ChooseBasicFightingPokemonText ; 0x012c
+ textpointer ProcedureForEnergyTransferText ; 0x012d
+ textpointer ChooseABellsproutFromDeckText ; 0x012e
+ textpointer ChooseABellsproutText ; 0x012f
+ textpointer ChoosePkmnToRemoveDamageCounterText ; 0x0130
+ textpointer ProcedureForCurseText ; 0x0131
+ textpointer Choose2EnergyCardsFromDiscardPileToAttachText ; 0x0132
+ textpointer Choose2EnergyCardsFromDiscardPileForHandText ; 0x0133
+ textpointer ChooseAnEnergyCardText ; 0x0134
+ textpointer ProcedureForProphecyText ; 0x0135
+ textpointer ChooseTheOrderOfTheCardsText ; 0x0136
+ textpointer ProcedureForDamageSwapText ; 0x0137
+ textpointer ProcedureForDevolutionBeamText ; 0x0138
+ textpointer ProcedureForStrangeBehaviorText ; 0x0139
+ textpointer ChooseOppAttackToBeUsedWithMetronomeText ; 0x013a
+ textpointer ThereIsNoInTheDeckText ; 0x013b
+ textpointer WouldYouLikeToCheckTheDeckText ; 0x013c
+ textpointer PleaseSelectTheDeckText ; 0x013d
+ textpointer PleaseSelectThePlayAreaText ; 0x013e
+ textpointer NidoranMNidoranFText ; 0x013f
+ textpointer OddishText ; 0x0140
+ textpointer BellsproutText ; 0x0141
+ textpointer KrabbyText ; 0x0142
+ textpointer FightingPokemonDeckText ; 0x0143
+ textpointer BasicEnergyText ; 0x0144
+ textpointer PeekWasUsedToLookInYourHandText ; 0x0145
+ textpointer CardPeekWasUsedOnText ; 0x0146
+ textpointer PokemonAndAllAttachedCardsReturnedToHandText ; 0x0147
+ textpointer WasChosenForTheEffectOfAmnesiaText ; 0x0148
+ textpointer BasicPokemonWasPlacedOnEachBenchText ; 0x0149
textpointer WasUnsuccessfulText ; 0x014a
textpointer ThereWasNoEffectFromTxRam2Text ; 0x014b
- textpointer Text014c ; 0x014c
- textpointer Text014d ; 0x014d
- textpointer Text014e ; 0x014e
+ textpointer TheEnergyCardFromPlayAreaWasMovedText ; 0x014c
+ textpointer DrewFireEnergyFromTheHandText ; 0x014d
+ textpointer ThePkmnCardsInHandAndDeckWereShuffledText ; 0x014e
textpointer Text014f ; 0x014f
- textpointer Text0150 ; 0x0150
- textpointer Text0151 ; 0x0151
- textpointer Text0152 ; 0x0152
- textpointer Text0153 ; 0x0153
+ textpointer ChoosePokemonToRemoveDamageCounterFromText ; 0x0150
+ textpointer ChooseCardToDiscardFromHandText ; 0x0151
+ textpointer ChoosePokemonToRemoveEnergyFromText ; 0x0152
+ textpointer Choose2BasicEnergyCardsFromDiscardPileText ; 0x0153
textpointer Text0154 ; 0x0154
- textpointer Text0155 ; 0x0155
- textpointer Text0156 ; 0x0156
- textpointer Text0157 ; 0x0157
- textpointer Text0158 ; 0x0158
+ textpointer Choose2CardsFromHandToDiscardText ; 0x0155
+ textpointer Choose2HandCardsFromHandToReturnToDeckText ; 0x0156
+ textpointer ChooseCardToPlaceInHandText ; 0x0157
+ textpointer ChoosePokemonToAttachDefenderToText ; 0x0158
textpointer Text0159 ; 0x0159
- textpointer Text015a ; 0x015a
- textpointer Text015b ; 0x015b
- textpointer Text015c ; 0x015c
- textpointer Text015d ; 0x015d
- textpointer Text015e ; 0x015e
- textpointer Text015f ; 0x015f
- textpointer Text0160 ; 0x0160
- textpointer Text0161 ; 0x0161
- textpointer Text0162 ; 0x0162
- textpointer Text0163 ; 0x0163
- textpointer Text0164 ; 0x0164
- textpointer Text0165 ; 0x0165
- textpointer Text0166 ; 0x0166
- textpointer Text0167 ; 0x0167
- textpointer Text0168 ; 0x0168
+ textpointer ChoosePokemonToReturnToTheDeckText ; 0x015a
+ textpointer ChoosePokemonToPlaceInPlayText ; 0x015b
+ textpointer ChooseBasicPokemonToEvolveText ; 0x015c
+ textpointer ChoosePokemonToScoopUpText ; 0x015d
+ textpointer ChooseCardFromYourHandToSwitchText ; 0x015e
+ textpointer ChooseCardToSwitchText ; 0x015f
+ textpointer ChooseBasicOrEvolutionPokemonCardFromDeckText ; 0x0160
+ textpointer ChoosePokemonCardText ; 0x0161
+ textpointer RearrangeThe5CardsAtTopOfDeckText ; 0x0162
+ textpointer PleaseCheckTheOpponentsHandText ; 0x0163
+ textpointer EvolutionCardText ; 0x0164
+ textpointer CardWasChosenText ; 0x0165
+ textpointer ChooseBasicPokemonToPlaceOnBenchText ; 0x0166
+ textpointer ChooseEvolutionCardAndPressAButtonToDevolveText ; 0x0167
+ textpointer ChoosePokemonInYourAreaThenPokemonInYourOppText ; 0x0168
textpointer Text0169 ; 0x0169
textpointer Text016a ; 0x016a
- textpointer Text016b ; 0x016b
- textpointer Text016c ; 0x016c
- textpointer Text016d ; 0x016d
- textpointer Text016e ; 0x016e
- textpointer Text016f ; 0x016f
+ textpointer PokemonAndAllAttachedCardsWereReturnedToDeckText ; 0x016b
+ textpointer PokemonWasReturnedFromArenaToHandText ; 0x016c
+ textpointer PokemonWasReturnedFromBenchToHandText ; 0x016d
+ textpointer PokemonWasReturnedToDeckText ; 0x016e
+ textpointer WasPlacedInTheHandText ; 0x016f
textpointer TheCardYouReceivedText ; 0x0170
textpointer YouReceivedTheseCardsText ; 0x0171
- textpointer Text0172 ; 0x0172
- textpointer Text0173 ; 0x0173
- textpointer Text0174 ; 0x0174
+ textpointer ChooseTheCardToPutBackText ; 0x0172
+ textpointer ChooseTheCardToDiscardText ; 0x0173
+ textpointer DiscardedCardsFromDeckText ; 0x0174
textpointer Text0175 ; 0x0175
- textpointer Text0176 ; 0x0176
- textpointer Text0177 ; 0x0177
- textpointer Text0178 ; 0x0178
- textpointer Text0179 ; 0x0179
- textpointer Text017a ; 0x017a
- textpointer Text017b ; 0x017b
- textpointer Text017c ; 0x017c
- textpointer Text017d ; 0x017d
+ textpointer NoneCameText ; 0x0176
+ textpointer CameToTheBenchText ; 0x0177
+ textpointer DuelistHasNoCardsInHandText ; 0x0178
+ textpointer PokemonHealedDamageText ; 0x0179
+ textpointer PokemonDevolvedToText ; 0x017a
+ textpointer ThereWasNoFireEnergyText ; 0x017b
+ textpointer YouCanSelectMoreCardsQuitText ; 0x017c
+ textpointer ThereWasNoEffectText ; 0x017d
textpointer ThereWasNoEffectFromToxicText ; 0x017e
textpointer ThereWasNoEffectFromPoisonText ; 0x017f
textpointer ThereWasNoEffectFromSleepText ; 0x0180
textpointer ThereWasNoEffectFromParalysisText ; 0x0181
textpointer ThereWasNoEffectFromConfusionText ; 0x0182
textpointer ThereWasNoEffectFromPoisonConfusionText ; 0x0183
- textpointer Text0184 ; 0x0184
+ textpointer ExchangedCardsInDuelistsHandText ; 0x0184
textpointer Text0185 ; 0x0185
textpointer Text0186 ; 0x0186
textpointer Text0187 ; 0x0187
@@ -2124,7 +2124,7 @@ TextOffsets:: ; 34000 (d:4000)
textpointer CobraName ; 0x0848
textpointer ArbokDescription ; 0x0849
textpointer NidoranFName ; 0x084a
- textpointer FurySweepesName ; 0x084b
+ textpointer FurySwipesName ; 0x084b
textpointer TripleAttackX10Description ; 0x084c
textpointer CallForFamilyName ; 0x084d
textpointer NidoranFsCallForFamilyDescription ; 0x084e
diff --git a/src/wram.asm b/src/wram.asm
index bb1f346..dc1d91f 100644
--- a/src/wram.asm
+++ b/src/wram.asm
@@ -73,7 +73,10 @@ wPlayerArenaCard:: ; c2bb
wPlayerBench:: ; c2bc
ds MAX_BENCH_POKEMON + 1
- ds $6
+wPlayerArenaCardFlags:: ; c2c2
+ ds $1
+
+ ds $5
wPlayerArenaCardHP:: ; c2c8
ds $1
@@ -102,7 +105,7 @@ wPlayerBench5CardStage:: ; c2d3
ds $1
; changed type from Venomoth's Shift Pokemon Power
-; if bit 7 == 1, then bits 0-3 override the Pokemon's actual type
+; if bit 7 == 1, then bits 0-3 override the Pokemon's actual color
wPlayerArenaCardChangedType:: ; c2d4
ds $1
wPlayerBench1CardChangedType:: ; c2d5
@@ -196,7 +199,21 @@ wPlayerArenaCardLastTurnDamage:: ; c2f3
wPlayerArenaCardLastTurnStatus:: ; c2f5
ds $1
- ds $a
+; substatus2 that the opponent card got last turn
+wPlayerArenaCardLastTurnSubstatus2:: ; c2f6
+ ds $1
+
+; indicates color of weakness that was changed
+; for this card last turn
+wPlayerArenaCardLastTurnChangeWeak:: ; c2f7
+ ds $1
+
+; stores an effect that was used on the Arena card last turn.
+; see LAST_TURN_EFFECT_* constants.
+wPlayerArenaCardLastTurnEffect:: ; c2f8
+ ds $1
+
+ ds $7
wOpponentDuelVariables:: ; c300
@@ -221,7 +238,10 @@ wOpponentArenaCard:: ; c3bb
wOpponentBench:: ; c3bc
ds MAX_BENCH_POKEMON + 1
- ds $6
+wOpponentArenaCardFlags:: ; c3c2
+ ds $1
+
+ ds $5
wOpponentArenaCardHP:: ; c3c8
ds $1
@@ -336,7 +356,20 @@ wOpponentArenaCardLastTurnDamage:: ; c3f3
wOpponentArenaCardLastTurnStatus:: ; c3f5
ds $1
- ds $a
+; substatus2 that the player card got last turn
+wOpponentArenaCardLastTurnSubstatus2:: ; c3f6
+ ds $1
+
+; indicates color of weakness that was changed
+; for this card last turn
+wOpponentArenaCardLastTurnChangeWeak:: ; c3f7
+ ds $1
+
+; whether any attached energy card was discarded last turn (0 if not)
+wOpponentArenaCardLastTurnEffect:: ; c3f8
+ ds $1
+
+ ds $7
UNION
@@ -346,7 +379,7 @@ wBoosterTempNonEnergiesDrawn:: ; c400
ds $b
wBoosterTempEnergiesDrawn:: ; c40b
ds $b
-wBoosterCardsDrawnEnd::
+wBoosterCardsDrawnEnd:: ; c416
ds $6a
NEXTU
@@ -700,15 +733,14 @@ wNoItemSelectionMenuKeys:: ; cbd6
ds $1
; when viewing a card page, which keys (among B_BUTTON, D_UP, and D_DOWN) will exit the page,
-; either to go back to the previous menu orlist, or to load the card page of the card above/below it
+; either to go back to the previous menu or list, or to load the card page of the card above/below it
wCardPageExitKeys:: ; cbd7
ds $1
+; used to store function pointer for printing card order
+; in card list reordering screen.
wcbd8:: ; cbd8
- ds $1
-
-wcbd9:: ; cbd9
- ds $1
+ ds $2
; in the hand or discard pile card screen, id of the text printed in the bottom-left box
wCardListInfoBoxText:: ; cbda
@@ -919,6 +951,7 @@ wLoadedMove:: ; cca6
; the damage field of an used move is loaded here
; doubles as "wAIAverageDamage" when complementing wAIMinDamage and wAIMaxDamage
; little-endian
+; second byte may have UNAFFECTED_BY_WEAKNESS_RESISTANCE_F set/unset
wDamage:: ; ccb9
ds $2
@@ -931,6 +964,7 @@ wAIMinDamage:: ; ccbb
wAIMaxDamage:: ; ccbc
ds $1
+wccbd:: ; ccbd
ds $2
; damage dealt by an attack to a target
@@ -987,6 +1021,7 @@ wEffectFunctionsFeedback:: ; ccce
ds $18
; this is 1 (non-0) if dealing damage to self due to confusion
+; or a self-destruct type attack
wIsDamageToSelf:: ; cce6
ds $1
@@ -1020,12 +1055,16 @@ wccee:: ; ccee
wccef:: ; ccef
ds $1
-wccf0:: ; ccf0
+; stores the energy cost of the Metronome attack being used.
+; it's used to know how many attached Energy cards are being used
+; to pay for the attack for damage calculation.
+; if equal to 0, then the attack wasn't invoked by Metronome.
+wMetronomeEnergyCost:: ; ccf0
ds $1
; effect functions return a status condition constant here when it had no effect
; on the target, in order to print one of the ThereWasNoEffectFrom* texts
-wNoEffectFromStatus:: ; ccf1
+wNoEffectFromWhichStatus:: ; ccf1
ds $1
; when non-0, allows the player to skip some delays during a duel by pressing B.
@@ -1193,8 +1232,8 @@ wAIPokedexCounter:: ; cda6
ds $1
; variable to keep track of Mewtwo1's Barrier usage during Player' turn.
-; AI_FLAG_MEWTWO_MILL set means Player is running Mewtwo1 mill deck.
-; - when flag is not set, this counts how many turns in a row
+; AI_MEWTWO_MILL set means Player is running Mewtwo1 mill deck.
+; - when flag is not set, this counts how many turns in a row
; Player used Mewtwo1's Barrier attack;
; - when flag is set, this counts how many turns in a row
; Player has NOT used Barrier attack.
@@ -1427,10 +1466,10 @@ wAIVenusaur2PlayAreaLocation:: ; ce05
wce06:: ; ce06
; number of cards to be transferred by AI using Energy Trans.
-wAINumberOfEnergyTransCards::
+wAINumberOfEnergyTransCards:: ; ce06
; used for storing weakness of Player's Arena card
; in AI routine dealing with Shift Pkmn Power.
-wAIDefendingPokemonWeakness::
+wAIDefendingPokemonWeakness:: ; ce06
ds $1
wce07:: ; ce07
@@ -1552,7 +1591,7 @@ wCoinTossScreenTextID:: ; ce4e
ds $2
; set to PLAYER_TURN in the "Your Play Area" screen
-; set to OPPONENT_TURN in the "Opp Play Area" screen
+; set to OPPONENT_TURN in the "Opp Play Area" screen
; alternates when drawing the "In Play Area" screen
wCheckMenuPlayAreaWhichDuelist:: ; ce50
ds $1
@@ -1670,7 +1709,20 @@ wce70:: ; ce70
wce71:: ; ce71
ds $1
- ds $a
+wce72:: ; ce72
+ ds $1
+
+; card index and its attack index chosen
+; to be used by Metronome.
+wMetronomeSelectedAttack:: ; ce73
+ ds $2
+
+; stores the amount of cards that are being ordered.
+wNumberOfCardsToOrder:: ; ce75
+ ds $1
+
+wce76:: ; ce76
+ ds MAX_PLAY_AREA_POKEMON
; used in CountPokemonIDInPlayArea
wTempPokemonID_ce7c:: ; ce7c
@@ -2033,11 +2085,11 @@ wBoosterViableCardList:: ; d133
NEXTU
-; permission map of the current room with unpassable objects (walls, NPCs, etc).
+; permission map of the current room with impassable objects (walls, NPCs, etc).
; $00: passable (floor)
-; $40: unpassable and talkable (NPC or talkable wall)
-; $80: unpassable and untalkable (wall)
-wPermissionMap::
+; $40: impassable and talkable (NPC or talkable wall)
+; $80: impassable and untalkable (wall)
+wPermissionMap:: ; d133
ds $100
ENDU
@@ -2249,7 +2301,7 @@ wd3d0:: ; d3d0
wLoadedFlagBits:: ; d3d1
ds $1
-wEventFlags::
+wEventFlags:: ; d3d2
ds $40
; 0 keeps looping, other values break the loop in RST20
@@ -2321,11 +2373,19 @@ wd4b0:: ; d4b0
wd4b1:: ; d4b1
ds $1
-
+
wd4b2:: ; d4b2
ds $1
-
- ds $b
+
+wd4b3:: ; d4b3
+ ds $1
+
+ ds $5
+
+wd4b9:: ; d4b9
+ ds $1
+
+ ds $4
wd4be:: ; d4be
ds $1
@@ -2556,12 +2616,23 @@ wBoosterData_TypeChances:: ; d689
wd693:: ; d693
ds $1
-wd694:: ; d694
+wMultichoiceTextboxResult_Sam:: ; d694
+ ds $1
+
+UNION
+
+wMultichoiceTextboxResult_ChooseDeckToDuelAgainst:: ; d695
ds $1
+NEXTU
+
wd695:: ; d695
ds $1
+ENDU
+
+
+
wd696:: ; d696
ds $1