summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan Bishop <kanzure@gmail.com>2013-04-27 17:28:49 -0500
committerBryan Bishop <kanzure@gmail.com>2013-04-27 17:29:29 -0500
commit0e47273378b1f7f010e4d3e6dbab2a14dcc781ce (patch)
tree75e02dcd4019a53a41a22934fe2b50c931c2ab12
parenta238e4bd55f7934a0201a2a523c739be70820760 (diff)
parent6f6988e3d116b3d663235736ba9d9300cd3d4777 (diff)
Merge yenatch/master.
-rw-r--r--.gitignore6
-rw-r--r--INSTALL.md168
-rw-r--r--Makefile17
-rw-r--r--README.md52
-rw-r--r--battle/effect_command_pointers.asm177
-rw-r--r--battle/effect_commands.asm11200
-rw-r--r--battle/moves/move_effects.asm2243
-rw-r--r--battle/moves/move_effects_pointers.asm158
-rw-r--r--battle/moves/moves.asm505
-rw-r--r--constants.asm257
-rw-r--r--extras/chars.py1
-rw-r--r--extras/crystal.py217
-rw-r--r--hram.asm10
-rw-r--r--main.asm2918
-rw-r--r--maps/BetaAlphRuinUnsolvedPuzzleRoom.blk1
-rw-r--r--maps/BetaAzaleaTown.blk10
-rw-r--r--maps/BetaBlackthornCity.blk1
-rw-r--r--maps/BetaBlank.blk1
-rw-r--r--maps/BetaCave.blk8
-rw-r--r--maps/BetaCave2.blk5
-rw-r--r--maps/BetaCaveTestMap.blk18
-rw-r--r--maps/BetaCeladonMansion.blk1
-rw-r--r--maps/BetaCherrygroveCity.blk9
-rw-r--r--maps/BetaCianwoodCity.blk1
-rw-r--r--maps/BetaCinnabarIslandPokemonLabHallway.blk2
-rw-r--r--maps/BetaCinnabarIslandPokemonLabRoom1.blk2
-rw-r--r--maps/BetaCinnabarIslandPokemonLabRoom2.blk1
-rw-r--r--maps/BetaCinnabarIslandPokemonLabRoom3.blk1
-rw-r--r--maps/BetaElevator.blk1
-rw-r--r--maps/BetaEmptyHouse.blk15
-rw-r--r--maps/BetaGoldenrodCity.blk10
-rw-r--r--maps/BetaHerosHouse.blk1
-rw-r--r--maps/BetaHouse.blk1
-rw-r--r--maps/BetaHouse2.blk1
-rw-r--r--maps/BetaIlexForest.blk1
-rw-r--r--maps/BetaLakeOfRage.blk1
-rw-r--r--maps/BetaMahoganyTown.blk1
-rw-r--r--maps/BetaNewBarkTown.blk1
-rw-r--r--maps/BetaOlivineCity.blk4
-rw-r--r--maps/BetaPewterMuseumOfScience1F.blk2
-rw-r--r--maps/BetaPewterMuseumOfScience2F.blk1
-rw-r--r--maps/BetaPokecenterMainHouse.blk1
-rw-r--r--maps/BetaPokecenterTradeStation.blk1
-rw-r--r--maps/BetaRocketHideout1.blk5
-rw-r--r--maps/BetaRocketHideout2.blk4
-rw-r--r--maps/BetaRocketHideout3.blk5
-rw-r--r--maps/BetaRoute23EarlyVersion.blk7
-rw-r--r--maps/BetaSproutTower1.blk3
-rw-r--r--maps/BetaSproutTower2.blk9
-rw-r--r--maps/BetaSproutTower3.blk7
-rw-r--r--maps/BetaSproutTower5.blk9
-rw-r--r--maps/BetaSproutTower6.blk4
-rw-r--r--maps/BetaSproutTower7.blk8
-rw-r--r--maps/BetaSproutTower8.blk5
-rw-r--r--maps/BetaSproutTower9.blk1
-rw-r--r--maps/BetaSproutTowerCutOut1.blk1
-rw-r--r--maps/BetaSproutTowerCutOut2.blk1
-rw-r--r--maps/BetaSproutTowerCutOut3.blk1
-rw-r--r--maps/BetaSsAquaInsideCutOut.blk1
-rw-r--r--maps/BetaTeakCity.blk1
-rw-r--r--maps/BetaUnknown.blk1
-rw-r--r--maps/BetaVioletCity.blk7
-rw-r--r--maps/HallOfFame.asm4
-rw-r--r--maps/ManiasHouse.asm2
-rw-r--r--pokecrystal.bat3
-rw-r--r--preprocessor.py2
-rw-r--r--wram.asm273
67 files changed, 17176 insertions, 1220 deletions
diff --git a/.gitignore b/.gitignore
index c9260280d..094c03a17 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,8 +26,10 @@ extras/*.json
# for any of the poor souls with save game files in their working directory
baserom.sgm
baserom.sav
-pokered.sgm
-pokered.sav
+baserom.rtc
+pokecrystal.sgm
+pokecrystal.sav
+pokecrystal.rtc
# for vim configuration
# url: http://www.vim.org/scripts/script.php?script_id=441
diff --git a/INSTALL.md b/INSTALL.md
index da91a08fb..7060b5e20 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -1,4 +1,21 @@
-# Linux
+# Getting Started
+
+Compiling requires a certain Pokemon Crystal ROM:
+
+```
+Pokemon - Crystal Version (UE) (V1.0) [C][!].gbc
+md5: 9f2922b235a5eeb78d65594e82ef5dde
+```
+
+Save it as `baserom.gbc` in the repository.
+
+
+Feel free to ask us on nucleus.kafuka.org #skeetendo if something goes wrong (remember to tell where)!
+
+Don't know how to use IRC? Try [mibbit](http://chat.mibbit.com/?server=nucleus.kafuka.org&channel=#skeetendo).
+
+
+## Linux
```bash
sudo apt-get install make gcc bison git python python-setuptools
@@ -24,153 +41,38 @@ cd pokecrystal
# install python requirements
pip install -r requirements.txt
-
-make clean && make
```
-# Windows
-
-Follow these instructions to install `pokecrystal` on Microsoft Windows. Once
-installed, you can run `make` to compile `main.asm` into a ROM.
-
-## Installing cygwin
-
-Cygwin provides a virtual linux environment on Windows systems. Just get
-`setup.exe`: http://cygwin.com/install.html
-
-During the install:
-
- 1. Keep the defaults.
-
- 2. It shouldn't matter which mirror you choose, but http://mirrors.kernel.org
- seems to work.
-
- 3. Select the packages listed below.
-
-You'll be presented with a package selection screen. Select the following
-packages (hint: there's a search box).
-
- 1. `python` (installed by default)
-
- 2. `gcc` and `gcc-core` (under devel)
-
- 3. `byacc` (under devel)
-
- 4. `make` (under devel)
-
- 5. `wget` (under web)
-
- 6. `git` (under devel)
-
- 7. `mercurial` (optional, if you wish to work with pokered as well)
-
-Let cygwin finish the install. Might take a sec while all packages are
-downloading.
-
-## Installing other requirements
-
-Launch cygwin (bash). Maybe you know your way around the linux terminal. If not, a
-crash course:
-
-```bash
-# list files in current directory
-ls
-
-# show current directory
-pwd
-
-# change directory
-cd /away/we/go
+To compile the ROM from ASM source:
```
-
-The next step is building `rgbds`, the GB assembler. Type:
-
-```bash
-# download rgbds source code
-git clone git://github.com/bentley/rgbds.git
-
-# compile rgbds
-cd rgbds
-YACC=byacc make
-
-# make rgbds accessible for all time
-export PATH=$PATH:`pwd`
-echo "export PATH=$PATH:`pwd`" >> ~/.bashrc
-
-# check if rgbasm is installed now
-which rgbasm
-```
-
-If that fails (it shouldn't), you can download binaries like so:
-
-```bash
-# download rgbds binaries
-wget http://diyhpl.us/~bryan/irc/pokered/rgbds/rgbds.zip --output-document=rgbds.zip
-
-# unzip
-unzip rgbds.zip
-
-# make rgbds accessible for all time
-export PATH=$PATH:`pwd`/rgbds
-echo "export PATH=$PATH:`pwd`/rgbds" >> ~/.bashrc
-
-# clean up that zip file
-rm rgbds.zip
+make clean && make
```
-The next step is to install `unittest2`, unless you installed python2.7
-earlier:
-
-```bash
-cd ~
-wget http://peak.telecommunity.com/dist/ez_setup.py
-python ez_setup.py
-easy_install unittest2
-```
+That will take between 3 and 15 seconds, depending on your computer. If you see
+`cmp baserom.gbc pokecrystal.gbc` as the last line, the build was successful! Rejoice!
-Now you should be able to build `pokecrystal` for the first time:
-```bash
-cd ~
-git clone git://github.com/kanzure/pokecrystal.git
-cd pokecrystal
-```
+## Windows
-The final requirement is downloading a certain Pokemon Crystal ROM:
+Set up [GitHub for Windows](http://windows.github.com/) and clone this repository.
-```
-Pokemon - Crystal Version (UE) (V1.0) [C][!].gbc
-md5: 9f2922b235a5eeb78d65594e82ef5dde
-```
+If you haven't already, get [Python 2.7](http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi) ([64-bit](http://www.python.org/ftp/python/2.7.3/python-2.7.3.amd64.msi)).
-Save it as `C:\cygwin\home\(your username)\pokecrystal\baserom.gbc`. You can
-check the md5 of a file by typing `md5sum baserom.gbc`.
+Extract the following files from the [RGBDS](https://github.com/downloads/bentley/rgbds/rgbds-0.0.1.zip) package into the repository:
+`rgbasm.exe`
+`rgbds.exe`
+`rgbfix.exe`
+`rgblink.exe`
-To compile the ROM from ASM source, type:
+Install [make](http://gnuwin32.sourceforge.net/downlinks/make.php) for Windows.
-```bash
-make
-```
+To compile the ROM from ASM source, run `pokecrystal.bat`.
That will take between 3 and 15 seconds, depending on your computer. If you see
-`cmp baserom.gbc pokecrystal.gbc` as the last line, the build was successful!
-Rejoice!
-
-Now you may try messing around with `main.asm`, or just do whatever you wanted
-to.
-
-To build again, you should use the following command:
-
-```bash
-make clean && make
-```
+`FC: no differences encountered`, the build was successful! Rejoice!
-Feel free to ask us on nucleus.kafuka.org #skeetendo if something goes wrong
-(remember to tell where)! Don't know how to use IRC? Try
-[mibbit](http://mibbit.com/) or something.
+Now you may try messing around with `main.asm`, or just do whatever you wanted to.
-# Contributing changes
-## Setting up a public git repo
+# Contributions are welcome!
-For those uninitiated with git-based collaboration, and who do not want to setup a server to host git repositories, use GitHub. Register on GitHub and follow [this tutorial to setup ssh keys](https://help.github.com/articles/generating-ssh-keys). Then go to [the pokecrystal repo](https://github.com/kanzure/pokecrystal) and click the giant "fork" button. This will bring you to a page with some instructions regarding `git remote` (follow these steps in your pokecrystal folder).
diff --git a/Makefile b/Makefile
index 3d917f941..ce6258cc8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,7 @@
.SUFFIXES: .asm .tx .o .gbc .png .2bpp .lz
-TEXTFILES = text/sweethoney.tx \
+TEXTFILES = \
+ text/sweethoney.tx \
text/phone/bill.tx \
text/phone/elm.tx \
text/phone/mom.tx \
@@ -10,7 +11,8 @@ TEXTFILES = text/sweethoney.tx \
text/common_3.tx \
main.tx
-VERTGFX = gfx/pics/%.png \
+VERTGFX = \
+ gfx/pics/%.png \
gfx/trainers/%.png
HORIZGFX = $(filter-out gfx/%.png, $(VERTGFX))
@@ -24,10 +26,16 @@ HORIZGFX = $(filter-out gfx/%.png, $(VERTGFX))
# so take care to reorganize accordingly
all: pokecrystal.gbc
+ cmp baserom.gbc $<
+
+win: pokecrystal.gbc
+ fc baserom.gbc $<
clean:
rm -f main.tx pokecrystal.o pokecrystal.gbc ${TEXTFILES}
+winclean:
+ del main.tx pokecrystal.o pokecrystal.gbc .\text\sweethoney.tx .\text\phone\bill.tx .\text\phone\elm.tx .\text\phone\mom.tx .\text\phone\trainers1.tx .\text\common.tx .\text\common_2.tx .\text\common_3.tx
pokecrystal.o: pokecrystal.asm constants.asm wram.asm ${TEXTFILES}
rgbasm -o pokecrystal.o pokecrystal.asm
@@ -38,7 +46,6 @@ pokecrystal.o: pokecrystal.asm constants.asm wram.asm ${TEXTFILES}
pokecrystal.gbc: pokecrystal.o
rgblink -o $@ $<
rgbfix -Cjv -i BYTE -k 01 -l 0x33 -m 0x10 -p 0 -r 3 -t PM_CRYSTAL $@
- cmp baserom.gbc $@
lzs: ${VERTGFX} ${HORIZGFX}
@@ -51,8 +58,8 @@ front.png: tiles.png
cd extras && python gfx.py png-to-lz --front $@ $(OBJECT_DIRECTORY)/tiles.2bpp
tiles.png:
cd extras && python gfx.py png-to-2bpp $@
-.png: ${VERTGFX}
+.png:: ${VERTGFX}
cd extras && python gfx.py png-to-lz --vert $@
-.png: ${HORIZGFX}
+.png:: ${HORIZGFX}
cd extras && python gfx.py png-to-lz $@
diff --git a/README.md b/README.md
index aed427f86..f8b59dddd 100644
--- a/README.md
+++ b/README.md
@@ -4,65 +4,29 @@ This is a hand-crafted disassembly of Pokémon Crystal.
The source code in this project successfully converts back into a ROM image. All source code is meticulously commented.
+
## Base ROM
The following ROM is required for compiling:
+```
Pokemon - Crystal Version (UE) (V1.0) [C][!].gbc
-
md5: 9f2922b235a5eeb78d65594e82ef5dde
-
-Eventually this will not be necessary.
-
-## Installing
-
-Simple.
-
-``` bash
-sudo apt-get install make gcc bison git python python-setuptools
-
-# unittest2 is required if using python2.6
-sudo easy_install unittest2
-sudo easy_install pip
-
-# download rgbds source code
-git clone git://github.com/bentley/rgbds.git
-
-# compile rgbds
-cd rgbds
-make
-sudo make install
-
-# check if rgbasm is installed now
-which rgbasm
-
-# download pokecrystal
-git clone https://github.com/kanzure/pokecrystal.git
-cd pokecrystal
-
-pip install -r requirements.txt
-
-make clean && make
```
-Also, there are [Windows installation instructions](https://github.com/kanzure/pokecrystal/blob/master/INSTALL.md).
-
-## Assembling
-
-* To assemble, first install RGBDS and put it in your path. The version of RGBDS needed is [rgbds-linux](https://github.com/bentley/rgbds/).
-
-* Next, copy the Pokémon ROM to this directory as "baserom.gbc".
-
-* Then run "make" in your shell.
+Eventually this will not be necessary.
-* This will output a file named "pokecrystal.gbc".
## See also
* disassembly of [Pokémon Red](http://bitbucket.org/iimarckus/pokered).
+
## Contributing
-* Hang out with us on IRC, nucleus.kafuka.org #skeetendo (you can [ use mibbit](http://chat.mibbit.com/) to this server)
+* Hang out with us on IRC: `nucleus.kafuka.org #skeetendo` (for example, by
+using [mibbit](http://chat.mibbit.com/)).
+
+* Are we missing something? Make a pull request! Contributions are welcome.
* Tackle some [issues](https://github.com/kanzure/pokecrystal/issues)!
diff --git a/battle/effect_command_pointers.asm b/battle/effect_command_pointers.asm
new file mode 100644
index 000000000..a8f382693
--- /dev/null
+++ b/battle/effect_command_pointers.asm
@@ -0,0 +1,177 @@
+; 3fd28
+ dw BattleCommand01 ; 34084
+ dw BattleCommand02 ; 343db
+ dw BattleCommand03 ; 34541
+ dw BattleCommand04 ; 34555
+ dw BattleCommand05 ; 34631
+ dw BattleCommand06 ; 352dc
+ dw BattleCommand07 ; 346d2
+ dw BattleCommand08 ; 34cfd
+ dw BattleCommand09 ; 34d32
+ dw BattleCommand0a ; 34eee
+ dw BattleCommand0b ; 34f60
+ dw BattleCommand0c ; 35004
+ dw BattleCommand0d ; 35023
+ dw BattleCommand0e ; 3505e
+ dw BattleCommand0f ; 35175
+ dw BattleCommand10 ; 351ad
+ dw BattleCommand11 ; 351c0
+ dw BattleCommand12 ; 35250
+ dw BattleCommand13 ; 35eee
+ dw BattleCommand14 ; 35e5c
+ dw BattleCommand15 ; 35fff
+ dw BattleCommand16 ; 36008
+ dw BattleCommand17 ; 3608c
+ dw BattleCommand18 ; 36102
+ dw BattleCommand19 ; 36165
+ dw BattleCommand1a ; 37380
+ dw BattleCommand1b ; 373c9
+ dw BattleCommand1c ; 361e4
+ dw BattleCommand1d ; 362e3
+ dw BattleCommand1e ; 3705c
+ dw BattleCommand1f ; 3707f
+ dw BattleCommand20 ; 3710e
+ dw BattleCommand21 ; 36671
+ dw BattleCommand22 ; 366e5
+ dw BattleCommand23 ; 3680f
+ dw BattleCommand24 ; 369b6
+ dw BattleCommand25 ; 36aa0
+ dw BattleCommand26 ; 36af3
+ dw BattleCommand27 ; 36cb2
+ dw BattleCommand28 ; 36c7e
+ dw BattleCommand29 ; 36c98
+ dw BattleCommand2a ; 36d3b
+ dw BattleCommand2b ; 36d1d
+ dw BattleCommand2c ; 3713e
+ dw BattleCommand2d ; 371cd
+ dw BattleCommand2e ; 372fc
+ dw BattleCommand2f ; 35f2c
+ dw BattleCommand30 ; 36dc7
+ dw BattleCommand31 ; 36e7c
+ dw BattleCommand32 ; 36f0b
+ dw BattleCommand33 ; 36f46
+ dw BattleCommand34 ; 37418
+ dw BattleCommand35 ; 36f9d
+ dw BattleCommand36 ; 36fe1
+ dw BattleCommand37 ; 36fed
+ dw BattleCommand38 ; 37e85
+ dw BattleCommand39 ; 36b4d
+ dw BattleCommand3a ; 36b3a
+ dw BattleCommand3b ; 36c2d
+ dw BattleCommand3c ; 36c2c
+ dw BattleCommand3d ; 36751
+ dw BattleCommand3e ; 3671a
+ dw BattleCommand3f ; 35726
+ dw BattleCommand40 ; 35813
+ dw BattleCommand41 ; 35864
+ dw BattleCommand42 ; 35926
+ dw BattleCommand43 ; 359d0
+ dw BattleCommand44 ; 359e6
+ dw BattleCommand45 ; 35a53
+ dw BattleCommand46 ; 35a74
+ dw BattleCommand47 ; 35b16
+ dw BattleCommand48 ; 35b33
+ dw BattleCommand49 ; 35bff
+ dw BattleCommand4a ; 35c0f
+ dw BattleCommand4b ; 35c94
+ dw BattleCommand4c ; 35cc9
+ dw BattleCommand4d ; 36ac9
+ dw BattleCommand4e ; 346b2
+ dw BattleCommand4f ; 346cd
+ dw BattleCommand50 ; 37492
+ dw BattleCommand51 ; 37517
+ dw BattleCommand52 ; 37536
+ dw BattleCommand53 ; 37563
+ dw BattleCommand54 ; 37588
+ dw BattleCommand55 ; 37618
+ dw BattleCommand56 ; 37683
+ dw BattleCommand57 ; 376a0
+ dw BattleCommand58 ; 376c2
+ dw BattleCommand59 ; 376f8
+ dw BattleCommand5a ; 3766f
+ dw BattleCommand5b ; 37718
+ dw BattleCommand5c ; 37734
+ dw BattleCommand5d ; 37791
+ dw BattleCommand5e ; 37792
+ dw BattleCommand5f ; 377ce
+ dw BattleCommand60 ; 3784b
+ dw BattleCommand61 ; 37874
+ dw BattleCommand62 ; 35612
+ dw BattleCommand63 ; 3790e
+ dw BattleCommand64 ; 37939
+ dw BattleCommand65 ; 37972
+ dw BattleCommand66 ; 37991
+ dw BattleCommand67 ; 379c9
+ dw BattleCommand68 ; 37b1d
+ dw BattleCommand69 ; 37b39
+ dw BattleCommand6a ; 37b74
+ dw BattleCommand6b ; 37b78
+ dw BattleCommand6c ; 37b7c
+ dw BattleCommand6d ; 37be8
+ dw BattleCommand6e ; 37bf4
+ dw BattleCommand6f ; 37c07
+ dw BattleCommand70 ; 361ac
+ dw BattleCommand71 ; 361b0
+ dw BattleCommand72 ; 361b4
+ dw BattleCommand73 ; 361b8
+ dw BattleCommand74 ; 361bc
+ dw BattleCommand75 ; 361c0
+ dw BattleCommand76 ; 361c4
+ dw BattleCommand77 ; 361c8
+ dw BattleCommand78 ; 361cc
+ dw BattleCommand79 ; 361d0
+ dw BattleCommand7a ; 361d4
+ dw BattleCommand7b ; 361d8
+ dw BattleCommand7c ; 361dc
+ dw BattleCommand7d ; 361e0
+ dw BattleCommand7e ; 362ad
+ dw BattleCommand7f ; 362b1
+ dw BattleCommand80 ; 362b5
+ dw BattleCommand81 ; 362b9
+ dw BattleCommand82 ; 362bd
+ dw BattleCommand83 ; 362c1
+ dw BattleCommand84 ; 362c5
+ dw BattleCommand85 ; 362c9
+ dw BattleCommand86 ; 362cd
+ dw BattleCommand87 ; 362d1
+ dw BattleCommand88 ; 362d5
+ dw BattleCommand89 ; 362d9
+ dw BattleCommand8a ; 362dd
+ dw BattleCommand8b ; 362e1
+ dw BattleCommand8c ; 363b8
+ dw BattleCommand8d ; 363e9
+ dw BattleCommand8e ; 3644c
+ dw BattleCommand8f ; 3646a
+ dw BattleCommand90 ; 34ecc
+ dw BattleCommand91 ; 34fdb
+ dw BattleCommand92 ; 34fd1
+ dw BattleCommand93 ; 34ffd
+ dw BattleCommand94 ; 36a82
+ dw BattleCommand95 ; 37c1a
+ dw BattleCommand96 ; 37c55
+ dw BattleCommand97 ; 36f1d
+ dw BattleCommand98 ; 36f25
+ dw BattleCommand99 ; 36f2f
+ dw BattleCommand9a ; 37c95
+ dw BattleCommand9b ; 37d0d
+ dw BattleCommand9c ; 37d34
+ dw BattleCommand9d ; 37ce6
+ dw BattleCommand9e ; 37d02
+ dw BattleCommand9f ; 37d94
+ dw BattleCommanda0 ; 36778
+ dw BattleCommanda1 ; 35461
+ dw BattleCommanda2 ; 3527b
+ dw BattleCommanda3 ; 34833
+ dw BattleCommanda4 ; 36500
+ dw BattleCommanda5 ; 35165
+ dw BattleCommanda6 ; 365af
+ dw BattleCommanda7 ; 365c3
+ dw BattleCommanda8 ; 355b5
+ dw BattleCommanda9 ; 355d5
+ dw BattleCommandaa ; 37e80
+ dw BattleCommandab ; 34f57
+ dw BattleCommandac ; 3658f
+ dw BattleCommandad ; 351a5
+ dw BattleCommandae ; 35197
+ dw BattleCommandaf ; 365a7
+; 3fe86
diff --git a/battle/effect_commands.asm b/battle/effect_commands.asm
new file mode 100644
index 000000000..c6b0c1c7a
--- /dev/null
+++ b/battle/effect_commands.asm
@@ -0,0 +1,11200 @@
+DoPlayerTurn: ; 34000
+ call SetPlayerTurn
+
+ ld a, [$d0ec]
+ and a
+ ret nz
+
+ jr DoTurn
+; 3400a
+
+
+DoEnemyTurn: ; 3400a
+ call SetEnemyTurn
+
+ ld a, [InLinkBattle]
+ and a
+ jr z, DoTurn
+
+ ld a, [$d430]
+ cp $e
+ jr z, DoTurn
+ cp $4
+ ret nc
+
+ ; fallthrough
+; 3401d
+
+
+DoTurn: ; 3401d
+; Read in and execute the user's move effects for this turn.
+
+ xor a
+ ld [$c6b4], a
+
+; Effect command checkturn is called for every move.
+ call CheckTurn
+
+ ld a, [$c6b4]
+ and a
+ ret nz
+
+ call UpdateMoveData
+; 3402c
+
+
+DoMove: ; 3402c
+; Get the user's move effect.
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ ld c, a
+ ld b, 0
+ ld hl, MoveEffectsPointers
+ add hl, bc
+ add hl, bc
+ ld a, BANK(MoveEffectsPointers)
+ call GetFarHalfword
+
+ ld de, BattleScriptBuffer
+
+.GetMoveEffect
+ ld a, BANK(MoveEffects)
+ call GetFarByte
+ inc hl
+ ld [de], a
+ inc de
+ cp $ff
+ jr nz, .GetMoveEffect
+
+; Start at the first command.
+ ld hl, BattleScriptBuffer
+ ld a, l
+ ld [BattleScriptBufferLoc], a
+ ld a, h
+ ld [BattleScriptBufferLoc + 1], a
+
+.ReadMoveEffectCommand
+
+; ld a, [BattleScriptBufferLoc++]
+ ld a, [BattleScriptBufferLoc]
+ ld l, a
+ ld a, [BattleScriptBufferLoc + 1]
+ ld h, a
+
+ ld a, [hli]
+
+ push af
+ ld a, l
+ ld [BattleScriptBufferLoc], a
+ ld a, h
+ ld [BattleScriptBufferLoc + 1], a
+ pop af
+
+; $fe is used to terminate branches without ending the read cycle.
+ cp $fe
+ ret nc
+
+; The rest of the commands (01-af) are read from BattleCommandPointers.
+ push bc
+ dec a
+ ld c, a
+ ld b, 0
+ ld hl, BattleCommandPointers
+ add hl, bc
+ add hl, bc
+ pop bc
+
+ ld a, BANK(BattleCommandPointers)
+ call GetFarHalfword
+
+ call .DoMoveEffectCommand
+
+ jr .ReadMoveEffectCommand
+
+.DoMoveEffectCommand
+ jp [hl]
+; 34084
+
+
+CheckTurn:
+BattleCommand01: ; 34084
+; checkturn
+
+; Repurposed as hardcoded turn handling. Useless as a command.
+
+; Move $ff immediately ends the turn.
+ ld a, BATTLE_VARS_MOVE
+ call CleanGetBattleVarPair
+ inc a
+ jp z, Function0x34385
+
+ xor a
+ ld [AttackMissed], a
+ ld [$c70d], a
+ ld [$c689], a
+ ld [AlreadyDisobeyed], a
+ ld [AlreadyFailed], a
+ ld [$c73e], a
+
+ ld a, 10 ; 1.0
+ ld [TypeModifier], a
+
+ ld a, [hBattleTurn]
+ and a
+ jp nz, CheckEnemyTurn
+
+
+CheckPlayerTurn:
+
+; check recharge
+ ld hl, PlayerSubStatus4
+ bit 5, [hl]
+ jr z, .CheckSleep
+ res 5, [hl]
+
+; 'must recharge!'
+ ld hl, MustRechargeText
+ call FarBattleTextBox
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckSleep
+ ld hl, BattleMonStatus
+ ld a, [hl]
+ and $7
+ jr z, .CheckFrozen
+ dec a
+ ld [BattleMonStatus], a
+ and $7
+ jr z, .WokeUp
+ xor a
+ ld [$cfca], a
+ ld de, ANIM_SLEEP
+ call FarPlayBattleAnimation
+ jr .FastAsleep
+
+
+.WokeUp
+; 'woke up!'
+ ld hl, WokeUpText
+ call FarBattleTextBox
+
+ call CantMove
+ call $399c
+ ld hl, $5f48
+ call CallBankF
+ ld a, $1
+ ld [$ffd4], a
+ ld hl, PlayerSubStatus1
+ res 0, [hl]
+ jr .CheckFrozen
+
+
+.FastAsleep
+; 'fast asleep!'
+ ld hl, FastAsleepText
+ call FarBattleTextBox
+
+; Snore and Sleep Talk bypass sleep.
+ ld a, [CurPlayerMove]
+ cp SNORE
+ jr z, .CheckFrozen
+ cp SLEEP_TALK
+ jr z, .CheckFrozen
+ call CantMove
+ jp Function0x34385
+
+
+.CheckFrozen
+ ld hl, BattleMonStatus
+ bit 5, [hl]
+ jr z, .CheckFlinch
+
+; Flame Wheel and Sacred Fire thaw the user.
+ ld a, [CurPlayerMove]
+ cp FLAME_WHEEL
+ jr z, .CheckFlinch
+ cp SACRED_FIRE
+ jr z, .CheckFlinch
+
+; 'frozen solid!'
+ ld hl, FrozenSolidText
+ call FarBattleTextBox
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckFlinch
+ ld hl, PlayerSubStatus3
+ bit 3, [hl] ; flinch
+ jr z, .CheckDisabled
+
+ res 3, [hl]
+
+; 'flinched!'
+ ld hl, FlinchedText
+ call FarBattleTextBox
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckDisabled
+ ld hl, PlayerDisableCount
+ ld a, [hl]
+ and a
+ jr z, .CheckConfused
+ dec a
+ ld [hl], a
+ and $f
+ jr nz, .CheckConfused
+ ld [hl], a
+ ld [DisabledMove], a
+
+; 'disabled no more!'
+ ld hl, DisabledNoMoreText
+ call FarBattleTextBox
+
+
+.CheckConfused
+ ld a, [PlayerSubStatus3]
+ add a
+ jr nc, .CheckAttract
+ ld hl, PlayerConfuseCount
+ dec [hl]
+ jr nz, .Confused
+
+ ld hl, PlayerSubStatus3
+ res 7, [hl]
+
+; 'confused no more!'
+ ld hl, ConfusedNoMoreText
+ call FarBattleTextBox
+
+ jr .CheckAttract
+
+
+.Confused
+; 'confused!'
+ ld hl, IsConfusedText
+ call FarBattleTextBox
+
+ xor a
+ ld [$cfca], a
+ ld de, ANIM_CONFUSED
+ call FarPlayBattleAnimation
+
+; 50% chance of hitting itself
+ call FarBattleRNG
+ cp $80
+ jr nc, .CheckAttract
+
+ ld hl, PlayerSubStatus3
+ ld a, [hl]
+ and $80
+ ld [hl], a
+
+ call HitConfusion
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckAttract
+ ld a, [PlayerSubStatus1]
+ add a ; check bit 7
+ jr nc, .CheckDisabledMove
+
+; 'in love with'
+ ld hl, InLoveWithText
+ call FarBattleTextBox
+
+ xor a
+ ld [$cfca], a
+
+ ld de, ANIM_INLOVE
+ call FarPlayBattleAnimation
+
+; 50% chance of infatuation
+ call FarBattleRNG
+ cp $80
+ jr c, .CheckDisabledMove
+
+; 'infatuation kept it from attacking!'
+ ld hl, InfatuationText
+ call FarBattleTextBox
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckDisabledMove
+; We can't disable a move that doesn't exist.
+ ld a, [DisabledMove]
+ and a
+ jr z, .CheckParalyzed
+
+; Are we using the disabled move?
+ ld hl, CurPlayerMove
+ cp [hl]
+ jr nz, .CheckParalyzed
+
+ call MoveDisabled
+ call CantMove
+ jp Function0x34385
+
+
+.CheckParalyzed
+ ld hl, BattleMonStatus
+ bit 6, [hl]
+ ret z
+
+; 25% chance to be fully paralyzed
+ call FarBattleRNG
+ cp $3f
+ ret nc
+
+; 'fully paralyzed!'
+ ld hl, FullyParalyzedText
+ call FarBattleTextBox
+ call CantMove
+ jp Function0x34385
+; 341f0
+
+
+CantMove: ; 341f0
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ res 6, [hl]
+
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ ld a, [hl]
+ and $ec
+ ld [hl], a
+
+ call ResetFuryCutterCount
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ cp FLY
+ jr z, .asm_3420f
+
+ cp $5b
+ ret nz
+
+.asm_3420f
+ res 5, [hl]
+ res 6, [hl]
+ jp Function0x37ece
+; 34216
+
+
+
+Function0x34216: ; 34216
+ call SwitchTurn
+ call CantMove
+ jp SwitchTurn
+; 3421f
+
+
+
+CheckEnemyTurn: ; 3421f
+
+; check recharge
+ ld hl, EnemySubStatus4
+ bit 5, [hl]
+ jr z, .CheckSleep
+ res 5, [hl]
+
+; 'must recharge!'
+ ld hl, MustRechargeText
+ call FarBattleTextBox
+ call CantMove
+ jp Function0x34385
+
+
+.CheckSleep
+ ld hl, EnemyMonStatus
+ ld a, [hl]
+ and $7
+ jr z, .CheckFrozen
+ dec a
+ ld [EnemyMonStatus], a
+ and a
+ jr z, .WokeUp
+
+; 'fast asleep!'
+ ld hl, FastAsleepText
+ call FarBattleTextBox
+ xor a
+ ld [$cfca], a
+ ld de, ANIM_SLEEP
+ call FarPlayBattleAnimation
+ jr .FastAsleep
+
+
+.WokeUp
+; 'woke up!'
+ ld hl, WokeUpText
+ call FarBattleTextBox
+ call CantMove
+ call $39b0
+ ld hl, $6036
+ call CallBankF
+ ld a, $1
+ ld [$ffd4], a
+ ld hl, EnemySubStatus1
+ res 0, [hl]
+ jr .CheckFrozen
+
+
+.FastAsleep
+; Snore and Sleep Talk bypass sleep.
+ ld a, [CurEnemyMove]
+ cp SNORE
+ jr z, .CheckFrozen
+ cp SLEEP_TALK
+ jr z, .CheckFrozen
+ call CantMove
+ jp Function0x34385
+
+
+.CheckFrozen
+ ld hl, EnemyMonStatus
+ bit 5, [hl]
+ jr z, .CheckFlinch
+ ld a, [CurEnemyMove]
+ cp $ac
+ jr z, .CheckFlinch
+ cp $dd
+ jr z, .CheckFlinch
+
+; 'frozen solid!'
+ ld hl, FrozenSolidText
+ call FarBattleTextBox
+ call CantMove
+ jp Function0x34385
+
+
+.CheckFlinch
+ ld hl, EnemySubStatus3
+ bit 3, [hl]
+ jr z, .CheckDisabled
+
+ res 3, [hl]
+
+; 'flinched!'
+ ld hl, FlinchedText
+ call FarBattleTextBox
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckDisabled
+ ld hl, EnemyEncoreCount
+ ld a, [hl]
+ and a
+ jr z, .CheckConfused
+
+ dec a
+ ld [hl], a
+ and $f
+ jr nz, .CheckConfused
+
+ ld [hl], a
+ ld [EnemyEncoredMove], a
+
+; 'disabled no more!'
+ ld hl, DisabledNoMoreText
+ call FarBattleTextBox
+
+
+.CheckConfused
+ ld a, [EnemySubStatus3]
+ add a
+ jr nc, .CheckAttract
+
+ ld hl, $c67b
+ dec [hl]
+ jr nz, .Confused
+
+ ld hl, EnemySubStatus3
+ res 7, [hl]
+
+; 'confused no more!'
+ ld hl, ConfusedNoMoreText
+ call FarBattleTextBox
+
+ jr .CheckAttract
+
+
+.Confused
+; 'confused!'
+ ld hl, IsConfusedText
+ call FarBattleTextBox
+
+ xor a
+ ld [$cfca], a
+ ld de, ANIM_CONFUSED
+ call FarPlayBattleAnimation
+
+; 50% chance of hitting itself
+ call FarBattleRNG
+ cp $80
+ jr nc, .CheckAttract
+
+ ld hl, EnemySubStatus3
+ ld a, [hl]
+ and %10000000
+ ld [hl], a
+
+; 'hurt itself in its confusion!'
+ ld hl, HurtItselfText
+ call FarBattleTextBox
+
+ call Function0x355dd
+
+ call BattleCommand62
+
+ call BattleCommand0a
+
+ xor a
+ ld [$cfca], a
+
+; Flicker the monster pic unless flying or underground.
+ ld de, $0115
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call CleanGetBattleVarPair
+ and $60
+ call z, PlayFXAnimID
+
+ ld c, $1
+ call Function0x35d1c
+
+ call BattleCommand0c
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckAttract
+ ld a, [EnemySubStatus1]
+ add a ; check bit 7
+ jr nc, .CheckDisabledMove
+
+; 'in love with'
+ ld hl, InLoveWithText
+ call FarBattleTextBox
+
+ xor a
+ ld [$cfca], a
+
+ ld de, ANIM_INLOVE
+ call FarPlayBattleAnimation
+
+; 50% chance of infatuation
+ call FarBattleRNG
+ cp $80
+ jr c, .CheckDisabledMove
+
+; 'infatuation kept it from attacking!'
+ ld hl, InfatuationText
+ call FarBattleTextBox
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckDisabledMove
+; We can't disable a move that doesn't exist.
+ ld a, [EnemyEncoredMove]
+ and a
+ jr z, .CheckParalyzed
+
+; Are we using the disabled move?
+ ld hl, CurEnemyMove
+ cp [hl]
+ jr nz, .CheckParalyzed
+
+ call MoveDisabled
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckParalyzed
+ ld hl, EnemyMonStatus
+ bit 6, [hl]
+ ret z
+
+; 25% chance to be fully paralyzed
+ call FarBattleRNG
+ cp $3f
+ ret nc
+
+; 'fully paralyzed!'
+ ld hl, FullyParalyzedText
+ call FarBattleTextBox
+
+ call CantMove
+
+ ; fallthrough
+; 34385
+
+
+Function0x34385: ; 34385
+ ld a, $1
+ ld [$c6b4], a
+ jp ResetDamage
+; 3438d
+
+
+MoveDisabled: ; 3438d
+
+; Make sure any charged moves fail
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ res 4, [hl]
+
+ ld a, BATTLE_VARS_MOVE
+ call CleanGetBattleVarPair
+ ld [$d265], a
+ call $34f8
+
+; 'disabled!'
+ ld hl, DisabledMoveText
+ jp FarBattleTextBox
+; 343a5
+
+
+HitConfusion: ; 343a5
+
+; 'hurt itself in its confusion!'
+ ld hl, HurtItselfText
+ call FarBattleTextBox
+
+ xor a
+ ld [CriticalHit], a
+
+ call Function0x355dd
+
+ call BattleCommand62
+
+ call BattleCommand0a
+
+ xor a
+ ld [$cfca], a
+
+; Flicker the monster pic unless flying or underground.
+ ld de, $0115
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call CleanGetBattleVarPair
+ and $60
+ call z, PlayFXAnimID
+
+ ld hl, $5f48
+ call CallBankF
+
+ ld a, $1
+ ld [$ffd4], a
+
+ ld c, $1
+ call Function0x35d7e
+
+ jp BattleCommand0c
+; 343db
+
+
+BattleCommand02: ; 343db
+; checkobedience
+
+; Enemy can't disobey
+ ld a, [hBattleTurn]
+ and a
+ ret nz
+
+ call Function0x34548
+ ret nz
+
+; If we've already checked this turn
+ ld a, [AlreadyDisobeyed]
+ and a
+ ret nz
+
+ xor a
+ ld [AlreadyDisobeyed], a
+
+; No obedience in link battles (since no handling exists for enemy)
+ ld a, [InLinkBattle]
+ and a
+ ret nz
+
+ ld a, [$cfc0]
+ and a
+ ret nz
+
+; If the monster's id doesn't match the player's,
+; some conditions need to be met.
+ ld a, PartyMon1ID - PartyMon1
+ call BattlePartyAttr
+
+ ld a, [PlayerID]
+ cp [hl]
+ jr nz, .obeylevel
+ inc hl
+ ld a, [PlayerID + 1]
+ cp [hl]
+ ret z
+
+
+.obeylevel
+; The maximum obedience level is constrained by owned badges:
+ ld hl, JohtoBadges
+
+; risingbadge
+ bit 7, [hl]
+ ld a, 101
+ jr nz, .getlevel
+
+; stormbadge
+ bit 5, [hl]
+ ld a, 70
+ jr nz, .getlevel
+
+; fogbadge
+ bit 3, [hl]
+ ld a, 50
+ jr nz, .getlevel
+
+; hivebadge
+ bit 1, [hl]
+ ld a, 30
+ jr nz, .getlevel
+
+; no badges
+ ld a, 10
+
+
+.getlevel
+; c = obedience level
+; d = monster level
+; b = c + d
+
+ ld b, a
+ ld c, a
+
+ ld a, [BattleMonLevel]
+ ld d, a
+
+ add b
+ ld b, a
+
+; No overflow (this should never happen)
+ jr nc, .checklevel
+ ld b, $ff
+
+
+.checklevel
+; If the monster's level is lower than the obedience level, it will obey.
+ ld a, c
+ cp d
+ ret nc
+
+
+; Random number from 0 to obedience level + monster level
+.rand1
+ call FarBattleRNG
+ swap a
+ cp b
+ jr nc, .rand1
+
+; The higher above the obedience level the monster is,
+; the more likely it is to disobey.
+ cp c
+ ret c
+
+; Sleep-only moves have separate handling, and a higher chance of
+; being ignored. Lazy monsters like their sleep.
+ call IgnoreSleepOnly
+ ret c
+
+
+; Another random number from 0 to obedience level + monster level
+.rand2
+ call FarBattleRNG
+ cp b
+ jr nc, .rand2
+
+; A second chance.
+ cp c
+ jr c, .UseInstead
+
+
+; No hope of using a move now.
+
+; b = number of levels the monster is above the obedience level
+ ld a, d
+ sub c
+ ld b, a
+
+; The chance of napping is the difference out of 256.
+ call FarBattleRNG
+ swap a
+ sub b
+ jr c, .Nap
+
+; The chance of not hitting itself is the same.
+ cp b
+ jr nc, .DoNothing
+
+; 'won't obey!'
+ ld hl, WontObeyText
+ call FarBattleTextBox
+
+ call HitConfusion
+
+ jp Function0x3450c
+
+
+.Nap
+ call FarBattleRNG
+ add a
+ swap a
+ and 7
+ jr z, .Nap
+
+ ld [BattleMonStatus], a
+
+; 'began to nap!'
+ ld hl, BeganToNapText
+ jr .Print
+
+
+.DoNothing
+ call FarBattleRNG
+ and 3
+
+; 'loafing around!'
+ ld hl, LoafingAroundText
+ and a
+ jr z, .Print
+
+; 'won't obey!'
+ ld hl, WontObeyText
+ dec a
+ jr z, .Print
+
+; 'turned away!'
+ ld hl, TurnedAwayText
+ dec a
+ jr z, .Print
+
+; 'ignored orders!'
+ ld hl, IgnoredOrdersText
+
+.Print
+ call FarBattleTextBox
+ jp Function0x3450c
+
+
+.UseInstead
+
+; Can't use another move if the monster only has one!
+ ld a, [BattleMonMove2]
+ and a
+ jr z, .DoNothing
+
+; Don't bother trying to handle Disable.
+ ld a, [DisabledMove]
+ and a
+ jr nz, .DoNothing
+
+
+ ld hl, BattleMonPP
+ ld de, BattleMonMoves
+ ld b, 0
+ ld c, NUM_MOVES
+
+.GetTotalPP
+ ld a, [hli]
+ and $3f ; exclude pp up
+ add b
+ ld b, a
+
+ dec c
+ jr z, .CheckMovePP
+
+; Stop at undefined moves.
+ inc de
+ ld a, [de]
+ and a
+ jr nz, .GetTotalPP
+
+
+.CheckMovePP
+ ld hl, BattleMonPP
+ ld a, [CurMoveNum]
+ ld e, a
+ ld d, 0
+ add hl, de
+
+; Can't use another move if only one move has PP.
+ ld a, [hl]
+ and $3f
+ cp b
+ jr z, .DoNothing
+
+
+; Make sure we can actually use the move once we get there.
+ ld a, 1
+ ld [AlreadyDisobeyed], a
+
+ ld a, [$cfa3]
+ ld b, a
+
+; Save the move we originally picked for afterward.
+ ld a, [CurMoveNum]
+ ld c, a
+ push af
+
+
+.RandomMove
+ call FarBattleRNG
+ and 3
+
+ cp b
+ jr nc, .RandomMove
+
+; Not the move we were trying to use.
+ cp c
+ jr z, .RandomMove
+
+; Make sure it has PP.
+ ld [CurMoveNum], a
+ ld hl, BattleMonPP
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld a, [hl]
+ and $3f
+ jr z, .RandomMove
+
+
+; Use it.
+ ld a, [CurMoveNum]
+ ld c, a
+ ld b, 0
+ ld hl, BattleMonMoves
+ add hl, bc
+ ld a, [hl]
+ ld [CurPlayerMove], a
+
+ call SetPlayerTurn
+ call UpdateMoveData
+ call DoMove
+
+
+; Restore original move choice.
+ pop af
+ ld [CurMoveNum], a
+
+ ; fallthrough
+; 3450c
+
+
+Function0x3450c: ; 3450c
+ xor a
+ ld [LastPlayerMove], a
+ ld [LastEnemyCounterMove], a
+
+ ld hl, PlayerSubStatus5
+ res 4, [hl]
+
+; Break encore too.
+ xor a
+ ld [PlayerEncoreCount], a
+
+ jp EndMoveEffect
+; 3451f
+
+
+IgnoreSleepOnly: ; 3451f
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+
+ cp SNORE
+ jr z, .CheckSleep
+ cp SLEEP_TALK
+ jr z, .CheckSleep
+ and a
+ ret
+
+.CheckSleep
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and 7
+ ret z
+
+; 'ignored orders…sleeping!'
+ ld hl, IgnoredSleepingText
+ call FarBattleTextBox
+
+ call EndMoveEffect
+
+ scf
+ ret
+; 34541
+
+
+BattleCommand03: ; 34541
+; usedmovetext
+ callba DisplayUsedMoveText
+ ret
+; 34548
+
+
+Function0x34548: ; 34548
+
+ ld a, [hBattleTurn]
+ and a
+ ld a, [$c732] ; player
+ jr z, .end
+ ld a, [$c733] ; enemy
+.end
+ and a
+ ret
+; 34555
+
+
+BattleCommand04: ; 34555
+ call Function0x34548
+ ret nz
+
+ ld hl, BattleMonPP
+ ld de, PlayerSubStatus3
+ ld bc, PlayerTurnsTaken
+
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_34570
+
+ ld hl, EnemyMonPP
+ ld de, EnemySubStatus3
+ ld bc, EnemyTurnsTaken
+
+.asm_34570
+; If we've gotten this far, this counts as a turn.
+ ld a, [bc]
+ inc a
+ ld [bc], a
+
+ ld a, BATTLE_VARS_MOVE
+ call CleanGetBattleVarPair
+ cp STRUGGLE
+ ret z
+
+ ld a, [de]
+ and %111 ; rollout | bide | ???
+ ret nz
+
+ call .asm_345ad
+ ld a, b
+ and a
+ jp nz, EndMoveEffect
+
+; SubStatus5
+ inc de
+ inc de
+
+ ld a, [de]
+ bit 3, a
+ ret nz
+
+ ld a, [hBattleTurn]
+ and a
+
+ ld hl, PartyMon1PP
+ ld a, [CurBattleMon]
+ jr z, .asm_345a4
+
+; skip this part entirely if wildbattle
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_345c5
+
+ ld hl, OTPartyMon1PP
+ ld a, [CurOTMon]
+
+.asm_345a4
+ call GetPartyLocation
+ push hl
+ call Function0x3460b
+ pop hl
+ ret c
+
+.asm_345ad
+ ld a, [hBattleTurn]
+ and a
+ ld a, [CurMoveNum]
+ jr z, .asm_345b8
+ ld a, [CurEnemyMoveNum]
+
+.asm_345b8
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ jr z, .asm_345e3
+ dec [hl]
+ ld b, $0
+ ret
+
+.asm_345c5
+ ld hl, EnemyMonMoves
+ ld a, [CurEnemyMoveNum]
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ cp MIMIC
+ jr z, .asm_345dc
+ ld hl, $c735
+ add hl, bc
+ ld a, [hl]
+ cp MIMIC
+ ret z
+
+.asm_345dc
+ ld hl, $c739
+ call .asm_345ad
+ ret
+
+.asm_345e3
+ call BattleCommandaa
+; get move effect
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+; continuous?
+ ld hl, .continuousmoves
+ ld de, 1
+ call IsInArray
+
+; 'has no pp left for [move]'
+ ld hl, HasNoPPLeftText
+ jr c, .print
+; 'but no pp is left for the move'
+ ld hl, NoPPLeftText
+.print
+ call FarBattleTextBox
+ ld b, 1
+ ret
+; 34602
+
+.continuousmoves ; 34602
+ db EFFECT_RAZOR_WIND
+ db EFFECT_SKY_ATTACK
+ db EFFECT_SKULL_BASH
+ db EFFECT_SOLARBEAM
+ db EFFECT_FLY
+ db EFFECT_ROLLOUT
+ db EFFECT_BIDE
+ db EFFECT_RAMPAGE
+ db $ff
+; 3460b
+
+Function0x3460b: ; 3460b
+ ld a, [hBattleTurn]
+ and a
+ ld a, [CurMoveNum]
+ jr z, .asm_34616
+ ld a, [CurEnemyMoveNum]
+
+.asm_34616
+ ld c, a
+ ld a, 2
+ call $3945
+
+ ld a, BATTLE_VARS_MOVE
+ call CleanGetBattleVarPair
+ cp MIMIC
+ jr z, .asm_3462f
+
+ ld b, 0
+ add hl, bc
+ ld a, [hl]
+ cp MIMIC
+ jr nz, .asm_3462f
+
+ scf
+ ret
+
+.asm_3462f
+ and a
+ ret
+; 34631
+
+
+BattleCommand05: ; 34631
+; critical
+
+; Determine whether this attack's hit will be critical.
+
+ xor a
+ ld [CriticalHit], a
+
+ ld a, BATTLE_VARS_MOVE_POWER
+ call CleanGetBattleVarPair
+ and a
+ ret z
+
+ ld a, [hBattleTurn]
+ and a
+ ld hl, EnemyMonItem
+ ld a, [EnemyMonSpecies]
+ jr nz, .Item
+ ld hl, BattleMonItem
+ ld a, [BattleMonSpecies]
+
+.Item
+ ld c, 0
+
+ cp CHANSEY
+ jr nz, .Farfetchd
+ ld a, [hl]
+ cp LUCKY_PUNCH
+ jr nz, .FocusEnergy
+
+; +2 critical level
+ ld c, 2
+ jr .Tally
+
+.Farfetchd
+ cp FARFETCH_D
+ jr nz, .FocusEnergy
+ ld a, [hl]
+ cp STICK
+ jr nz, .FocusEnergy
+
+; +2 critical level
+ ld c, 2
+ jr .Tally
+
+.FocusEnergy
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call CleanGetBattleVarPair
+ bit 2, a
+ jr z, .CheckCritical
+
+; +1 critical level
+ inc c
+
+.CheckCritical
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ ld de, 1
+ ld hl, .Criticals
+ push bc
+ call IsInArray
+ pop bc
+ jr nc, .ScopeLens
+
+; +2 critical level
+ inc c
+ inc c
+
+.ScopeLens
+ push bc
+ call GetUserItem
+ ld a, b
+ cp $49 ; Increased critical chance. Only Scope Lens has this.
+ pop bc
+ jr nz, .Tally
+
+; +1 critical level
+ inc c
+
+.Tally
+ ld hl, .Chances
+ ld b, 0
+ add hl, bc
+ call FarBattleRNG
+ cp [hl]
+ ret nc
+ ld a, 1
+ ld [CriticalHit], a
+ ret
+
+.Criticals
+ db KARATE_CHOP, RAZOR_WIND, RAZOR_LEAF, CRABHAMMER, SLASH, AEROBLAST, CROSS_CHOP, $ff
+.Chances
+ ; 6.25% 12.1% 24.6% 33.2% 49.6% 49.6% 49.6%
+ db $11, $20, $40, $55, $80, $80, $80
+ ; 0 1 2 3 4 5 6
+; 346b2
+
+
+BattleCommand4e: ; 346b2
+; triplekick
+
+ ld a, [$c689]
+ ld b, a
+ inc b
+ ld hl, CurDamage + 1
+ ld a, [hld]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+.asm_346be
+ dec b
+ ret z
+ ld a, [hl]
+ add e
+ ld [hld], a
+ ld a, [hl]
+ adc d
+ ld [hli], a
+
+; No overflow.
+ jr nc, .asm_346be
+ ld a, $ff
+ ld [hld], a
+ ld [hl], a
+ ret
+; 346cd
+
+
+BattleCommand4f: ; 346cd
+; kickcounter
+
+ ld hl, $c689
+ inc [hl]
+ ret
+; 346d2
+
+
+BattleCommand07: ; 346d2
+; stab
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ cp STRUGGLE
+ ret z
+
+ ld hl, BattleMonType1
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, EnemyMonType1
+ ld a, [hli]
+ ld d, a
+ ld e, [hl]
+
+ ld a, [hBattleTurn]
+ and a
+ jr z, .go
+
+ ld hl, EnemyMonType1
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, BattleMonType1
+ ld a, [hli]
+ ld d, a
+ ld e, [hl]
+
+.go
+ ld a, BATTLE_VARS_MOVE_TYPE
+ call GetBattleVarPair
+ ld [$d265], a
+
+ push hl
+ push de
+ push bc
+ callba DoWeatherModifiers
+ pop bc
+ pop de
+ pop hl
+
+ push de
+ push bc
+ callba DoBadgeTypeBoosts
+ pop bc
+ pop de
+
+ ld a, [$d265]
+ cp b
+ jr z, .stab
+ cp c
+ jr z, .stab
+
+ jr .asm_3473a
+
+.stab
+ ld hl, CurDamage + 1
+ ld a, [hld]
+ ld h, [hl]
+ ld l, a
+
+ ld b, h
+ ld c, l
+ srl b
+ rr c
+ add hl, bc
+
+ ld a, h
+ ld [CurDamage], a
+ ld a, l
+ ld [CurDamage + 1], a
+
+ ld hl, TypeModifier
+ set 7, [hl]
+
+.asm_3473a
+ ld a, BATTLE_VARS_MOVE_TYPE
+ call CleanGetBattleVarPair
+ ld b, a
+ ld hl, TypeMatchup
+
+.asm_34743
+ ld a, [hli]
+
+ cp $ff
+ jr z, .end
+
+; foresight
+ cp $fe
+ jr nz, .asm_34757
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call CleanGetBattleVarPair
+ bit 3, a
+ jr nz, .end
+
+ jr .asm_34743
+
+.asm_34757
+ cp b
+ jr nz, .asm_347b3
+ ld a, [hl]
+ cp d
+ jr z, .asm_34763
+ cp e
+ jr z, .asm_34763
+ jr .asm_347b3
+
+.asm_34763
+ push hl
+ push bc
+ inc hl
+ ld a, [TypeModifier]
+ and %10000000
+ ld b, a
+ ld a, [hl]
+ and a
+ jr nz, .asm_34775
+ inc a
+ ld [AttackMissed], a
+ xor a
+.asm_34775
+ ld [$ffb7], a
+ add b
+ ld [TypeModifier], a
+
+ xor a
+ ld [$ffb4], a
+
+ ld hl, CurDamage
+ ld a, [hli]
+ ld [$ffb5], a
+ ld a, [hld]
+ ld [$ffb6], a
+
+ call $3119
+
+ ld a, [$ffb4]
+ ld b, a
+ ld a, [$ffb5]
+ or b
+ ld b, a
+ ld a, [$ffb6]
+ or b
+ jr z, .asm_347ab
+
+ ld a, $a
+ ld [$ffb7], a
+ ld b, $4
+ call $3124
+ ld a, [$ffb5]
+ ld b, a
+ ld a, [$ffb6]
+ or b
+ jr nz, .asm_347ab
+
+ ld a, $1
+ ld [$ffb6], a
+
+.asm_347ab
+ ld a, [$ffb5]
+ ld [hli], a
+ ld a, [$ffb6]
+ ld [hl], a
+ pop bc
+ pop hl
+
+.asm_347b3
+ inc hl
+ inc hl
+ jr .asm_34743
+
+.end
+ call Function0x347c8
+ ld a, [$d265]
+ ld b, a
+ ld a, [TypeModifier]
+ and $80
+ or b
+ ld [TypeModifier], a
+ ret
+; 347c8
+
+
+Function0x347c8: ; 347c8
+ ld hl, EnemyMonType1
+ ld a, [hBattleTurn]
+ and a
+ jr z, Function0x347d3
+ ld hl, BattleMonType1
+
+ ; fallthrough
+; 347d3
+
+
+Function0x347d3: ; 347d3
+ push hl
+ push de
+ push bc
+ ld a, $f
+ call CleanGetBattleVarPair
+ ld d, a
+ ld b, [hl]
+ inc hl
+ ld c, [hl]
+ ld a, $a
+ ld [$d265], a
+ ld hl, TypeMatchup
+.asm_347e7
+ ld a, [hli]
+ cp $ff
+ jr z, .asm_3482f ; 0x347ea $43
+ cp $fe
+ jr nz, .asm_347fb ; 0x347ee $b
+ ld a, $5
+ call CleanGetBattleVarPair
+ bit 3, a
+ jr nz, .asm_3482f ; 0x347f7 $36
+ jr .asm_347e7 ; 0x347f9 $ec
+.asm_347fb
+ cp d
+ jr nz, .asm_34807 ; 0x347fc $9
+ ld a, [hli]
+ cp b
+ jr z, .asm_3480b ; 0x34800 $9
+ cp c
+ jr z, .asm_3480b ; 0x34803 $6
+ jr .asm_34808 ; 0x34805 $1
+.asm_34807
+ inc hl
+.asm_34808
+ inc hl
+ jr .asm_347e7 ; 0x34809 $dc
+.asm_3480b
+ xor a
+ ld [$ffb3], a
+ ld [$ffb4], a
+ ld [$ffb5], a
+ ld a, [hli]
+ ld [$ffb6], a
+ ld a, [$d265]
+ ld [$ffb7], a
+ call Multiply
+ ld a, $a
+ ld [$ffb7], a
+ push bc
+ ld b, $4
+ call Divide
+ pop bc
+ ld a, [$ffb6]
+ ld [$d265], a
+ jr .asm_347e7 ; 0x3482d $b8
+.asm_3482f
+ pop bc
+ pop de
+ pop hl
+ ret
+; 34833
+
+
+BattleCommanda3: ; 34833
+ call Function0x347c8
+ ld a, [$d265]
+ and a
+ ld a, $a
+ jr nz, .asm_3484a ; 3483c $c
+ call ResetDamage
+ xor a
+ ld [TypeModifier], a
+ inc a
+ ld [AttackMissed], a
+ ret
+.asm_3484a
+ ld [$d265], a
+ ret
+; 3484e
+
+
+Function0x3484e: ; 3484e
+ push hl
+ push de
+ push bc
+ ld a, $a
+ ld [$c716], a
+ ld hl, PlayerUsedMoves
+ ld a, [hl]
+ and a
+ jr z, .asm_348b0 ; 0x3485b $53
+ ld d, $4
+ ld e, $0
+.asm_34861
+ ld a, [hli]
+ and a
+ jr z, .asm_3489f ; 0x34863 $3a
+ push hl
+ dec a
+ ld hl, $5afd
+ call GetMoveAttr
+ and a
+ jr z, .asm_3489b ; 0x3486e $2b
+ inc hl
+ call GetMoveByte
+ ld hl, EnemyMonType1
+ call Function0x347d3
+ ld a, [$d265]
+ cp $b
+ jr nc, .asm_34895 ; 0x3487f $14
+ and a
+ jr z, .asm_3489b ; 0x34882 $17
+ cp $a
+ jr nc, .asm_34891 ; 0x34886 $9
+ ld a, e
+ cp $1
+ jr nc, .asm_3489b ; 0x3488b $e
+ ld e, $1
+ jr .asm_3489b ; 0x3488f $a
+.asm_34891
+ ld e, $2
+ jr .asm_3489b ; 0x34893 $6
+.asm_34895
+ call Function0x34931
+ pop hl
+ jr .asm_348d7 ; 0x34899 $3c
+.asm_3489b
+ pop hl
+ dec d
+ jr nz, .asm_34861 ; 0x3489d $c2
+.asm_3489f
+ ld a, e
+ cp $2
+ jr z, .asm_348d7 ; 0x348a2 $33
+ call Function0x34939
+ ld a, e
+ and a
+ jr nz, .asm_348d7 ; 0x348a9 $2c
+ call Function0x34939
+ jr .asm_348d7 ; 0x348ae $27
+.asm_348b0
+ ld a, [BattleMonType1]
+ ld b, a
+ ld hl, EnemyMonType1
+ call Function0x347d3
+ ld a, [$d265]
+ cp $b
+ jr c, .asm_348c4 ; 0x348bf $3
+ call Function0x34931
+.asm_348c4
+ ld a, [BattleMonType2]
+ cp b
+ jr z, .asm_348d7 ; 0x348c8 $d
+ call Function0x347d3
+ ld a, [$d265]
+ cp $b
+ jr c, .asm_348d7 ; 0x348d2 $3
+ call Function0x34931
+.asm_348d7
+ call Function0x348de
+ pop bc
+ pop de
+ pop hl
+ ret
+; 348de
+
+
+Function0x348de: ; 348de
+ ld de, EnemyMonMove1
+ ld b, 5
+ ld c, 0
+
+ ld a, [$d265]
+ push af
+
+.loop
+ dec b
+ jr z, .exit
+
+ ld a, [de]
+ and a
+ jr z, .exit
+
+ inc de
+ dec a
+ ld hl, $5afd
+ call GetMoveAttr
+ and a
+ jr z, .loop
+
+ inc hl
+ call GetMoveByte
+ ld hl, BattleMonType1
+ call Function0x347d3
+ ld a, [$d265]
+ and a
+ jr z, .loop
+
+ inc c
+ cp $a
+ jr c, .loop
+
+ inc c
+ inc c
+ inc c
+ inc c
+ inc c
+
+ cp $a
+ jr z, .loop
+
+ ld c, $64
+ jr .loop
+.exit
+
+ pop af
+ ld [$d265], a
+
+ ld a, c
+ and a
+ jr z, .doubledown ; double down
+ cp $5
+ jr c, Function0x34931 ; down
+ cp $64
+ ret c
+ jr Function0x34939 ; up
+
+.doubledown
+ call Function0x34931
+
+ ; fallthrough
+; 34931
+
+
+Function0x34931: ; 34931
+ ld a, [$c716]
+ dec a
+ ld [$c716], a
+ ret
+; 34939
+
+
+Function0x34939: ; 34939
+ ld a, [$c716]
+ inc a
+ ld [$c716], a
+ ret
+; 34941
+
+
+Function0x34941: ; 34941
+ xor a
+ ld [$c717], a
+ call Function0x349f4
+ ret c
+
+ ld a, [EnemySubStatus1]
+ bit 4, a
+ jr z, .asm_34986
+
+ ld a, [$c67f]
+ cp $1
+ jr nz, .asm_34986
+
+ call Function0x349f4
+ call Function0x34b77
+ call Function0x34b20
+ call Function0x34a85
+
+ ld a, e
+ cp $2
+ jr nz, .asm_34971
+
+ ld a, [$c716]
+ add $30
+ ld [$c717], a
+ ret
+
+.asm_34971
+ call Function0x349f4
+ sla c
+ sla c
+ ld b, $ff
+
+.asm_3497a
+ inc b
+ sla c
+ jr nc, .asm_3497a
+
+ ld a, b
+ add $30
+ ld [$c717], a
+ ret
+
+.asm_34986
+ call Function0x3484e
+ ld a, [$c716]
+ cp $b
+ ret nc
+
+ ld a, [LastEnemyCounterMove]
+ and a
+ jr z, .asm_349d2
+
+ call Function0x34a2a
+ ld a, [$c716]
+ and a
+ jr z, .asm_349d2
+
+ ld c, a
+ call Function0x34aa7
+ ld a, [$c716]
+ cp $ff
+ ret z
+
+ ld b, a
+ ld a, e
+ cp $2
+ jr z, .asm_349be
+
+ call Function0x3484e
+ ld a, [$c716]
+ cp $a
+ ret nc
+
+ ld a, b
+ add $10
+ ld [$c717], a
+ ret
+
+.asm_349be
+ ld c, $10
+ call Function0x3484e
+ ld a, [$c716]
+ cp $a
+ jr nc, .asm_349cc
+ ld c, $20
+
+.asm_349cc
+ ld a, b
+ add c
+ ld [$c717], a
+ ret
+
+.asm_349d2
+ call Function0x3484e
+ ld a, [$c716]
+ cp $a
+ ret nc
+
+ call Function0x349f4
+ call Function0x34b77
+ call Function0x34b20
+ call Function0x34a85
+
+ ld a, e
+ cp $2
+ ret nz
+
+ ld a, [$c716]
+ add $10
+ ld [$c717], a
+ ret
+; 349f4
+
+
+Function0x349f4: ; 349f4
+ ld a, [OTPartyCount]
+ cp 2
+ jr c, .asm_34a26
+
+ ld d, a
+ ld e, 0
+ ld b, $20
+ ld c, 0
+ ld hl, OTPartyMon1CurHP
+
+.asm_34a05
+ ld a, [CurOTMon]
+ cp e
+ jr z, .asm_34a16
+
+ push bc
+ ld b, [hl]
+ inc hl
+ ld a, [hld]
+ or b
+ pop bc
+ jr z, .asm_34a16
+
+ ld a, c
+ or b
+ ld c, a
+.asm_34a16
+ srl b
+ push bc
+ ld bc, $30
+ add hl, bc
+ pop bc
+ inc e
+ dec d
+ jr nz, .asm_34a05
+
+ ld a, c
+ and a
+ jr nz, .asm_34a28
+
+.asm_34a26
+ scf
+ ret
+
+.asm_34a28
+ and a
+ ret
+; 34a2a
+
+
+Function0x34a2a: ; 34a2a
+ ld hl, OTPartyMon1
+ ld a, [OTPartyCount]
+ ld b, a
+ ld c, $20
+ ld d, 0
+ xor a
+ ld [$c716], a
+
+.asm_34a39
+ ld a, [CurOTMon]
+ cp d
+ push hl
+ jr z, .asm_34a77
+
+ push hl
+ push bc
+ ld bc, $0022
+ add hl, bc
+ pop bc
+ ld a, [hli]
+ or [hl]
+ pop hl
+ jr z, .asm_34a77
+
+ ld a, [hl]
+ ld [CurSpecies], a
+ call GetBaseStats
+ ld a, [LastEnemyCounterMove]
+ dec a
+ ld hl, $5afd
+ call GetMoveAttr
+ and a
+ jr z, .asm_34a77
+
+ inc hl
+ call GetMoveByte
+ ld hl, $d23d
+ call Function0x347d3
+ ld a, [$d265]
+ and a
+ jr nz, .asm_34a77
+
+ ld a, [$c716]
+ or c
+ ld [$c716], a
+.asm_34a77
+ pop hl
+ dec b
+ ret z
+
+ push bc
+ ld bc, $30
+ add hl, bc
+ pop bc
+
+ inc d
+ srl c
+ jr .asm_34a39
+; 34a85
+
+
+Function0x34a85: ; 34a85
+ push bc
+ ld a, [OTPartyCount]
+ ld e, a
+ ld hl, OTPartyMon1CurHP
+ ld b, $20
+ ld c, $0
+.asm_34a91
+ ld a, [hli]
+ or [hl]
+ jr z, .asm_34a98
+
+ ld a, b
+ or c
+ ld c, a
+
+.asm_34a98
+ srl b
+ push bc
+ ld bc, $2f
+ add hl, bc
+ pop bc
+ dec e
+ jr nz, .asm_34a91
+
+ ld a, c
+ pop bc
+
+ and c
+ ld c, a
+
+ ; fallthrough
+; 34aa7
+
+Function0x34aa7: ; 34aa7
+
+ ld a, $ff
+ ld [$c716], a
+ ld hl, OTPartyMon1Move1
+ ld b, $20
+ ld d, $0
+ ld e, $0
+.asm_34ab5
+ ld a, b
+ and c
+ jr z, .asm_34b00
+
+ push hl
+ push bc
+ ld b, $4
+ ld c, $0
+.asm_34abf
+ ld a, [hli]
+ and a
+ push hl
+ jr z, .asm_34aef
+
+ dec a
+ ld hl, $5afd
+ call GetMoveAttr
+ and a
+ jr z, .asm_34ae9
+
+ inc hl
+ call GetMoveByte
+ ld hl, BattleMonType1
+ call Function0x347d3
+ ld a, [$d265]
+ cp $a
+ jr c, .asm_34ae9
+
+ ld e, $1
+ cp $b
+ jr c, .asm_34ae9
+
+ ld e, $2
+ jr .asm_34aef
+
+.asm_34ae9
+ pop hl
+ dec b
+ jr nz, .asm_34abf
+
+ jr .asm_34af0
+
+.asm_34aef
+ pop hl
+.asm_34af0
+ ld a, e
+ pop bc
+ pop hl
+ cp $2
+ jr z, .asm_34b0e
+
+ cp $1
+ jr nz, .asm_34b00
+
+ ld a, d
+ or b
+ ld d, a
+ jr .asm_34b00
+
+.asm_34b00
+ push bc
+ ld bc, $0030
+ add hl, bc
+ pop bc
+ srl b
+ jr nc, .asm_34ab5
+
+ ld a, d
+ ld b, a
+ and a
+ ret z
+
+.asm_34b0e
+ push bc
+ sla b
+ sla b
+ ld c, $ff
+.asm_34b15
+ inc c
+ sla b
+ jr nc, .asm_34b15
+
+ ld a, c
+ ld [$c716], a
+ pop bc
+ ret
+; 34b20
+
+
+Function0x34b20: ; 34b20
+ push bc
+ ld hl, OTPartySpecies
+ ld b, $20
+ ld c, $0
+
+.asm_34b28
+ ld a, [hli]
+ cp $ff
+ jr z, .asm_34b72
+
+ push hl
+ ld [CurSpecies], a
+ call GetBaseStats
+ ld a, [LastEnemyCounterMove]
+ and a
+ jr z, .asm_34b4a
+
+ dec a
+ ld hl, $5afd
+ call GetMoveAttr
+ and a
+ jr z, .asm_34b4a
+
+ inc hl
+ call GetMoveByte
+ jr .asm_34b5d
+
+.asm_34b4a
+ ld a, [BattleMonType1]
+ ld hl, $d23d
+ call Function0x347d3
+ ld a, [$d265]
+ cp $b
+ jr nc, .asm_34b6d
+ ld a, [BattleMonType2]
+
+.asm_34b5d
+ ld hl, $d23d
+ call Function0x347d3
+ ld a, [$d265]
+ cp $b
+ jr nc, .asm_34b6d
+
+ ld a, b
+ or c
+ ld c, a
+
+.asm_34b6d
+ srl b
+ pop hl
+ jr .asm_34b28
+
+.asm_34b72
+ ld a, c
+ pop bc
+ and c
+ ld c, a
+ ret
+; 34b77
+
+
+Function0x34b77: ; 34b77
+ push bc
+ ld de, OTPartySpecies
+ ld b, $20
+ ld c, 0
+ ld hl, OTPartyMon1CurHP
+
+.asm_34b82
+ ld a, [de]
+ inc de
+ cp $ff
+ jr z, .asm_34bac
+
+ push hl
+ push bc
+ ld b, [hl]
+ inc hl
+ ld c, [hl]
+ inc hl
+ inc hl
+ srl c
+ rl b
+ srl c
+ rl b
+ ld a, [hld]
+ cp c
+ ld a, [hl]
+ sbc b
+ pop bc
+ jr nc, .asm_34ba1
+
+ ld a, b
+ or c
+ ld c, a
+
+.asm_34ba1
+ srl b
+ pop hl
+ push bc
+ ld bc, $0030
+ add hl, bc
+ pop bc
+ jr .asm_34b82
+
+.asm_34bac
+ ld a, c
+ pop bc
+ and c
+ ld c, a
+ ret
+; 34bb1
+
+
+TypeMatchup: ; 34bb1
+INCLUDE "battle/type_matchup.asm"
+; 34cfd
+
+
+BattleCommand08: ; 34cfd
+; damagevariation
+
+; Modify the damage spread between 85% and 100%.
+
+; Because of the method of division the probability distribution
+; is not consistent. This makes the highest damage multipliers
+; rarer than normal.
+
+
+; No point in reducing 1 or 0 damage.
+ ld hl, CurDamage
+ ld a, [hli]
+ and a
+ jr nz, .go
+ ld a, [hl]
+ cp 2
+ ret c
+
+.go
+; Start with the maximum damage.
+ xor a
+ ld [$ffb4], a
+ dec hl
+ ld a, [hli]
+ ld [$ffb5], a
+ ld a, [hl]
+ ld [$ffb6], a
+
+; Multiply by 85-100%...
+.loop
+ call FarBattleRNG
+ rrca
+ cp $d9 ; 85%
+ jr c, .loop
+
+ ld [$ffb7], a
+ call Multiply
+
+; ...divide by 100%...
+ ld a, $ff ; 100%
+ ld [$ffb7], a
+ ld b, $4
+ call Divide
+
+; ...to get .85-1.00x damage.
+ ld a, [$ffb5]
+ ld hl, CurDamage
+ ld [hli], a
+ ld a, [$ffb6]
+ ld [hl], a
+ ret
+; 34d32
+
+
+BattleCommand09: ; 34d32
+; checkhit
+
+ call .DreamEater
+ jp z, .Miss
+
+ call .Protect
+ jp nz, .Miss
+
+ call .DrainSub
+ jp z, .Miss
+
+ call .LockOn
+ ret nz
+
+ call .FlyDigMoves
+ jp nz, .Miss
+
+ call .ThunderRain
+ ret z
+
+ call .UnleashedEnergy
+ ret nz
+
+; Perfect-accuracy moves
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $11
+ ret z
+
+ call .StatModifiers
+
+ ld a, [PlayerMoveAccuracy]
+ ld b, a
+ ld a, [hBattleTurn]
+ and a
+ jr z, .BrightPowder
+ ld a, [EnemyMoveAccuracy]
+ ld b, a
+
+.BrightPowder
+ push bc
+ call GetOpponentItem
+ ld a, b
+ cp $4d ; brightpowder
+ ld a, c ; % miss
+ pop bc
+ jr nz, .asm_34d81
+
+ ld c, a
+ ld a, b
+ sub c
+ ld b, a
+ jr nc, .asm_34d81
+ ld b, 0
+
+.asm_34d81
+ ld a, b
+ cp $ff
+ jr z, .Hit
+
+ call FarBattleRNG
+ cp b
+ jr nc, .Miss
+
+.Hit
+ ret
+
+
+.Miss
+; Keep the damage value intact if we're using (Hi) Jump Kick.
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $2d
+ jr z, .Missed
+ call ResetDamage
+
+.Missed
+ ld a, 1
+ ld [AttackMissed], a
+ ret
+
+
+.DreamEater
+; Return z if we're trying to eat the dream of
+; a monster that isn't sleeping.
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $8
+ ret nz
+
+ ld a, BATTLE_VARS_STATUS_OPP
+ call CleanGetBattleVarPair
+ and 7 ; sleep
+ ret
+
+
+.Protect
+; Return nz if the opponent is protected.
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call CleanGetBattleVarPair
+ bit 2, a
+ ret z
+
+ ld c, 40
+ call DelayFrames
+
+; 'protecting itself!'
+ ld hl, ProtectingItselfText
+ call FarBattleTextBox
+
+ ld c, 40
+ call DelayFrames
+
+ ld a, 1
+ and a
+ ret
+
+
+.LockOn
+; Return nz if we are locked-on and aren't trying to use Earthquake,
+; Fissure or Magnitude on a monster that is flying.
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call GetBattleVarPair
+ bit 5, [hl]
+ res 5, [hl]
+ ret z
+
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call CleanGetBattleVarPair
+ bit 6, a ; flying
+ jr z, .LockedOn
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+
+ cp EARTHQUAKE
+ ret z
+ cp FISSURE
+ ret z
+ cp MAGNITUDE
+ ret z
+
+.LockedOn
+ ld a, 1
+ and a
+ ret
+
+
+.DrainSub
+; Return z if using an HP drain move on a substitute.
+ call CheckSubstituteOpp ; CheckOpponentSub
+ jr z, .asm_34e00
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+
+ cp $3 ; drain
+ ret z
+ cp $8 ; dream eater
+ ret z
+
+.asm_34e00
+ ld a, 1
+ and a
+ ret
+
+
+.FlyDigMoves
+; Check for moves that can hit underground/flying opponents.
+; Return z if the current move can hit the opponent.
+
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call CleanGetBattleVarPair
+ and $60 ; fly | dig
+ ret z
+
+ bit 6, a
+ jr z, .DigMoves
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+
+ cp GUST
+ ret z
+ cp WHIRLWIND
+ ret z
+ cp THUNDER
+ ret z
+ cp TWISTER
+ ret
+
+.DigMoves
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+
+ cp EARTHQUAKE
+ ret z
+ cp FISSURE
+ ret z
+ cp MAGNITUDE
+ ret
+
+
+.ThunderRain
+; Return z if the current move always hits in rain, and it is raining.
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $98
+ ret nz
+
+ ld a, [Weather]
+ cp WEATHER_RAIN
+ ret
+
+
+.UnleashedEnergy
+; Return nz if unleashing energy from Bide.
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call CleanGetBattleVarPair
+ bit 0, a
+ ret
+
+
+.StatModifiers
+
+ ld a, [hBattleTurn]
+ and a
+
+ ld hl, PlayerMoveAccuracy
+ ld a, [PlayerAccLevel]
+ ld b, a
+ ld a, [EnemyEvaLevel]
+ ld c, a
+
+ jr z, .asm_34e60
+
+ ld hl, EnemyMoveAccuracy
+ ld a, [EnemyAccLevel]
+ ld b, a
+ ld a, [PlayerEvaLevel]
+ ld c, a
+
+.asm_34e60
+ cp b
+ jr c, .asm_34e6b
+
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call CleanGetBattleVarPair
+ bit 3, a
+ ret nz
+
+.asm_34e6b
+ ld a, $e
+ sub c
+ ld c, a
+ xor a
+ ld [$ffb4], a
+ ld [$ffb5], a
+ ld a, [hl]
+ ld [$ffb6], a
+ push hl
+ ld d, $2
+
+.asm_34e7a
+ push bc
+ ld hl, .AccProb
+ dec b
+ sla b
+ ld c, b
+ ld b, 0
+ add hl, bc
+ pop bc
+ ld a, [hli]
+ ld [$ffb7], a
+ call Multiply
+ ld a, [hl]
+ ld [$ffb7], a
+ ld b, $4
+ call Divide
+ ld a, [$ffb6]
+ ld b, a
+ ld a, [$ffb5]
+ or b
+ jr nz, .asm_34ea2
+ ld [$ffb5], a
+ ld a, $1
+ ld [$ffb6], a
+
+.asm_34ea2
+ ld b, c
+ dec d
+ jr nz, .asm_34e7a
+
+ ld a, [$ffb5]
+ and a
+ ld a, [$ffb6]
+ jr z, .asm_34eaf
+ ld a, $ff
+
+.asm_34eaf
+ pop hl
+ ld [hl], a
+ ret
+
+.AccProb
+ db 33, 100 ; 33% -6
+ db 36, 100 ; 36% -5
+ db 43, 100 ; 43% -4
+ db 50, 100 ; 50% -3
+ db 60, 100 ; 60% -2
+ db 75, 100 ; 75% -1
+ db 1, 1 ; 100% 0
+ db 133, 100 ; 133% +1
+ db 166, 100 ; 166% +2
+ db 2, 1 ; 200% +3
+ db 233, 100 ; 233% +4
+ db 133, 50 ; 266% +5
+ db 3, 1 ; 300% +6
+
+; 34ecc
+
+
+BattleCommand90: ; 34ecc
+; effectchance
+
+ xor a
+ ld [$c70d], a
+ call CheckSubstituteOpp
+ jr nz, .failed
+
+ push hl
+ ld hl, PlayerMoveEffectChance
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_34ee1
+ ld hl, EnemyMoveEffectChance
+.asm_34ee1
+
+ call FarBattleRNG
+ cp [hl]
+ pop hl
+ ret c
+
+.failed
+ ld a, 1
+ ld [$c70d], a
+ and a
+ ret
+; 34eee
+
+
+BattleCommand0a: ; 34eee
+
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call CleanGetBattleVarPair
+ bit 4, a
+ ret z
+
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call CleanGetBattleVarPair
+ bit 4, a
+ jr nz, .asm_34f18
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp EFFECT_RAZOR_WIND
+ jr z, .asm_34f21
+ cp EFFECT_SKY_ATTACK
+ jr z, .asm_34f21
+ cp EFFECT_SKULL_BASH
+ jr z, .asm_34f21
+ cp EFFECT_SOLARBEAM
+ jr z, .asm_34f21
+ cp EFFECT_FLY
+ jr z, .asm_34f21
+
+.asm_34f18
+ call .Rampage
+ jr z, .asm_34f21
+
+ call Function0x34548
+ ret nz
+
+.asm_34f21
+ call Function0x37ed5
+ jr c, .asm_34f36
+
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ inc a
+ ld [$c689], a
+ ld a, $a4
+ jp Function0x37e44
+
+.asm_34f36
+ call BattleCommanda7
+ jp BattleCommandaa
+
+.Rampage
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp EFFECT_ROLLOUT
+ jr z, .asm_34f4d
+ cp EFFECT_RAMPAGE
+ jr z, .asm_34f4d
+
+ ld a, 1
+ and a
+ ret
+
+.asm_34f4d
+ ld a, [$c73e]
+ and a
+ ld a, 0
+ ld [$c73e], a
+ ret
+; 34f57
+
+
+BattleCommandab: ; 34f57
+; hittarget
+ call BattleCommand0a
+ call BattleCommand0b
+ jp BattleCommand0c
+; 34f60
+
+
+BattleCommand0b: ; 34f60
+ ld a, [AttackMissed]
+ and a
+ jp nz, BattleCommandaa
+
+ ld a, [hBattleTurn]
+ and a
+ ld de, PlayerRolloutCount
+ ld a, 1
+ jr z, .asm_34f76
+ ld de, EnemyRolloutCount
+ ld a, 4
+
+.asm_34f76
+ ld [$cfca], a
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp EFFECT_MULTI_HIT
+ jr z, .asm_34fb0
+ cp EFFECT_CONVERSION
+ jr z, .asm_34fb0
+ cp EFFECT_DOUBLE_HIT
+ jr z, .asm_34fb0
+ cp EFFECT_TWINEEDLE
+ jr z, .asm_34fb0
+ cp EFFECT_TRIPLE_KICK
+ jr z, .asm_34f96
+ xor a
+ ld [$c689], a
+
+.asm_34f96
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ ld e, a
+ ld d, 0
+ call PlayFXAnimID
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ cp FLY
+ jr z, .asm_34fad
+ cp DIG
+ ret nz
+
+.asm_34fad
+; clear sprite
+ jp Function0x37ec7
+.asm_34fb0
+ ld a, [$c689]
+ and $1
+ xor $1
+ ld [$c689], a
+ ld a, [de]
+ cp $1
+ push af
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ ld e, a
+ ld d, $0
+ pop af
+ jp z, PlayFXAnimID
+ xor a
+ ld [$cfca], a
+ jp PlayFXAnimID
+; 34fd1
+
+
+BattleCommand92: ; 34fd1
+ ld a, [AttackMissed]
+ and a
+ jp nz, BattleCommandaa
+
+ xor a
+ jr BattleCommand91_92
+; 34fdb
+
+
+BattleCommand91: ; 34fdb
+ ld a, [AttackMissed]
+ and a
+ jp nz, BattleCommandaa
+
+ ld a, [hBattleTurn]
+ and a
+ ld a, 2
+ jr z, BattleCommand91_92
+ ld a, 5
+
+ ; fallthrough
+; 34feb
+
+
+BattleCommand91_92: ; 34feb
+ ld [$cfca], a
+ xor a
+ ld [$c689], a
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ ld e, a
+ ld d, 0
+ jp PlayFXAnimID
+; 34ffd
+
+
+SwitchTurn: ; 34ffd
+BattleCommand93: ; 34ffd
+; switchturn
+
+ ld a, [hBattleTurn]
+ xor 1
+ ld [hBattleTurn], a
+ ret
+; 35004
+
+
+BattleCommand0c: ; 35004
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call CleanGetBattleVarPair
+ bit 4, a
+ ret z
+
+ call Function0x37ed5
+ jp c, BattleCommanda6
+
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ ld a, $2
+ ld [$c689], a
+ ld a, $a4
+ jp Function0x37e44
+; 35023
+
+
+BattleCommand0d: ; 35023
+; resulttext
+ ld a, [AttackMissed]
+ and a
+ ret z
+
+ call Function0x350e4
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call GetBattleVarPair
+
+ cp FLY
+ jr z, .asm_3504f ; 35032 $1b
+ cp DIG
+ jr z, .asm_3504f ; 35036 $17
+
+; Move effect:
+ inc hl
+ ld a, [hl]
+
+ cp EFFECT_MULTI_HIT
+ jr z, .asm_35049
+ cp EFFECT_DOUBLE_HIT
+ jr z, .asm_35049
+ cp EFFECT_TWINEEDLE
+ jr z, .asm_35049
+ jp EndMoveEffect
+
+.asm_35049
+ call BattleCommand0c
+ jp EndMoveEffect
+
+.asm_3504f
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ res 5, [hl]
+ res 6, [hl]
+ call Function0x37ece
+ jp EndMoveEffect
+; 3505e
+
+
+BattleCommand0e: ; 3505e
+; checkfaint
+
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call CleanGetBattleVarPair
+ bit 5, a
+ jr z, .asm_35072 ; 35065 $b
+ call BattleCommand4b
+ ld b, $0
+ jr nc, .asm_3508b ; 3506c $1d
+ ld b, $1
+ jr .asm_3508b ; 35070 $19
+
+.asm_35072
+ call GetOpponentItem
+ ld a, b
+ cp $4f
+ ld b, $0
+ jr nz, .asm_3508b ; 3507a $f
+ call FarBattleRNG
+ cp c
+ jr nc, .asm_3508b ; 35080 $9
+ call BattleCommand4b
+ ld b, $0
+ jr nc, .asm_3508b ; 35087 $2
+ ld b, $2
+.asm_3508b
+ push bc
+ call .asm_50bb
+ ld c, $0
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_3509b
+ call Function0x35d1c
+ jr .asm_3509e
+
+.asm_3509b
+ call Function0x35d7e
+
+.asm_3509e
+ pop bc
+ ld a, b
+ and a
+ ret z
+ dec a
+ jr nz, .asm_350ab ; 350a3 $6
+ ld hl, EnduredText
+ jp FarBattleTextBox
+
+.asm_350ab
+ call GetOpponentItem
+ ld a, [hl]
+ ld [$d265], a
+ call $3468
+
+ ld hl, HungOnText
+ jp FarBattleTextBox
+
+.asm_50bb
+ ld a, $8
+ call CleanGetBattleVarPair
+ bit 4, a
+ ret nz
+ ld de, EnemyDamageTaken
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_350ce ; 0x350c9 $3
+ ld de, $c685
+
+.asm_350ce
+ ld a, [CurDamage + 1]
+ ld b, a
+ ld a, [de]
+ add b
+ ld [de], a
+ dec de
+ ld a, [CurDamage]
+ ld b, a
+ ld a, [de]
+ adc b
+ ld [de], a
+ ret nc
+ ld a, $ff
+ ld [de], a
+ inc de
+ ld [de], a
+ ret
+; 350e4
+
+
+Function0x350e4: ; 350e4
+ ld hl, DoesntAffectText
+ ld de, DoesntAffectText
+ ld a, [TypeModifier]
+ and $7f
+ jr z, .asm_35110 ; 0x350ef $1f
+ ld a, $d
+ call CleanGetBattleVarPair
+ cp $94
+ ld hl, ButItFailedText
+ ld de, ItFailedText
+ jr z, .asm_35110 ; 0x350fe $10
+ ld hl, AttackMissedText
+ ld de, AttackMissed2Text
+ ld a, [CriticalHit]
+ cp $ff
+ jr nz, .asm_35110 ; 0x3510b $3
+ ld hl, UnaffectedText
+.asm_35110
+ call Function0x35157
+ xor a
+ ld [CriticalHit], a
+ ld a, $d
+ call CleanGetBattleVarPair
+ cp $2d
+ ret nz
+ ld a, [TypeModifier]
+ and $7f
+ ret z
+ ld hl, CurDamage
+ ld a, [hli]
+ ld b, [hl]
+ srl a
+ rr b
+ srl a
+ rr b
+ srl a
+ rr b
+ ld [hl], b
+ dec hl
+ ld [hli], a
+ or b
+ jr nz, .asm_3513e ; 0x3513a $2
+ inc a
+ ld [hl], a
+.asm_3513e
+ ld hl, CrashedText
+ call FarBattleTextBox
+ ld a, $1
+ ld [$c689], a
+ call Function0x37e36
+ ld c, $1
+ ld a, [hBattleTurn]
+ and a
+ jp nz, Function0x35d1c
+ jp Function0x35d7e
+
+Function0x35157: ; 35157
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call CleanGetBattleVarPair
+ bit 2, a ; protect
+ jr z, .asm_35162
+ ld h, d
+ ld l, e
+.asm_35162
+ jp FarBattleTextBox
+; 35165
+
+
+BattleCommanda5: ; 35165
+ ld a, [AttackMissed]
+ and a
+ ret z
+
+ ld a, [TypeModifier]
+ and $7f
+ jp z, PrintDoesntAffect
+ jp PrintButItFailed
+; 35175
+
+
+BattleCommand0f: ; 35175
+; criticaltext
+; Prints the message for critical hits or one-hit KOs.
+
+; If there is no message to be printed, wait 20 frames.
+ ld a, [CriticalHit]
+ and a
+ jr z, .wait
+
+ dec a
+ add a
+ ld hl, .ptrs
+ ld b, 0
+ ld c, a
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call FarBattleTextBox
+
+ xor a
+ ld [CriticalHit], a
+
+.wait
+ ld c, 20
+ jp DelayFrames
+
+.ptrs
+ dw CriticalHitText ; 'critical hit'
+ dw OneHitKOText ; 'one-hit ko'
+; 35197
+
+
+BattleCommandae: ; 35197
+; startloop
+
+ ld hl, PlayerRolloutCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_351a2
+ ld hl, EnemyRolloutCount
+
+.asm_351a2
+ xor a
+ ld [hl], a
+ ret
+; 351a5
+
+
+BattleCommandad: ; 351a5
+; supereffectivelooptext
+
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ bit 2, a
+ ret nz
+
+ ; fallthrough
+; 351ad
+
+
+BattleCommand10: ; 351ad
+; supereffectivetext
+
+ ld a, [TypeModifier]
+ and $7f
+ cp 10 ; 1.0
+ ret z
+ ld hl, SuperEffectiveText ; 'super-effective'
+ jr nc, .print
+ ld hl, NotVeryEffectiveText ; 'not very effective'
+.print
+ jp FarBattleTextBox
+; 351c0
+
+
+BattleCommand11: ; 351c0
+; checkdestinybond
+
+; Faint the user if it fainted an opponent using Destiny Bond.
+
+ ld hl, EnemyMonHPHi
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_351cb
+ ld hl, BattleMonHP
+
+.asm_351cb
+ ld a, [hli]
+ or [hl]
+ ret nz
+
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call CleanGetBattleVarPair
+ bit 6, a
+ jr z, .asm_35231
+
+ ld hl, TookDownWithItText
+ call FarBattleTextBox
+
+ ld a, [hBattleTurn]
+ and a
+ ld hl, EnemyMonMaxHP + 1
+ bccoord 2, 2 ; hp bar
+ ld a, 0
+ jr nz, .asm_351f2
+ ld hl, BattleMonMaxHP + 1
+ bccoord 10, 9 ; hp bar
+ ld a, 1
+
+.asm_351f2
+ ld [$d10a], a
+ ld a, [hld]
+ ld [$d1ea], a
+ ld a, [hld]
+ ld [$d1eb], a
+ ld a, [hl]
+ ld [$d1ec], a
+ xor a
+ ld [hld], a
+ ld a, [hl]
+ ld [$d1ed], a
+ xor a
+ ld [hl], a
+ ld [$d1ee], a
+ ld [$d1ef], a
+ ld h, b
+ ld l, c
+ ld a, $b
+ call $2d83
+ call $39c9
+
+ call SwitchTurn
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ inc a
+ ld [$c689], a
+ ld a, $c2
+ call Function0x37e44
+ call SwitchTurn
+
+ jr .asm_3524d ; 3522f $1c
+
+.asm_35231
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp EFFECT_MULTI_HIT
+ jr z, .asm_3524a
+ cp EFFECT_DOUBLE_HIT
+ jr z, .asm_3524a
+ cp EFFECT_TWINEEDLE
+ jr z, .asm_3524a
+ cp EFFECT_TRIPLE_KICK
+ jr z, .asm_3524a
+ cp EFFECT_BEAT_UP
+ jr nz, .asm_3524d
+
+.asm_3524a
+ call BattleCommand0c
+
+.asm_3524d
+ jp EndMoveEffect
+; 35250
+
+
+BattleCommand12: ; 35250
+; buildopponentrage
+
+ jp .start
+.start
+ ld a, [AttackMissed]
+ and a
+ ret nz
+
+ ld a, BATTLE_VARS_SUBSTATUS4_OPP
+ call CleanGetBattleVarPair
+ bit 6, a
+ ret z
+
+ ld de, $c72c
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3526b
+ ld de, $c72b
+.asm_3526b
+ ld a, [de]
+ inc a
+ ret z
+ ld [de], a
+
+ call SwitchTurn
+ ld hl, RageBuildingText
+ call FarBattleTextBox
+ jp SwitchTurn
+; 3527b
+
+
+BattleCommanda2: ; 3527b
+; ragedamage
+
+ ld a, [CurDamage]
+ ld h, a
+ ld b, a
+ ld a, [CurDamage + 1]
+ ld l, a
+ ld c, a
+ ld a, [hBattleTurn]
+ and a
+ ld a, [$c72b]
+ jr z, .asm_35290 ; 3528b $3
+ ld a, [$c72c]
+.asm_35290
+ and a
+ jr z, .asm_3529a ; 35291 $7
+ dec a
+ add hl, bc
+ jr nc, .asm_35290 ; 35295 $f9
+ ld hl, $ffff
+.asm_3529a
+ ld a, h
+ ld [CurDamage], a
+ ld a, l
+ ld [CurDamage + 1], a
+ ret
+; 352a3
+
+
+EndMoveEffect: ; 352a3
+ ld a, [BattleScriptBufferLoc]
+ ld l, a
+ ld a, [BattleScriptBufferLoc + 1]
+ ld h, a
+ ld a, $ff
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ret
+; 352b1
+
+
+DittoMetalPowder: ; 352b1
+ ld a, PartyMon1Species - PartyMon1
+ call BattlePartyAttr
+ ld a, [hBattleTurn]
+ and a
+ ld a, [hl]
+ jr nz, .Ditto
+ ld a, [TempEnemyMonSpecies]
+
+.Ditto
+ cp DITTO
+ ret nz
+
+ push bc
+ call GetOpponentItem
+ ld a, [hl]
+ cp METAL_POWDER
+ pop bc
+ ret nz
+
+ ld a, c
+ srl a
+ add c
+ ld c, a
+ ret nc
+
+ srl b
+ ld a, b
+ and a
+ jr nz, .asm_352d8
+ inc b
+.asm_352d8
+ scf
+ rr c
+ ret
+; 352dc
+
+
+BattleCommand06: ; 352dc
+; damagestats
+
+ ld a, [hBattleTurn]
+ and a
+ jp nz, EnemyAttackDamage
+
+ ; fallthrough
+; 352e2
+
+
+PlayerAttackDamage: ; 352e2
+; Return move power d, player level e, enemy defense c and player attack b.
+
+ call ResetDamage
+
+ ld hl, PlayerMovePower
+ ld a, [hli]
+ and a
+ ld d, a
+ ret z
+
+ ld a, [hl]
+ cp FIRE
+ jr nc, .special
+
+
+; Physical
+ ld hl, EnemyMonDef
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+
+; Reflect
+ ld a, [EnemyScreens]
+ bit 4, a
+ jr z, .physicalcrit
+ sla c
+ rl b
+
+.physicalcrit
+ ld hl, BattleMonAtk
+ call GetDamageStatsCritical
+ jr c, .thickclub
+
+ ld hl, $c6c3
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, $c6b6
+ jr .thickclub
+
+
+.special
+ ld hl, EnemyMonSpclDef
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+
+; Light Screen
+ ld a, [EnemyScreens]
+ bit 3, a
+ jr z, .specialcrit
+ sla c
+ rl b
+
+.specialcrit
+ ld hl, BattleMonSpclAtk
+ call GetDamageStatsCritical
+ jr c, .lightball
+
+ ld hl, $c6c9
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, $c6bc
+
+.lightball
+; Note: Returns player special attack at hl in hl.
+ call LightBallBoost
+ jr .done
+
+.thickclub
+; Note: Returns player attack at hl in hl.
+ call ThickClubBoost
+
+.done
+ call Function0x3534d
+
+ ld a, [BattleMonLevel]
+ ld e, a
+ call DittoMetalPowder
+
+ ld a, 1
+ and a
+ ret
+; 3534d
+
+
+Function0x3534d: ; 3534d
+; Truncate 16-bit values hl and bc to 8-bit values b and c respectively.
+; b = hl, c = bc
+
+ ld a, h
+ or b
+ jr z, .asm_3536b
+
+ srl b
+ rr c
+ srl b
+ rr c
+
+ ld a, c
+ or b
+ jr nz, .asm_3535e
+ inc c
+
+.asm_3535e
+ srl h
+ rr l
+ srl h
+ rr l
+
+ ld a, l
+ or h
+ jr nz, .asm_3536b
+ inc l
+
+.asm_3536b
+ ld a, [InLinkBattle]
+ cp 3
+ jr z, .done
+
+ ld a, h
+ or b
+ jr nz, Function0x3534d
+
+.done
+ ld b, l
+ ret
+; 35378
+
+
+GetDamageStatsCritical: ; 35378
+; Return carry if non-critical.
+
+ ld a, [CriticalHit]
+ and a
+ scf
+ ret z
+
+ ; fallthrough
+; 3537e
+
+
+GetDamageStats: ; 3537e
+; Return the attacker's offensive stat and the defender's defensive
+; stat based on whether the attacking type is physical or special.
+
+ push hl
+ push bc
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .enemy
+ ld a, [PlayerMoveType]
+ cp FIRE
+; special
+ ld a, [PlayerSAtkLevel]
+ ld b, a
+ ld a, [EnemySDefLevel]
+ jr nc, .end
+; physical
+ ld a, [PlayerAtkLevel]
+ ld b, a
+ ld a, [EnemyDefLevel]
+ jr .end
+
+.enemy
+ ld a, [EnemyMoveType]
+ cp FIRE
+; special
+ ld a, [EnemySAtkLevel]
+ ld b, a
+ ld a, [PlayerSDefLevel]
+ jr nc, .end
+; physical
+ ld a, [EnemyAtkLevel]
+ ld b, a
+ ld a, [PlayerDefLevel]
+.end
+ cp b
+ pop bc
+ pop hl
+ ret
+; 353b5
+
+
+ThickClubBoost: ; 353b5
+; Return in hl the stat value at hl.
+
+; If the attacking monster is Cubone or Marowak and
+; it's holding a Thick Club, double it.
+ push bc
+ push de
+ ld b, CUBONE
+ ld c, MAROWAK
+ ld d, THICK_CLUB
+ call SpeciesItemBoost
+ pop de
+ pop bc
+ ret
+; 353c3
+
+
+LightBallBoost: ; 353c3
+; Return in hl the stat value at hl.
+
+; If the attacking monster is Pikachu and it's
+; holding a Light Ball, double it.
+ push bc
+ push de
+ ld b, PIKACHU
+ ld c, PIKACHU
+ ld d, LIGHT_BALL
+ call SpeciesItemBoost
+ pop de
+ pop bc
+ ret
+; 353d1
+
+
+SpeciesItemBoost: ; 353d1
+; Return in hl the stat value at hl.
+
+; If the attacking monster is species b or c and
+; it's holding item d, double it.
+
+ ld a, [hli]
+ ld l, [hl]
+ ld h, a
+
+ push hl
+ ld a, PartyMon1Species - PartyMon1
+ call BattlePartyAttr
+
+ ld a, [hBattleTurn]
+ and a
+ ld a, [hl]
+ jr z, .CompareSpecies
+ ld a, [TempEnemyMonSpecies]
+.CompareSpecies
+ pop hl
+
+ cp b
+ jr z, .GetItem
+ cp c
+ ret nz
+
+.GetItem
+ push hl
+ call GetUserItem
+ ld a, [hl]
+ pop hl
+ cp d
+ ret nz
+
+; Double the stat
+ sla l
+ rl h
+ ret
+; 353f6
+
+
+EnemyAttackDamage: ; 353f6
+ call ResetDamage
+
+; No damage dealt with 0 power.
+ ld hl, EnemyMovePower
+ ld a, [hli] ; hl = EnemyMoveType
+ ld d, a
+ and a
+ ret z
+
+ ld a, [hl]
+ cp FIRE
+ jr nc, .Special
+
+
+; Physical
+ ld hl, BattleMonDef
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+
+; Reflect
+ ld a, [PlayerScreens]
+ bit 4, a
+ jr z, .physicalcrit
+ sla c
+ rl b
+
+.physicalcrit
+ ld hl, EnemyMonAtk
+ call GetDamageStatsCritical
+ jr c, .thickclub
+
+ ld hl, $c6b8
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, $c6c1
+ jr .thickclub
+
+
+.Special
+ ld hl, BattleMonSpclDef
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+
+; Light Screen
+ ld a, [PlayerScreens]
+ bit 3, a
+ jr z, .specialcrit
+ sla c
+ rl b
+
+.specialcrit
+ ld hl, EnemyMonSpclAtk
+ call GetDamageStatsCritical
+ jr c, .lightball
+ ld hl, $c6be
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, $c6c7
+
+.lightball
+ call LightBallBoost
+ jr .done
+
+.thickclub
+ call ThickClubBoost
+
+.done
+ call Function0x3534d
+
+ ld a, [EnemyMonLevel]
+ ld e, a
+ call DittoMetalPowder
+
+ ld a, 1
+ and a
+ ret
+; 35461
+
+
+BattleCommanda1: ; 35461
+; beatup
+
+ call ResetDamage
+ ld a, [hBattleTurn]
+ and a
+ jp nz, .asm_354ef
+ ld a, [PlayerSubStatus3]
+ bit 2, a
+ jr nz, .asm_35482 ; 3546f $11
+ ld c, $14
+ call DelayFrames
+ xor a
+ ld [PlayerRolloutCount], a
+ ld [DefaultFlypoint], a
+ ld [$c72d], a
+ jr .asm_3548d ; 35480 $b
+.asm_35482
+ ld a, [PlayerRolloutCount]
+ ld b, a
+ ld a, [PartyCount]
+ sub b
+ ld [DefaultFlypoint], a
+.asm_3548d
+ ld a, [DefaultFlypoint]
+ ld hl, PartyMon1Nickname
+ call $38a2
+ ld a, $22
+ call Function0x355bd
+ ld a, [hli]
+ or [hl]
+ jp z, Function0x355b0
+ ld a, [DefaultFlypoint]
+ ld c, a
+ ld a, [CurBattleMon]
+ cp [hl]
+ ld hl, BattleMonStatus
+ jr z, .asm_354b2 ; 354ab $5
+ ld a, $20
+ call Function0x355bd
+.asm_354b2
+ ld a, [hl]
+ and a
+ jp nz, Function0x355b0
+ ld a, $1
+ ld [$c72d], a
+ ld hl, BeatUpAttackText
+ call FarBattleTextBox
+ ld a, [EnemyMonSpecies]
+ ld [CurSpecies], a
+ call $3856
+ ld a, [$d239]
+ ld c, a
+ push bc
+ ld a, $0
+ call Function0x355bd
+ ld a, [hl]
+ ld [CurSpecies], a
+ call $3856
+ ld a, [$d238]
+ pop bc
+ ld b, a
+ push bc
+ ld a, $1f
+ call Function0x355bd
+ ld a, [hl]
+ ld e, a
+ pop bc
+ ld a, [PlayerMovePower]
+ ld d, a
+ ret
+
+.asm_354ef
+ ld a, [EnemySubStatus3]
+ bit 2, a
+ jr nz, .asm_35502
+
+ xor a
+ ld [EnemyRolloutCount], a
+ ld [DefaultFlypoint], a
+ ld [$c72d], a
+ jr .asm_3550d
+
+.asm_35502
+ ld a, [EnemyRolloutCount]
+ ld b, a
+ ld a, [OTPartyCount]
+ sub b
+ ld [DefaultFlypoint], a
+.asm_3550d
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_3556b
+
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_35532
+
+ ld a, [$cfc0]
+ and a
+ jr nz, .asm_35532
+
+ ld a, [DefaultFlypoint]
+ ld c, a
+ ld b, $0
+ ld hl, OTPartySpecies
+ add hl, bc
+ ld a, [hl]
+ ld [$d265], a
+ call $343b
+ jr .asm_35544
+
+.asm_35532
+ ld a, [DefaultFlypoint]
+ ld hl, OTPartyMon1Nickname
+ ld bc, $000b
+ call AddNTimes
+ ld de, StringBuffer1
+ call CopyBytes
+.asm_35544
+ ld a, $22
+ call Function0x355bd
+ ld a, [hli]
+ or [hl]
+ jp z, Function0x355b0
+ ld a, [DefaultFlypoint]
+ ld b, a
+ ld a, [CurOTMon]
+ cp b
+ ld hl, EnemyMonStatus
+ jr z, .asm_35560
+
+ ld a, $20
+ call Function0x355bd
+.asm_35560
+ ld a, [hl]
+ and a
+ jr nz, Function0x355b0
+
+ ld a, $1
+ ld [$c72d], a
+ jr .asm_3557d
+
+.asm_3556b
+ ld a, [EnemyMonSpecies]
+ ld [$d265], a
+ call $343b
+ ld hl, BeatUpAttackText
+ call FarBattleTextBox
+ jp EnemyAttackDamage
+.asm_3557d
+ ld hl, BeatUpAttackText
+ call FarBattleTextBox
+ ld a, [BattleMonSpecies]
+ ld [CurSpecies], a
+ call GetBaseStats
+ ld a, [$d239]
+ ld c, a
+ push bc
+ ld a, $0
+ call Function0x355bd
+ ld a, [hl]
+ ld [CurSpecies], a
+ call GetBaseStats
+ ld a, [$d238]
+ pop bc
+ ld b, a
+ push bc
+ ld a, $1f
+ call Function0x355bd
+ ld a, [hl]
+ ld e, a
+ pop bc
+ ld a, [EnemyMovePower]
+ ld d, a
+ ret
+; 355b0
+
+
+Function0x355b0: ; 355b0
+ ld b, $12 ; buildopponentrage
+ jp SkipToBattleCommand
+; 355b5
+
+
+BattleCommanda8: ; 355b5
+ ld a, [$c72d]
+ and a
+ ret nz
+ jp PrintButItFailed
+; 355bd
+
+
+Function0x355bd: ; 355bd
+ push bc
+ ld c, a
+ ld b, 0
+ ld a, [hBattleTurn]
+ and a
+ ld hl, PartyMon1Species
+ jr z, .asm_355cc
+ ld hl, OTPartyMon1Species
+
+.asm_355cc
+ ld a, [DefaultFlypoint]
+ add hl, bc
+ call GetPartyLocation
+ pop bc
+ ret
+; 355d5
+
+
+BattleCommanda9: ; 355d5
+; clearmissdamage
+ ld a, [AttackMissed]
+ and a
+ ret z
+ jp ResetDamage
+; 355dd
+
+
+Function0x355dd: ; 355dd
+ call ResetDamage
+ ld a, [hBattleTurn]
+ and a
+ ld hl, BattleMonDef
+ ld de, PlayerScreens
+ ld a, [BattleMonLevel]
+ jr z, .asm_355f7
+
+ ld hl, EnemyMonDef
+ ld de, EnemyScreens
+ ld a, [EnemyMonLevel]
+.asm_355f7
+ push af
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld a, [de]
+ bit 4, a
+ jr z, .asm_35604
+
+ sla c
+ rl b
+.asm_35604
+ dec hl
+ dec hl
+ dec hl
+ ld a, [hli]
+ ld l, [hl]
+ ld h, a
+ call Function0x3534d
+ ld d, $28
+ pop af
+ ld e, a
+ ret
+; 35612
+
+
+BattleCommand62: ; 35612
+; damagecalc
+
+; Return a damage value for move power d, player level e, enemy defense c and player attack b.
+
+; Return 1 if successful, else 0.
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+
+; Selfdestruct and Explosion halve defense.
+ cp EFFECT_EXPLOSION
+ jr nz, .asm_35620
+
+ srl c
+ jr nz, .asm_35620
+ inc c
+
+.asm_35620
+
+; Variable-hit moves and Conversion can have a power of 0.
+ cp EFFECT_MULTI_HIT
+ jr z, .asm_3562b
+
+ cp EFFECT_CONVERSION
+ jr z, .asm_3562b
+
+; No damage if move power is 0.
+ ld a, d
+ and a
+ ret z
+
+.asm_3562b
+; Minimum defense value is 1.
+ ld a, c
+ and a
+ jr nz, .asm_35631
+ ld c, 1
+.asm_35631
+
+
+ xor a
+ ld hl, hDividend
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+
+; Level * 2
+ ld a, e
+ add a
+ jr nc, .asm_3563e
+ ld [hl], $1
+.asm_3563e
+ inc hl
+ ld [hli], a
+
+; / 5
+ ld a, 5
+ ld [hld], a
+ push bc
+ ld b, $4
+ call Divide
+ pop bc
+
+; + 2
+ inc [hl]
+ inc [hl]
+
+; * bp
+ inc hl
+ ld [hl], d
+ call Multiply
+
+; * Attack
+ ld [hl], b
+ call Multiply
+
+; / Defense
+ ld [hl], c
+ ld b, $4
+ call Divide
+
+; / 50
+ ld [hl], 50
+ ld b, $4
+ call Divide
+
+
+; Item boosts
+ call GetUserItem
+
+ ld a, b
+ and a
+ jr z, .DoneItem
+
+ ld hl, TypeBoostItems
+
+.NextItem
+ ld a, [hli]
+ cp $ff
+ jr z, .DoneItem
+
+; Item effect
+ cp b
+ ld a, [hli]
+ jr nz, .NextItem
+
+; Type
+ ld b, a
+ ld a, BATTLE_VARS_MOVE_TYPE
+ call CleanGetBattleVarPair
+ cp b
+ jr nz, .DoneItem
+
+; * 100 + item effect amount
+ ld a, c
+ add 100
+ ld [hMultiplier], a
+ call Multiply
+
+; / 100
+ ld a, 100
+ ld [hDivisor], a
+ ld b, 4
+ call Divide
+.DoneItem
+
+; Critical hits
+ call .CriticalMultiplier
+
+
+; Update CurDamage (capped at 997).
+ ld hl, CurDamage
+ ld b, [hl]
+ ld a, [$ffb6]
+ add b
+ ld [$ffb6], a
+ jr nc, .asm_356a5
+
+ ld a, [$ffb5]
+ inc a
+ ld [$ffb5], a
+ and a
+ jr z, .Cap
+
+.asm_356a5
+ ld a, [$ffb3]
+ ld b, a
+ ld a, [$ffb4]
+ or a
+ jr nz, .Cap
+
+ ld a, [$ffb5]
+ cp 998 / $100
+ jr c, .asm_356bd
+
+ cp 998 / $100 + 1
+ jr nc, .Cap
+
+ ld a, [$ffb6]
+ cp 998 % $100
+ jr nc, .Cap
+
+.asm_356bd
+ inc hl
+
+ ld a, [$ffb6]
+ ld b, [hl]
+ add b
+ ld [hld], a
+
+ ld a, [$ffb5]
+ ld b, [hl]
+ adc b
+ ld [hl], a
+ jr c, .Cap
+
+ ld a, [hl]
+ cp 998 / $100
+ jr c, .asm_356df
+
+ cp 998 / $100 + 1
+ jr nc, .Cap
+
+ inc hl
+ ld a, [hld]
+ cp 998 % $100
+ jr c, .asm_356df
+
+.Cap
+ ld a, 997 / $100
+ ld [hli], a
+ ld a, 997 % $100
+ ld [hld], a
+
+
+.asm_356df
+; Minimum neutral damage is 2 (bringing the cap to 999).
+ inc hl
+ ld a, [hl]
+ add 2
+ ld [hld], a
+ jr nc, .asm_356e7
+ inc [hl]
+.asm_356e7
+
+ ld a, 1
+ and a
+ ret
+
+
+.CriticalMultiplier
+ ld a, [CriticalHit]
+ and a
+ ret z
+
+; x2
+ ld a, [$ffb6]
+ add a
+ ld [$ffb6], a
+
+ ld a, [$ffb5]
+ rl a
+ ld [$ffb5], a
+
+; Cap at $ffff.
+ ret nc
+
+ ld a, $ff
+ ld [$ffb5], a
+ ld [$ffb6], a
+
+ ret
+; 35703
+
+
+TypeBoostItems: ; 35703
+ db $32, NORMAL ; Pink/Polkadot Bow
+ db $33, FIGHTING ; Blackbelt
+ db $34, FLYING ; Sharp Beak
+ db $35, POISON ; Poison Barb
+ db $36, GROUND ; Soft Sand
+ db $37, ROCK ; Hard Stone
+ db $38, BUG ; Silverpowder
+ db $39, GHOST ; Spell Tag
+ db $3a, FIRE ; Charcoal
+ db $3b, WATER ; Mystic Water
+ db $3c, GRASS ; Miracle Seed
+ db $3d, ELECTRIC ; Magnet
+ db $3e, PSYCHIC ; Twistedspoon
+ db $3f, ICE ; Nevermeltice
+ db $40, DRAGON ; Dragon Scale
+ db $41, DARK ; Blackglasses
+ db $42, STEEL ; Metal Coat
+ db $ff
+; 35726
+
+
+BattleCommand3f: ; 35726
+; constantdamage
+
+ ld hl, BattleMonLevel
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35731
+ ld hl, EnemyMonLevel
+
+.asm_35731
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $57 ; by level (seismic toss, night shade)
+ ld b, [hl]
+ ld a, 0
+ jr z, .asm_3578c
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $58 ; variable (psywave)
+ jr z, .asm_35758
+
+ cp $28 ; half hp (super fang)
+ jr z, .asm_3576b
+
+ cp $63 ; by hp (flail, reversal)
+ jr z, .asm_35792
+
+ ld a, BATTLE_VARS_MOVE_POWER
+ call CleanGetBattleVarPair
+ ld b, a
+ ld a, $0
+ jr .asm_3578c
+
+.asm_35758
+ ld a, b
+ srl a
+ add b
+ ld b, a
+.asm_3575d
+ call FarBattleRNG
+ and a
+ jr z, .asm_3575d ; 35761 $fa
+ cp b
+ jr nc, .asm_3575d ; 35764 $f7
+ ld b, a
+ ld a, $0
+ jr .asm_3578c ; 35769 $21
+.asm_3576b
+ ld hl, EnemyMonHPHi
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35776 ; 35771 $3
+ ld hl, BattleMonHP
+.asm_35776
+ ld a, [hli]
+ srl a
+ ld b, a
+ ld a, [hl]
+ rr a
+ push af
+ ld a, b
+ pop bc
+ and a
+ jr nz, .asm_3578c ; 35781 $9
+ or b
+ ld a, $0
+ jr nz, .asm_3578c ; 35786 $4
+ ld b, $1
+ jr .asm_3578c ; 3578a $0
+.asm_3578c
+ ld hl, CurDamage
+ ld [hli], a
+ ld [hl], b
+ ret
+.asm_35792
+ ld hl, BattleMonHP
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3579d ; 35798 $3
+ ld hl, EnemyMonHPHi
+.asm_3579d
+ xor a
+ ld [$ffb3], a
+ ld [$ffb4], a
+ ld a, [hli]
+ ld [$ffb5], a
+ ld a, [hli]
+ ld [$ffb6], a
+ ld a, $30
+ ld [$ffb7], a
+ call $3119
+ ld a, [hli]
+ ld b, a
+ ld a, [hl]
+ ld [$ffb7], a
+ ld a, b
+ and a
+ jr z, .asm_357d6
+
+ ld a, [$ffb7]
+ srl b
+ rr a
+ srl b
+ rr a
+ ld [$ffb7], a
+ ld a, [$ffb5]
+ ld b, a
+ srl b
+ ld a, [$ffb6]
+ rr a
+ srl b
+ rr a
+ ld [$ffb6], a
+ ld a, b
+ ld [$ffb5], a
+
+.asm_357d6
+ ld b, $4
+ call $3124
+ ld a, [$ffb6]
+ ld b, a
+ ld hl, .table_35807
+
+.asm_357e1
+ ld a, [hli]
+ cp b
+ jr nc, .asm_357e8
+ inc hl
+ jr .asm_357e1
+
+.asm_357e8
+ ld a, [hBattleTurn]
+ and a
+ ld a, [hl]
+ jr nz, .asm_357f8
+
+ ld hl, PlayerMovePower
+ ld [hl], a
+ push hl
+ call PlayerAttackDamage
+ jr .asm_35800
+
+.asm_357f8
+ ld hl, EnemyMovePower
+ ld [hl], a
+ push hl
+ call EnemyAttackDamage
+
+.asm_35800
+ call BattleCommand62
+ pop hl
+ ld [hl], 1
+ ret
+
+.table_35807
+ db 1, $c8
+ db 4, $96
+ db 9, $64
+ db 16, $50
+ db 32, $28
+ db 48, $14
+; 35813
+
+
+BattleCommand40: ; 35813
+; counter
+
+ ld a, $1
+ ld [AttackMissed], a
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ and a
+ ret z
+ ld b, a
+
+ ld hl, $45ec
+ ld a, $f
+ rst FarCall
+
+ ld a, b
+ cp $59
+ ret z
+ call BattleCommanda3
+ ld a, [$d265]
+ and a
+ ret z
+ call Function0x36abf
+ ret z
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ dec a
+ ld de, StringBuffer1
+ call GetMoveData
+ ld a, [$d075]
+ and a
+ ret z
+ ld a, [$d076]
+ cp $14
+ ret nc
+ ld hl, CurDamage
+ ld a, [hli]
+ or [hl]
+ ret z
+ ld a, [hl]
+ add a
+ ld [hld], a
+ ld a, [hl]
+ adc a
+ ld [hl], a
+ jr nc, .asm_3585f ; 35859 $4
+ ld a, $ff
+ ld [hli], a
+ ld [hl], a
+.asm_3585f
+ xor a
+ ld [AttackMissed], a
+ ret
+; 35864
+
+
+BattleCommand41: ; 35864
+; encore
+
+ ld hl, EnemyMonMoves
+ ld de, EnemyPerishCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35875 ; 3586d $6
+ ld hl, BattleMonMoves
+ ld de, PlayerEncoreCount
+.asm_35875
+ ld a, BATTLE_VARS_LAST_MOVE_OPP
+ call CleanGetBattleVarPair
+ and a
+ jp z, Function0x35923
+ cp STRUGGLE
+ jp z, Function0x35923
+ cp ENCORE
+ jp z, Function0x35923
+ cp MIRROR_MOVE
+ jp z, Function0x35923
+ ld b, a
+
+.asm_3588e
+ ld a, [hli]
+ cp b
+ jr nz, .asm_3588e
+
+ ld bc, $0005
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ jp z, Function0x35923
+ ld a, [AttackMissed]
+ and a
+ jp nz, Function0x35923
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call GetBattleVarPair
+ bit 4, [hl]
+ jp nz, Function0x35923
+ set 4, [hl]
+ call FarBattleRNG
+ and $3
+ inc a
+ inc a
+ inc a
+ ld [de], a
+ call Function0x36abf
+ jr nz, .asm_3591a
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_358ef
+ push hl
+ ld a, [LastPlayerMove]
+ ld b, a
+ ld c, $0
+ ld hl, BattleMonMoves
+.asm_358cc
+ ld a, [hli]
+ cp b
+ jr z, .asm_358dd
+ inc c
+ ld a, c
+ cp $4
+ jr c, .asm_358cc
+ pop hl
+ res 4, [hl]
+ xor a
+ ld [de], a
+ jr Function0x35923
+.asm_358dd
+ pop hl
+ ld a, c
+ ld [CurMoveNum], a
+ ld a, b
+ ld [CurPlayerMove], a
+ dec a
+ ld de, PlayerMoveStruct
+ call GetMoveData
+ jr .asm_3591a
+.asm_358ef
+ push hl
+ ld a, [LastEnemyMove]
+ ld b, a
+ ld c, $0
+ ld hl, EnemyMonMoves
+.asm_358f9
+ ld a, [hli]
+ cp b
+ jr z, .asm_3590a
+ inc c
+ ld a, c
+ cp $4
+ jr c, .asm_358f9
+ pop hl
+ res 4, [hl]
+ xor a
+ ld [de], a
+ jr Function0x35923
+.asm_3590a
+ pop hl
+ ld a, c
+ ld [CurEnemyMoveNum], a
+ ld a, b
+ ld [CurEnemyMove], a
+ dec a
+ ld de, EnemyMoveStruct
+ call GetMoveData
+.asm_3591a
+ call Function0x37e01
+
+ ld hl, GotAnEncoreText
+ jp FarBattleTextBox
+; 35923
+
+
+Function0x35923: ; 35923
+ jp PrintDidntAffect2
+; 35926
+
+
+BattleCommand42: ; 35926
+; painsplit
+
+ ld a, [AttackMissed]
+ and a
+ jp nz, Function0x359cd
+ call CheckSubstituteOpp
+ jp nz, Function0x359cd
+ call Function0x37e01
+ ld hl, $c63f
+ ld de, EnemyMonMaxHPLo
+ call .asm_3597d
+ ld a, $1
+ ld [$d10a], a
+ ld hl, $c55e
+ ld a, $b
+ call $2d83
+ ld hl, EnemyMonHPHi
+ ld a, [hli]
+ ld [$d1ed], a
+ ld a, [hli]
+ ld [$d1ec], a
+ ld a, [hli]
+ ld [$d1eb], a
+ ld a, [hl]
+ ld [$d1ea], a
+ call Function0x359ac
+ xor a
+ ld [$d10a], a
+ call ResetDamage
+ ld hl, $c4ca
+ ld a, $b
+ call $2d83
+ ld a, $5e
+ ld hl, $4000
+ rst FarCall
+
+ ld hl, SharedPainText
+ jp FarBattleTextBox
+
+.asm_3597d
+ ld a, [hld]
+ ld [$d1ea], a
+ ld a, [hld]
+ ld [$d1eb], a
+ ld a, [hld]
+ ld b, a
+ ld [$d1ec], a
+ ld a, [hl]
+ ld [$d1ed], a
+ dec de
+ dec de
+ ld a, [de]
+ dec de
+ add b
+ ld [$d257], a
+ ld b, [hl]
+ ld a, [de]
+ adc b
+ srl a
+ ld [CurDamage], a
+ ld a, [$d257]
+ rr a
+ ld [$d257], a
+ inc hl
+ inc hl
+ inc hl
+ inc de
+ inc de
+ inc de
+
+ ; fallthrough
+; 359ac
+
+
+Function0x359ac: ; 359ac
+ ld c, [hl]
+ dec hl
+ ld a, [$d257]
+ sub c
+ ld b, [hl]
+ dec hl
+ ld a, [CurDamage]
+ sbc b
+ jr nc, .asm_359c2
+
+ ld a, [CurDamage]
+ ld b, a
+ ld a, [$d257]
+ ld c, a
+.asm_359c2
+ ld a, c
+ ld [hld], a
+ ld [$d1ee], a
+ ld a, b
+ ld [hli], a
+ ld [$d1ef], a
+ ret
+; 359cd
+
+Function0x359cd: ; 359cd
+ jp PrintDidntAffect2
+; 359d0
+
+
+BattleCommand43: ; 359d0
+; snore
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and $7
+ ret nz
+ call ResetDamage
+ ld a, $1
+ ld [AttackMissed], a
+ call Function0x37354
+ jp EndMoveEffect
+; 359e6
+
+
+BattleCommand44: ; 359e6
+; conversion2
+
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_35a50 ; 359ea $64
+ ld hl, BattleMonType1
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_359f7 ; 359f2 $3
+ ld hl, EnemyMonType1
+.asm_359f7
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ and a
+ jr z, .asm_35a50 ; 359fd $51
+ push hl
+ dec a
+ ld hl, $5afe
+ call GetMoveAttr
+ ld d, a
+ pop hl
+ cp $13
+ jr z, .asm_35a50 ; 35a0b $43
+ call Function0x37e01
+
+ call SwitchTurn
+.asm_35a13
+ call FarBattleRNG
+ and $1f
+ cp $a
+ jr c, .asm_35a24 ; 35a1a $8
+ cp $14
+ jr c, .asm_35a13 ; 35a1e $f3
+ cp $1c
+ jr nc, .asm_35a13 ; 35a22 $ef
+.asm_35a24
+ ld [hli], a
+ ld [hld], a
+ push hl
+ ld a, BATTLE_VARS_MOVE_TYPE
+ call GetBattleVarPair
+ push af
+ push hl
+ ld a, d
+ ld [hl], a
+ call Function0x347c8
+ pop hl
+ pop af
+ ld [hl], a
+ pop hl
+ ld a, [$d265]
+ cp $a
+ jr nc, .asm_35a13 ; 35a3c $d5
+ call SwitchTurn
+
+ ld a, [hl]
+ ld [$d265], a
+ ld a, $29
+ call $2d83
+ ld hl, $5452
+ jp FarBattleTextBox
+.asm_35a50
+ jp Function0x37354
+; 35a53
+
+
+BattleCommand45: ; 35a53
+; lockon
+
+ call CheckSubstituteOpp
+ jr nz, .asm_35a6e ; 35a56 $16
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_35a6e ; 35a5c $10
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call GetBattleVarPair
+ set 5, [hl]
+ call Function0x37e01
+
+ ld hl, TookAimText
+ jp FarBattleTextBox
+
+.asm_35a6e
+ call Function0x37e77
+ jp PrintDidntAffect
+; 35a74
+
+
+BattleCommand46: ; 35a74
+; sketch
+
+ call Function0x372d8
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_35a83 ; 35a7b $6
+ call Function0x37e77
+ jp PrintNothingHappened
+.asm_35a83
+ call CheckSubstituteOpp
+ jp nz, $5b10
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call GetBattleVarPair
+ bit 3, [hl]
+ jp nz, $5b10
+ ld a, $2
+ call $3945
+ ld d, h
+ ld e, l
+ ld hl, BattleMonMoves
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35aa5 ; 35aa0 $3
+ ld hl, EnemyMonMoves
+.asm_35aa5
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ ld [$d265], a
+ ld b, a
+ and a
+ jr z, .asm_35b10 ; 35aaf $5f
+ cp $a5
+ jr z, .asm_35b10 ; 35ab3 $5b
+ ld c, $4
+.asm_35ab7
+ ld a, [hli]
+ cp b
+ jr z, .asm_35b10 ; 35ab9 $55
+ dec c
+ jr nz, .asm_35ab7 ; 35abc $f9
+ dec hl
+ ld c, $4
+.asm_35ac1
+ dec c
+ ld a, [hld]
+ cp $a6
+ jr nz, .asm_35ac1 ; 35ac5 $fa
+ inc hl
+ ld a, b
+ ld [hl], a
+ push bc
+ push hl
+ dec a
+ ld hl, $5b00
+ call GetMoveAttr
+ pop hl
+ ld bc, $0006
+ add hl, bc
+ ld [hl], a
+ pop bc
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35af6 ; 35add $17
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .asm_35af6 ; 35ae3 $11
+ ld a, [hl]
+ push bc
+ ld hl, $c739
+ ld b, $0
+ add hl, bc
+ ld [hl], a
+ ld hl, $c735
+ add hl, bc
+ pop bc
+ ld [hl], b
+ jr .asm_35b04 ; 35af4 $e
+.asm_35af6
+ ld a, [hl]
+ push af
+ ld l, c
+ ld h, $0
+ add hl, de
+ ld a, b
+ ld [hl], a
+ pop af
+ ld de, $0015
+ add hl, de
+ ld [hl], a
+.asm_35b04
+ call $34f8
+ call Function0x37e01
+
+ ld hl, SketchedText
+ jp FarBattleTextBox
+
+.asm_35b10
+ call Function0x37e77
+ jp PrintDidntAffect
+; 35b16
+
+
+BattleCommand47: ; 35b16
+; defrostopponent
+
+; If the opponent isn't frozen, raise Attack one stage.
+; If the opponent is frozen, thaw them and raise Accuracy two stages.
+
+ call Function0x37e01
+
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ call Defrost
+
+; Sharply raise accuracy
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call GetBattleVarPair
+ ld a, [hl]
+ push hl
+ push af
+
+ ld a, $a ; meditate, sharpen
+ ld [hl], a
+ call BattleCommand1c
+
+ pop af
+ pop hl
+ ld [hl], a
+ ret
+; 35b33
+
+
+BattleCommand48: ; 35b33
+; sleeptalk
+
+ call Function0x372d8
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_35ba3 ; 35b3a $67
+ ld a, [hBattleTurn]
+ and a
+ ld hl, BattleMonMove2
+ ld a, [DisabledMove]
+ ld d, a
+ jr z, .asm_35b4f ; 35b46 $7
+ ld hl, EnemyMonMove2
+ ld a, [EnemyEncoredMove]
+ ld d, a
+.asm_35b4f
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and $7
+ jr z, .asm_35ba3 ; 35b56 $4b
+ ld a, [hl]
+ and a
+ jr z, .asm_35ba3 ; 35b5a $47
+ call .asm_35ba9
+ jr c, .asm_35ba3 ; 35b5f $42
+ dec hl
+.asm_35b62
+ push hl
+ call FarBattleRNG
+ and $3
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ and a
+ jr z, .asm_35b62 ; 35b6f $f1
+ ld e, a
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ cp e
+ jr z, .asm_35b62 ; 35b78 $e8
+ ld a, e
+ cp d
+ jr z, .asm_35b62 ; 35b7c $e4
+ call .asm_35bdf
+ jr z, .asm_35b62 ; 35b81 $df
+ ld a, BATTLE_VARS_MOVE
+ call GetBattleVarPair
+ ld a, e
+ ld [hl], a
+ call Function0x34548
+ jr nz, .asm_35b9a ; 35b8d $b
+ ld a, [$c689]
+ push af
+ call BattleCommand0a
+ pop af
+ ld [$c689], a
+.asm_35b9a
+ call Function0x37e36
+ call UpdateMoveData
+ jp ResetTurn
+.asm_35ba3
+ call Function0x37e77
+ jp TryPrintButItFailed
+
+.asm_35ba9
+ push hl
+ push de
+ push bc
+ call .asm_35bb3
+ pop bc
+ pop de
+ pop hl
+ ret
+
+.asm_35bb3
+ ld a, [hBattleTurn]
+ and a
+ ld a, [DisabledMove]
+ jr z, .asm_35bbe
+
+ ld a, [EnemyEncoredMove]
+.asm_35bbe
+ ld b, a
+ ld a, $10
+ call CleanGetBattleVarPair
+ ld c, a
+ dec hl
+ ld d, $4
+.asm_35bc8
+ ld a, [hl]
+ and a
+ jr z, .asm_35bdb
+
+ cp c
+ jr z, .asm_35bd7
+ cp b
+ jr z, .asm_35bd7
+
+ call .asm_35bdf
+ jr nz, .asm_35bdd
+
+.asm_35bd7
+ inc hl
+ dec d
+ jr nz, .asm_35bc8
+
+.asm_35bdb
+ scf
+ ret
+
+.asm_35bdd
+ and a
+ ret
+
+.asm_35bdf
+ push hl
+ push de
+ push bc
+
+ ld b, a
+ ld hl, $45ec
+ ld a, $f
+ rst $8
+ ld a, b
+
+ pop bc
+ pop de
+ pop hl
+
+ cp $91
+ ret z
+ cp $27
+ ret z
+ cp $4b
+ ret z
+ cp $97
+ ret z
+ cp $9b
+ ret z
+ cp $1a
+ ret
+; 35bff
+
+
+BattleCommand49: ; 35bff
+; destinybond
+
+ ld a, BATTLE_VARS_SUBSTATUS5
+ call GetBattleVarPair
+ set 6, [hl]
+ call Function0x37e01
+ ld hl, DestinyBondEffectText
+ jp FarBattleTextBox
+; 35c0f
+
+
+BattleCommand4a: ; 35c0f
+; spite
+
+ ld a, [AttackMissed]
+ and a
+ jp nz, $5c91
+ ld bc, $0030
+ ld hl, EnemyMonMoves
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35c24 ; 35c1f $3
+ ld hl, BattleMonMoves
+.asm_35c24
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ and a
+ jr z, .asm_35c91 ; 35c2a $65
+ cp $a5
+ jr z, .asm_35c91 ; 35c2e $61
+ ld b, a
+ ld c, $ff
+.asm_35c33
+ inc c
+ ld a, [hli]
+ cp b
+ jr nz, .asm_35c33 ; 35c36 $fb
+ ld [$d265], a
+ dec hl
+ ld b, $0
+ push bc
+ ld c, $6
+ add hl, bc
+ pop bc
+ ld a, [hl]
+ and $3f
+ jr z, .asm_35c91 ; 35c46 $49
+ push bc
+ call $34f8
+ call FarBattleRNG
+ and $3
+ inc a
+ inc a
+ ld b, a
+ ld a, [hl]
+ and $3f
+ cp b
+ jr nc, .asm_35c5b ; 35c58 $1
+ ld b, a
+.asm_35c5b
+ ld a, [hl]
+ sub b
+ ld [hl], a
+ push af
+ ld a, $17
+ call $3951
+ ld d, b
+ pop af
+ pop bc
+ add hl, bc
+ ld e, a
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call CleanGetBattleVarPair
+ bit 3, a
+ jr nz, .asm_35c82 ; 35c70 $10
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_35c81 ; 35c75 $a
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .asm_35c81 ; 35c7b $4
+ ld hl, $c739
+ add hl, bc
+.asm_35c81
+ ld [hl], e
+.asm_35c82
+ push de
+ call Function0x37e01
+ pop de
+ ld a, d
+ ld [$d265], a
+ ld hl, SpiteEffectText
+ jp FarBattleTextBox
+.asm_35c91
+ jp PrintDidntAffect2
+; 35c94
+
+
+BattleCommand4b: ; 35c94
+; falseswipe
+
+ ld hl, EnemyMonHPHi
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35c9f ; 35c9a $3
+ ld hl, BattleMonHP
+.asm_35c9f
+ ld de, CurDamage
+ ld c, $2
+ push hl
+ push de
+ call StringCmp
+ pop de
+ pop hl
+ jr c, .asm_35cc7 ; 35cab $1a
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ dec a
+ ld [de], a
+ inc a
+ jr nz, .asm_35cba ; 35cb4 $4
+ dec de
+ ld a, [de]
+ dec a
+ ld [de], a
+.asm_35cba
+ ld a, [CriticalHit]
+ cp $2
+ jr nz, .asm_35cc5 ; 35cbf $4
+ xor a
+ ld [CriticalHit], a
+.asm_35cc5
+ scf
+ ret
+.asm_35cc7
+ and a
+ ret
+; 35cc9
+
+
+BattleCommand4c: ; 35cc9
+; healbell
+
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ res 0, [hl]
+ ld de, PartyMon1Status
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35cdb ; 35cd6 $3
+ ld de, OTPartyMon1Status
+.asm_35cdb
+ ld a, BATTLE_VARS_STATUS
+ call GetBattleVarPair
+ xor a
+ ld [hl], a
+ ld h, d
+ ld l, e
+ ld bc, $30
+ ld d, $6
+.asm_35ce9
+ ld [hl], a
+ add hl, bc
+ dec d
+ jr nz, .asm_35ce9
+ call Function0x37e01
+
+ ld hl, BellChimedText
+ call FarBattleTextBox
+
+ ld a, [hBattleTurn]
+ and a
+ jp z, Function0x365d7
+ jp Function0x365fd
+; 35d00
+
+
+FarPlayBattleAnimation: ; 35d00
+; play animation de
+
+; battle animations disabled?
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call CleanGetBattleVarPair
+ and $60 ; bit 6 | 5
+ ret nz
+
+ ; fallthrough
+; 35d08
+
+PlayFXAnimID: ; 35d08
+ ld a, e
+ ld [FXAnimIDLo], a
+ ld a, d
+ ld [FXAnimIDHi], a
+
+ ld c, 3
+ call DelayFrames
+
+ ld hl, $40d6
+ ld a, $33
+ rst FarCall ; callab SafePlayBattleAnimation
+
+ ret
+; 35d1c
+
+
+Function0x35d1c: ; 35d1c
+ ld hl, CurDamage
+ ld a, [hli]
+ ld b, a
+ ld a, [hl]
+ or b
+ jr z, .asm_35d7b
+
+ ld a, c
+ and a
+ jr nz, .asm_35d31
+
+ ld a, [EnemySubStatus4]
+ bit 4, a
+ jp nz, Function0x35de0
+.asm_35d31
+ ld a, [hld]
+ ld b, a
+ ld a, [EnemyMonHPLo]
+ ld [$d1ec], a
+ sub b
+ ld [EnemyMonHPLo], a
+ ld a, [hl]
+ ld b, a
+ ld a, [EnemyMonHPHi]
+ ld [$d1ed], a
+ sbc b
+ ld [EnemyMonHPHi], a
+ jr nc, .asm_35d59
+
+ ld a, [$d1ed]
+ ld [hli], a
+ ld a, [$d1ec]
+ ld [hl], a
+ xor a
+ ld hl, EnemyMonHPHi
+ ld [hli], a
+ ld [hl], a
+.asm_35d59
+ ld hl, EnemyMonMaxHPHi
+ ld a, [hli]
+ ld [$d1eb], a
+ ld a, [hl]
+ ld [$d1ea], a
+ ld hl, EnemyMonHPHi
+ ld a, [hli]
+ ld [$d1ef], a
+ ld a, [hl]
+ ld [$d1ee], a
+ ld hl, $c4ca
+ xor a
+ ld [$d10a], a
+ ld a, $b
+ call Predef
+.asm_35d7b
+ jp $39c9
+; 35d7e
+
+
+Function0x35d7e: ; 35d7e
+ ld hl, CurDamage
+ ld a, [hli]
+ ld b, a
+ ld a, [hl]
+ or b
+ jr z, .asm_35ddd
+
+ ld a, c
+ and a
+ jr nz, .asm_35d93
+
+ ld a, [PlayerSubStatus4]
+ bit 4, a
+ jp nz, Function0x35de0
+.asm_35d93
+ ld a, [hld]
+ ld b, a
+ ld a, [$c63d]
+ ld [$d1ec], a
+ sub b
+ ld [$c63d], a
+ ld [$d1ee], a
+ ld b, [hl]
+ ld a, [BattleMonHP]
+ ld [$d1ed], a
+ sbc b
+ ld [BattleMonHP], a
+ ld [$d1ef], a
+ jr nc, .asm_35dc5
+
+ ld a, [$d1ed]
+ ld [hli], a
+ ld a, [$d1ec]
+ ld [hl], a
+ xor a
+ ld hl, BattleMonHP
+ ld [hli], a
+ ld [hl], a
+ ld hl, $d1ee
+ ld [hli], a
+ ld [hl], a
+.asm_35dc5
+ ld hl, BattleMonMaxHP
+ ld a, [hli]
+ ld [$d1eb], a
+ ld a, [hl]
+ ld [$d1ea], a
+ ld hl, $c55e
+ ld a, $1
+ ld [$d10a], a
+ ld a, $b
+ call Predef
+.asm_35ddd
+ jp $39c9
+; 35de0
+
+
+Function0x35de0: ; 35de0
+
+ ld hl, SubTookDamageText
+ call FarBattleTextBox
+
+ ld de, $c6e0
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35df1
+
+ ld de, $c6df
+.asm_35df1
+ ld hl, CurDamage
+ ld a, [hli]
+ and a
+ jr nz, .asm_35dff
+
+ ld a, [de]
+ sub [hl]
+ ld [de], a
+ jr z, .asm_35dff
+
+ jr nc, .asm_35e3d
+
+.asm_35dff
+ ld a, $8
+ call GetBattleVarPair
+ res 4, [hl]
+
+ ld hl, SubFadedText
+ call FarBattleTextBox
+
+ call SwitchTurn
+ call BattleCommanda7
+ ld a, $2
+ call CleanGetBattleVarPair
+ and $60
+ call z, Function0x37ec7
+ call SwitchTurn
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call GetBattleVarPair
+ cp $1d
+ jr z, .asm_35e3a
+ cp $2c
+ jr z, .asm_35e3a
+ cp $4d
+ jr z, .asm_35e3a
+ cp $68
+ jr z, .asm_35e3a
+ cp $9a
+ jr z, .asm_35e3a
+
+ xor a
+ ld [hl], a
+.asm_35e3a
+ call $39c9
+.asm_35e3d
+ jp ResetDamage
+; 35e40
+
+
+UpdateMoveData: ; 35e40
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call GetBattleVarPair
+ ld d, h
+ ld e, l
+
+ ld a, BATTLE_VARS_MOVE
+ call CleanGetBattleVarPair
+ ld [$cf60], a ; not CurSpecies
+ ld [$d265], a
+
+ dec a
+ call GetMoveData
+ call GetMoveName
+ jp CopyName1
+; 35e5c
+
+
+BattleCommand14: ; 35e5c
+; sleeptarget
+
+ call GetOpponentItem
+ ld a, b
+ cp $17
+ jr nz, .asm_35e70 ; 35e62 $c
+ ld a, [hl]
+ ld [$d265], a
+ call $3468
+ ld hl, ProtectedByText
+ jr .asm_35ec6
+
+.asm_35e70
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ ld d, h
+ ld e, l
+ ld a, [de]
+ and 7
+ ld hl, AlreadyAsleepText
+ jr nz, .asm_35ec6
+
+ ld a, [AttackMissed]
+ and a
+ jp nz, PrintDidntAffect2
+
+ ld hl, DidntAffect1Text
+ call Function0x35ece
+ jr c, .asm_35ec6
+
+ ld a, [de]
+ and a
+ jr nz, .asm_35ec6
+
+ call CheckSubstituteOpp
+ jr nz, .asm_35ec6
+
+ call Function0x37e01
+ ld b, $7
+ ld a, [$cfc0]
+ and a
+ jr z, .asm_35ea4
+ ld b, $3
+
+.asm_35ea4
+ call FarBattleRNG
+ and b
+ jr z, .asm_35ea4
+ cp 7
+ jr z, .asm_35ea4
+ inc a
+ ld [de], a
+ call $398e
+ call $39c9
+
+ ld hl, FellAsleepText
+ call FarBattleTextBox
+
+ ld a, $f
+ ld hl, $5de9
+ rst FarCall
+
+ jp z, Function0x34216
+ ret
+
+.asm_35ec6
+ push hl
+ call Function0x37e77
+ pop hl
+ jp FarBattleTextBox
+; 35ece
+
+
+Function0x35ece: ; 35ece
+; Enemy turn
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35eec
+
+; Not in link battle
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_35eec
+
+
+ ld a, [$cfc0]
+ and a
+ jr nz, .asm_35eec
+
+; Not locked-on by the enemy
+ ld a, [PlayerSubStatus5]
+ bit 5, a
+ jr nz, .asm_35eec
+
+ call FarBattleRNG
+ cp $40
+ ret c
+
+.asm_35eec
+ xor a
+ ret
+; 35eee
+
+
+BattleCommand13: ; 35eee
+; poisontarget
+
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ and a
+ ret nz
+ ld a, [TypeModifier]
+ and $7f
+ ret z
+ call Function0x35fe1
+ ret z
+ call GetOpponentItem
+ ld a, b
+ cp $14
+ ret z
+ ld a, [$c70d]
+ and a
+ ret nz
+ call Function0x37962
+ ret nz
+ call Function0x35ff5
+ ld de, $0106
+ call Function0x37e54
+ call $39c9
+
+ ld hl, WasPoisonedText
+ call FarBattleTextBox
+
+ ld a, $f
+ ld hl, $5de9
+ rst FarCall
+ ret
+; 35f2c
+
+
+BattleCommand2f: ; 35f2c
+; poison
+
+ ld hl, DoesntAffectText
+ ld a, [TypeModifier]
+ and $7f
+ jp z, .asm_35fb8
+ call Function0x35fe1
+ jp z, .asm_35fb8
+ ld a, BATTLE_VARS_STATUS_OPP
+ call CleanGetBattleVarPair
+ ld b, a
+ ld hl, AlreadyPoisonedText
+ and $8
+ jp nz, .asm_35fb8
+ call GetOpponentItem
+ ld a, b
+ cp $14
+ jr nz, .asm_35f5f ; 35f51 $c
+ ld a, [hl]
+ ld [$d265], a
+ call $3468
+ ld hl, ProtectedByText
+ jr .asm_35fb8 ; 35f5d $59
+.asm_35f5f
+ ld hl, DidntAffect1Text
+ ld a, BATTLE_VARS_STATUS_OPP
+ call CleanGetBattleVarPair
+ and a
+ jr nz, .asm_35fb8 ; 35f68 $4e
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35f89 ; 35f6d $1a
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_35f89 ; 35f73 $14
+ ld a, [$cfc0]
+ and a
+ jr nz, .asm_35f89 ; 35f79 $e
+ ld a, [PlayerSubStatus5]
+ bit 5, a
+ jr nz, .asm_35f89 ; 35f80 $7
+ call FarBattleRNG
+ cp $40
+ jr c, .asm_35fb8 ; 35f87 $2f
+.asm_35f89
+ call CheckSubstituteOpp
+ jr nz, .asm_35fb8 ; 35f8c $2a
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_35fb8 ; 35f92 $24
+ call Function0x35fc9
+ jr z, .asm_35fa4 ; 35f97 $b
+ call Function0x35fc0
+
+ ld hl, WasPoisonedText
+ call FarBattleTextBox
+
+ jr .asm_35fb1 ; 35fa2 $d
+.asm_35fa4
+ set 0, [hl]
+ xor a
+ ld [de], a
+ call Function0x35fc0
+
+ ld hl, BadlyPoisonedText
+ call FarBattleTextBox
+
+.asm_35fb1
+ ld a, $f
+ ld hl, $5de9
+ rst FarCall
+ ret
+
+.asm_35fb8
+ push hl
+ call Function0x37e77
+ pop hl
+ jp FarBattleTextBox
+; 35fc0
+
+
+Function0x35fc0: ; 35fc0
+ call Function0x37e01
+ call Function0x35ff5
+ jp $39c9
+; 35fc9
+
+
+Function0x35fc9: ; 35fc9
+ ld a, $9
+ call $39e7
+ ld a, [hBattleTurn]
+ and a
+ ld de, $c67c
+ jr z, .asm_35fd9 ; 0x35fd4 $3
+ ld de, $c674
+.asm_35fd9
+ ld a, $d
+ call CleanGetBattleVarPair
+ cp $21
+ ret
+; 35fe1
+
+
+Function0x35fe1: ; 35fe1
+ ld de, EnemyMonType1
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35fec ; 0x35fe7 $3
+ ld de, BattleMonType1
+.asm_35fec
+ ld a, [de]
+ inc de
+ cp $3
+ ret z
+ ld a, [de]
+ cp $3
+ ret
+; 35ff5
+
+
+Function0x35ff5: ; 35ff5
+ ld a, $b
+ call $39e7
+ set 3, [hl]
+ jp $398e
+; 35fff
+
+
+BattleCommand15: ; 35fff
+; draintarget
+ call Function0x36011
+ ld hl, SuckedHealthText
+ jp FarBattleTextBox
+; 36008
+
+
+BattleCommand16: ; 36008
+; eatdream
+ call Function0x36011
+ ld hl, DreamEatenText
+ jp FarBattleTextBox
+; 36011
+
+
+Function0x36011: ; 36011
+ ld hl, CurDamage
+ ld a, [hli]
+ srl a
+ ld [$ffb3], a
+ ld b, a
+ ld a, [hl]
+ rr a
+ ld [$ffb4], a
+ or b
+ jr nz, .asm_36026 ; 0x36020 $4
+ ld a, $1
+ ld [$ffb4], a
+.asm_36026
+ ld hl, BattleMonHP
+ ld de, BattleMonMaxHP
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36037 ; 0x3602f $6
+ ld hl, EnemyMonHPHi
+ ld de, EnemyMonMaxHPHi
+.asm_36037
+ ld bc, $d1ed
+ ld a, [hli]
+ ld [bc], a
+ ld a, [hl]
+ dec bc
+ ld [bc], a
+ ld a, [de]
+ dec bc
+ ld [bc], a
+ inc de
+ ld a, [de]
+ dec bc
+ ld [bc], a
+ ld a, [$ffb4]
+ ld b, [hl]
+ add b
+ ld [hld], a
+ ld [$d1ee], a
+ ld a, [$ffb3]
+ ld b, [hl]
+ adc b
+ ld [hli], a
+ ld [$d1ef], a
+ jr c, .asm_36064 ; 0x36056 $c
+ ld a, [hld]
+ ld b, a
+ ld a, [de]
+ dec de
+ sub b
+ ld a, [hli]
+ ld b, a
+ ld a, [de]
+ inc de
+ sbc b
+ jr nc, .asm_36070 ; 0x36062 $c
+.asm_36064
+ ld a, [de]
+ ld [hld], a
+ ld [$d1ee], a
+ dec de
+ ld a, [de]
+ ld [hli], a
+ ld [$d1ef], a
+ inc de
+.asm_36070
+ ld a, [hBattleTurn]
+ and a
+ ld hl, $c55e
+ ld a, $1
+ jr z, .asm_3607e ; 0x36078 $4
+ ld hl, $c4ca
+ xor a
+.asm_3607e
+ ld [$d10a], a
+ ld a, $b
+ call Predef
+ call $39c9
+ jp $399c
+; 3608c
+
+
+BattleCommand17: ; 3608c
+; burntarget
+
+ xor a
+ ld [$cfca], a
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ and a
+ jp nz, Defrost
+ ld a, [TypeModifier]
+ and $7f
+ ret z
+ call Function0x36e5b
+ ret z
+ call GetOpponentItem
+ ld a, b
+ cp $15
+ ret z
+ ld a, [$c70d]
+ and a
+ ret nz
+ call Function0x37962
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ set 4, [hl]
+ call $398e
+ ld hl, $6c76
+ call CallBankF
+ ld de, $0105
+ call Function0x37e54
+ call $39c9
+
+ ld hl, WasBurnedText
+ call FarBattleTextBox
+
+ ld a, $f
+ ld hl, $5de9
+ rst FarCall
+ ret
+; 360dd
+
+
+Defrost: ; 360dd
+ ld a, [hl]
+ and $20
+ ret z
+
+ xor a
+ ld [hl], a
+
+ ld a, [hBattleTurn]
+ and a
+ ld a, [CurOTMon]
+ ld hl, OTPartyMon1Status
+ jr z, .ok
+ ld hl, PartyMon1Status
+ ld a, [CurBattleMon]
+.ok
+
+ call GetPartyLocation
+ xor a
+ ld [hl], a
+ call $398e
+
+ ld hl, DefrostedOpponentText
+ jp FarBattleTextBox
+; 36102
+
+
+BattleCommand18: ; 36102
+; freezetarget
+
+ xor a
+ ld [$cfca], a
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ and a
+ ret nz
+ ld a, [TypeModifier]
+ and $7f
+ ret z
+ ld a, [Weather]
+ cp $2
+ ret z
+ call Function0x36e5b
+ ret z
+ call GetOpponentItem
+ ld a, b
+ cp $16
+ ret z
+ ld a, [$c70d]
+ and a
+ ret nz
+ call Function0x37962
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ set 5, [hl]
+ call $398e
+ ld de, $0108
+ call Function0x37e54
+ call $39c9
+
+ ld hl, WasFrozenText
+ call FarBattleTextBox
+
+ ld a, $f
+ ld hl, $5de9
+ rst FarCall
+ ret nz
+ call Function0x34216
+ call EndRechargeOpp
+ ld hl, $c740
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36162 ; 3615d $3
+ ld hl, $c73f
+.asm_36162
+ ld [hl], $1
+ ret
+; 36165
+
+
+BattleCommand19: ; 36165
+; paralyzetarget
+
+ xor a
+ ld [$cfca], a
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ and a
+ ret nz
+ ld a, [TypeModifier]
+ and $7f
+ ret z
+ call GetOpponentItem
+ ld a, b
+ cp $18
+ ret z
+ ld a, [$c70d]
+ and a
+ ret nz
+ call Function0x37962
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ set 6, [hl]
+ call $398e
+ ld hl, $6c39
+ call CallBankF
+ ld de, $0109
+ call Function0x37e54
+ call $39c9
+ call PrintParalyze
+ ld hl, $5de9
+ jp CallBankF
+; 361ac
+
+
+BattleCommand70: ; 361ac
+; attackup
+ ld b, $0
+ jr BattleCommand1c
+BattleCommand71: ; 361b0
+; defenseup
+ ld b, $1
+ jr BattleCommand1c
+BattleCommand72: ; 361b4
+; speedup
+ ld b, $2
+ jr BattleCommand1c
+BattleCommand73: ; 361b8
+; specialattackup
+ ld b, $3
+ jr BattleCommand1c
+BattleCommand74: ; 361bc
+; specialdefenseup
+ ld b, $4
+ jr BattleCommand1c
+BattleCommand75: ; 361c0
+; accuracyup
+ ld b, $5
+ jr BattleCommand1c
+BattleCommand76: ; 361c4
+; evasionup
+ ld b, $6
+ jr BattleCommand1c
+BattleCommand77: ; 361c8
+; attackup2
+ ld b, $10
+ jr BattleCommand1c
+BattleCommand78: ; 361cc
+; defenseup2
+ ld b, $11
+ jr BattleCommand1c
+BattleCommand79: ; 361d0
+; speedup2
+ ld b, $12
+ jr BattleCommand1c
+BattleCommand7a: ; 361d4
+; specialattackup2
+ ld b, $13
+ jr BattleCommand1c
+BattleCommand7b: ; 361d8
+; specialdefenseup2
+ ld b, $14
+ jr BattleCommand1c
+BattleCommand7c: ; 361dc
+; accuracyup2
+ ld b, $15
+ jr BattleCommand1c
+BattleCommand7d: ; 361e0
+; evasionup2
+ ld b, $16
+ jr BattleCommand1c
+BattleCommand1c: ; 361e4
+; statup
+ call Function0x361ef
+ ld a, [$c70e]
+ and a
+ ret nz
+ jp Function0x36281
+; 361ef
+
+
+Function0x361ef: ; 361ef
+ ld a, b
+ ld [$c70c], a
+ ld hl, PlayerStatLevels
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_361fe ; 0x361f9 $3
+ ld hl, EnemyStatLevels
+.asm_361fe
+ ld a, [AttackMissed]
+ and a
+ jp nz, Function0x3627b
+ ld a, [$c70d]
+ and a
+ jp nz, Function0x3627b
+ ld a, [$c70c]
+ and $f
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld b, [hl]
+ inc b
+ ld a, $d
+ cp b
+ jp c, Function0x36270
+ ld a, [$c70c]
+ and $f0
+ jr z, .asm_3622b ; 0x36222 $7
+ inc b
+ ld a, $d
+ cp b
+ jr nc, .asm_3622b ; 0x36228 $1
+ ld b, a
+.asm_3622b
+ ld [hl], b
+ push hl
+ ld a, c
+ cp $5
+ jr nc, .asm_36268 ; 0x36230 $36
+ ld hl, $c641
+ ld de, $c6b6
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36243 ; 0x3623b $6
+ ld hl, $d21b
+ ld de, $c6c1
+.asm_36243
+ push bc
+ sla c
+ ld b, $0
+ add hl, bc
+ ld a, c
+ add e
+ ld e, a
+ jr nc, .asm_3624f ; 0x3624c $1
+ inc d
+.asm_3624f
+ pop bc
+ ld a, [hld]
+ sub $e7
+ jr nz, .asm_3625b ; 0x36253 $6
+ ld a, [hl]
+ sbc $3
+ jp z, Function0x3626e
+.asm_3625b
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36265 ; 0x3625e $5
+ call Function0x365fd
+ jr .asm_36268 ; 0x36263 $3
+.asm_36265
+ call Function0x365d7
+.asm_36268
+ pop hl
+ xor a
+ ld [$c70e], a
+ ret
+; 3626e
+
+
+Function0x3626e: ; 3626e
+ pop hl
+ dec [hl]
+ ; fallthrough
+; 36270
+
+
+Function0x36270: ; 36270
+ ld a, $2
+ ld [$c70e], a
+ ld a, $1
+ ld [AttackMissed], a
+ ret
+; 3627b
+
+
+Function0x3627b: ; 3627b
+ ld a, $1
+ ld [$c70e], a
+ ret
+; 36281
+
+
+Function0x36281: ; 36281
+ ld bc, $c6fe
+ ld hl, $7447
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36292 ; 0x3628a $6
+ ld bc, $c6fa
+ ld hl, $7486
+.asm_36292
+ ld a, $c
+ call CleanGetBattleVarPair
+ cp $6b
+ ret nz
+ ld a, $1
+ ld [bc], a
+ call Function0x37ed5
+ ret nc
+ xor a
+ ld [$ffd4], a
+ call CallBankF
+ call WaitBGMap
+ jp BattleCommandaa
+; 362ad
+
+
+BattleCommand7e: ; 362ad
+; attackdown
+ ld a, $0
+ jr BattleCommand1d
+BattleCommand7f: ; 362b1
+; defensedown
+ ld a, $1
+ jr BattleCommand1d
+BattleCommand80: ; 362b5
+; speeddown
+ ld a, $2
+ jr BattleCommand1d
+BattleCommand81: ; 362b9
+; specialattackdown
+ ld a, $3
+ jr BattleCommand1d
+BattleCommand82: ; 362bd
+; specialdefensedown
+ ld a, $4
+ jr BattleCommand1d
+BattleCommand83: ; 362c1
+; accuracydown
+ ld a, $5
+ jr BattleCommand1d
+BattleCommand84: ; 362c5
+; evasiondown
+ ld a, $6
+ jr BattleCommand1d
+BattleCommand85: ; 362c9
+; attackdown2
+ ld a, $10
+ jr BattleCommand1d
+BattleCommand86: ; 362cd
+; defensedown2
+ ld a, $11
+ jr BattleCommand1d
+BattleCommand87: ; 362d1
+; speeddown2
+ ld a, $12
+ jr BattleCommand1d
+BattleCommand88: ; 362d5
+; specialattackdown2
+ ld a, $13
+ jr BattleCommand1d
+BattleCommand89: ; 362d9
+; specialdefensedown2
+ ld a, $14
+ jr BattleCommand1d
+BattleCommand8a: ; 362dd
+; accuracydown2
+ ld a, $15
+ jr BattleCommand1d
+BattleCommand8b: ; 362e1
+; evasiondown2
+ ld a, $16
+
+BattleCommand1d: ; 362e3
+; statdown
+ ld [$c70c], a
+ call Function0x36391
+ jp nz, Function0x36386
+ ld hl, EnemyStatLevels
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_362f7 ; 362f2 $3
+ ld hl, PlayerStatLevels
+.asm_362f7
+ ld a, [$c70c]
+ and $f
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld b, [hl]
+ dec b
+ jp z, .asm_36372
+ ld a, [$c70c]
+ and $f0
+ jr z, .asm_36310 ; 3630a $4
+ dec b
+ jr nz, .asm_36310 ; 3630d $1
+ inc b
+.asm_36310
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36338 ; 36313 $23
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_36338 ; 36319 $1d
+ ld a, [$cfc0]
+ and a
+ jr nz, .asm_36338 ; 3631f $17
+ ld a, [PlayerSubStatus5]
+ bit 5, a
+ jr nz, .asm_36338 ; 36326 $10
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $49
+ jr z, .asm_36338 ; 3632f $7
+ call FarBattleRNG
+ cp $40
+ jr c, .asm_3637d ; 36336 $45
+.asm_36338
+ call CheckSubstituteOpp
+ jr nz, .asm_3637d ; 3633b $40
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_3637d ; 36341 $3a
+ ld a, [$c70d]
+ and a
+ jr nz, .asm_3637d ; 36347 $34
+ call CheckHiddenOpponent
+ jr nz, .asm_3637d ; 3634c $2f
+ ld [hl], b
+ ld a, c
+ cp $5
+ jr nc, .asm_3636c ; 36352 $18
+ push hl
+ ld hl, $d21b
+ ld de, $c6c1
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36366 ; 3635e $6
+ ld hl, $c641
+ ld de, $c6b6
+.asm_36366
+ call Function0x3641a
+ pop hl
+ jr z, .asm_36371 ; 3636a $5
+.asm_3636c
+ xor a
+ ld [$c70e], a
+ ret
+.asm_36371
+ inc [hl]
+.asm_36372
+ ld a, $3
+ ld [$c70e], a
+ ld a, $1
+ ld [AttackMissed], a
+ ret
+.asm_3637d
+ ld a, $1
+ ld [$c70e], a
+ ld [AttackMissed], a
+ ret
+; 36386
+
+
+Function0x36386: ; 36386
+ ld a, $2
+ ld [$c70e], a
+ ld a, $1
+ ld [AttackMissed], a
+ ret
+; 36391
+
+
+Function0x36391: ; 36391
+ ld a, $d
+ call CleanGetBattleVarPair
+ cp $12
+ jr c, .asm_363ae ; 0x36398 $14
+ cp $19
+ jr c, .asm_363b0 ; 0x3639c $12
+ cp $3a
+ jr c, .asm_363ae ; 0x363a0 $c
+ cp $41
+ jr c, .asm_363b0 ; 0x363a4 $a
+ cp $44
+ jr c, .asm_363ae ; 0x363a8 $4
+ cp $4b
+ jr c, .asm_363b0 ; 0x363ac $2
+.asm_363ae
+ xor a
+ ret
+.asm_363b0
+ ld a, $8
+ call CleanGetBattleVarPair
+ bit 1, a
+ ret
+; 363b8
+
+
+BattleCommand8c: ; 363b8
+ ld a, [$c70e]
+ and a
+ ret nz
+ ld a, [$c70c]
+ and $f
+ ld b, a
+ inc b
+ call GetStatName
+ ld hl, .stat
+ jp BattleTextBox
+
+.stat
+ TX_FAR UnknownText_0x1c0cc6
+ start_asm
+
+ ld hl, .up
+ ld a, [$c70c]
+ and $f0
+ ret z
+ ld hl, .wayup
+ ret
+
+.wayup
+ TX_FAR UnknownText_0x1c0cd0
+ db "@"
+
+.up
+ TX_FAR UnknownText_0x1c0ce0
+ db "@"
+
+; 363e9
+
+
+BattleCommand8d: ; 363e9
+ ld a, [$c70e]
+ and a
+ ret nz
+ ld a, [$c70c]
+ and $f
+ ld b, a
+ inc b
+ call GetStatName
+ ld hl, .stat
+ jp BattleTextBox
+
+.stat
+ TX_FAR UnknownText_0x1c0ceb
+ start_asm
+
+ ld hl, .fell
+ ld a, [$c70c]
+ and $f0
+ ret z
+ ld hl, .sharplyfell
+ ret
+
+.sharplyfell
+ TX_FAR UnknownText_0x1c0cf5
+ db "@"
+.fell
+ TX_FAR UnknownText_0x1c0d06
+ db "@"
+
+; 3641a
+
+
+Function0x3641a: ; 3641a
+; selfdestruct
+
+ push bc
+ sla c
+ ld b, 0
+ add hl, bc
+ ld a, c
+ add e
+ ld e, a
+ jr nc, .asm_36426
+ inc d
+.asm_36426
+
+ pop bc
+ ld a, [hld]
+ sub 1
+ jr nz, .asm_3642f
+ ld a, [hl]
+ and a
+ ret z
+
+.asm_3642f
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3643f
+
+ call SwitchTurn
+ call Function0x365d7
+ call SwitchTurn
+
+ jr .asm_36448
+
+.asm_3643f
+ call SwitchTurn
+ call Function0x365fd
+ call SwitchTurn
+
+.asm_36448
+ ld a, $1
+ and a
+ ret
+; 3644c
+
+
+BattleCommand8e: ; 3644c
+; statupfailtext
+ ld a, [$c70e]
+ and a
+ ret z
+ push af
+ call BattleCommandaa
+ pop af
+ dec a
+ jp z, TryPrintButItFailed
+ ld a, [$c70c]
+ and $f
+ ld b, a
+ inc b
+ call GetStatName
+ ld hl, WontRiseAnymoreText
+ jp FarBattleTextBox
+; 3646a
+
+
+BattleCommand8f: ; 3646a
+; statdownfailtext
+ ld a, [$c70e]
+ and a
+ ret z
+ push af
+ call BattleCommandaa
+ pop af
+ dec a
+ jp z, TryPrintButItFailed
+ dec a
+ ld hl, ProtectedByMistText
+ jp z, FarBattleTextBox
+ ld a, [$c70c]
+ and $f
+ ld b, a
+ inc b
+ call GetStatName
+ ld hl, WontDropAnymoreText
+ jp FarBattleTextBox
+; 3648f
+
+
+GetStatName: ; 3648f
+ ld hl, .names
+ ld c, "@"
+.CheckName
+ dec b
+ jr z, .Copy
+.GetName
+ ld a, [hli]
+ cp c
+ jr z, .CheckName
+ jr .GetName
+.Copy
+ ld de, StringBuffer2
+ ld bc, StringBuffer3 - StringBuffer2
+ jp CopyBytes
+
+.names
+ db "ATTACK@"
+ db "DEFENSE@"
+ db "SPEED@"
+ db "SPCL.ATK@"
+ db "SPCL.DEF@"
+ db "ACCURACY@"
+ db "EVASION@"
+ db "ABILITY@"
+; 364e6
+
+
+Table0x364e6: ; 364e6
+ dw $6419
+ dw $641c
+ dw $6421
+ dw $6428
+ dw $6432
+ dw $6442
+; 364f2
+
+
+StatLevelMulipliers: ; 364f2
+ db 1, 1 ; 1.0x
+ db 15, 10 ; 1.5x
+ db 2, 1 ; 2.0x
+ db 25, 10 ; 2.5x
+ db 3, 1 ; 3.0x
+ db 35, 10 ; 3.5x
+ db 4, 1 ; 4.0x
+; 36500
+
+
+BattleCommanda4: ; 36500
+; allstatsup
+
+; Attack
+ call ResetMiss
+ call BattleCommand70
+ call BattleCommand8c
+
+; Defense
+ call ResetMiss
+ call BattleCommand71
+ call BattleCommand8c
+
+; Speed
+ call ResetMiss
+ call BattleCommand72
+ call BattleCommand8c
+
+; Special Attack
+ call ResetMiss
+ call BattleCommand73
+ call BattleCommand8c
+
+; Special Defense
+ call ResetMiss
+ call BattleCommand74
+ jp BattleCommand8c
+; 3652d
+
+
+ResetMiss: ; 3652d
+ xor a
+ ld [AttackMissed], a
+ ret
+; 36532
+
+
+Function0x36532: ; 36532
+ ld [$c70c], a
+
+ ld hl, PlayerStatLevels
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36540
+ ld hl, EnemyStatLevels
+
+.asm_36540
+ ld a, [$c70c]
+ and $f
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld b, [hl]
+ dec b
+ jr z, .asm_36589
+
+ ld a, [$c70c]
+ and $f0
+ jr z, .asm_36558
+ dec b
+ jr nz, .asm_36558
+ inc b
+
+.asm_36558
+ ld [hl], b
+ ld a, c
+ cp 5
+ jr nc, .asm_36576
+
+ push hl
+ ld hl, $c641
+ ld de, $c6b6
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36570
+ ld hl, $d21b
+ ld de, $c6c1
+
+.asm_36570
+ call Function0x3641a
+ pop hl
+ jr z, .asm_36588
+
+.asm_36576
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36580
+
+ call Function0x365fd
+
+ jr .asm_36583
+
+.asm_36580
+ call Function0x365d7
+
+.asm_36583
+ xor a
+ ld [$c70e], a
+ ret
+
+.asm_36588
+ inc [hl]
+
+.asm_36589
+ ld a, 2
+ ld [$c70e], a
+ ret
+; 3658f
+
+
+BattleCommandac: ; 3658f
+; tristatuschance
+
+ call BattleCommand90
+
+; 1/3 chance of each status
+.loop
+ call FarBattleRNG
+ swap a
+ and 3
+ jr z, .loop
+; jump
+ dec a
+ ld hl, .ptrs
+ rst $28
+ ret
+.ptrs
+ dw BattleCommand19 ; paralyze
+ dw BattleCommand18 ; freeze
+ dw BattleCommand17 ; burn
+; 365a7
+
+
+BattleCommandaf: ; 365a7
+; curl
+ ld a, BATTLE_VARS_SUBSTATUS2
+ call GetBattleVarPair
+ set 0, [hl]
+ ret
+; 365af
+
+
+BattleCommanda6: ; 365af
+ ld hl, $743d
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_365ba ; 365b5 $3
+ ld hl, $747c
+.asm_365ba
+ xor a
+ ld [$ffd4], a
+ call CallBankF
+ jp $31f6
+; 365c3
+
+
+BattleCommanda7: ; 365c3
+ ld hl, $7447
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_365ce ; 365c9 $3
+ ld hl, $7486
+.asm_365ce
+ xor a
+ ld [$ffd4], a
+ call CallBankF
+ jp $31f6
+; 365d7
+
+
+Function0x365d7: ; 365d7
+ ld hl, PlayerAtkLevel
+ ld de, $c6b6
+ ld bc, BattleMonAtk
+
+ ld a, $5
+ call Function0x3661d
+
+ ld hl, $6d45
+ call CallBankF
+
+ call SwitchTurn
+
+ ld hl, $6c39
+ call CallBankF
+
+ ld hl, $6c76
+ call CallBankF
+
+ jp SwitchTurn
+; 365fd
+
+
+Function0x365fd: ; 365fd
+ ld hl, EnemyAtkLevel
+ ld de, $c6c1
+ ld bc, EnemyMonAtk
+
+ ld a, $5
+ call Function0x3661d
+
+ call SwitchTurn
+
+ ld hl, $6c39
+ call CallBankF
+
+ ld hl, $6c76
+ call CallBankF
+
+ jp SwitchTurn
+; 3661d
+
+
+Function0x3661d: ; 3661d
+.asm_3661d
+ push af
+ ld a, [hli]
+ push hl
+ push bc
+ ld c, a
+ dec c
+ ld b, 0
+ ld hl, Table0x364e6
+ add hl, bc
+ add hl, bc
+ xor a
+ ld [$ffb4], a
+ ld a, [de]
+ ld [$ffb5], a
+ inc de
+ ld a, [de]
+ ld [$ffb6], a
+ inc de
+ ld a, [hli]
+ ld [$ffb7], a
+ call Multiply
+
+ ld a, [hl]
+ ld [$ffb7], a
+ ld b, $4
+ call Divide
+
+ ld a, [$ffb5]
+ ld b, a
+ ld a, [$ffb6]
+ or b
+ jr nz, .asm_36651
+
+ ld a, $1
+ ld [$ffb6], a
+ jr .asm_36662
+
+.asm_36651
+ ld a, [$ffb6]
+ cp $e7
+ ld a, b
+ sbc $3
+ jr c, .asm_36662
+
+ ld a, $e7
+ ld [$ffb6], a
+ ld a, $3
+ ld [$ffb5], a
+.asm_36662
+ pop bc
+ ld a, [$ffb5]
+ ld [bc], a
+ inc bc
+ ld a, [$ffb6]
+ ld [bc], a
+ inc bc
+ pop hl
+ pop af
+ dec a
+ jr nz, .asm_3661d
+
+ ret
+; 36671
+
+
+BattleCommand21: ; 36671
+; storeenergy
+
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call CleanGetBattleVarPair
+ bit 0, a
+ ret z
+ ld hl, PlayerRolloutCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36684 ; 3667f $3
+ ld hl, EnemyRolloutCount
+.asm_36684
+ dec [hl]
+ jr nz, .asm_366dc ; 36685 $55
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ res 0, [hl]
+
+ ld hl, UnleashedEnergyText
+ call FarBattleTextBox
+
+ ld a, BATTLE_VARS_MOVE_POWER
+ call GetBattleVarPair
+ ld a, $1
+ ld [hl], a
+ ld hl, EnemyDamageTaken
+ ld de, $c732
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_366ad ; 366a5 $6
+ ld hl, $c685
+ ld de, $c733
+.asm_366ad
+ ld a, [hld]
+ add a
+ ld b, a
+ ld [CurDamage + 1], a
+ ld a, [hl]
+ rl a
+ ld [CurDamage], a
+ jr nc, .asm_366c3 ; 366b9 $8
+ ld a, $ff
+ ld [CurDamage], a
+ ld [CurDamage + 1], a
+.asm_366c3
+ or b
+ jr nz, .asm_366cb ; 366c4 $5
+ ld a, $1
+ ld [AttackMissed], a
+.asm_366cb
+ xor a
+ ld [hli], a
+ ld [hl], a
+ ld [de], a
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call GetBattleVarPair
+ ld a, $75
+ ld [hl], a
+
+ ld b, $22 ; unleashenergy
+ jp SkipToBattleCommand
+
+.asm_366dc
+ ld hl, StoringEnergyText
+ call FarBattleTextBox
+ jp EndMoveEffect
+; 366e5
+
+
+BattleCommand22: ; 366e5
+; unleashenergy
+
+ ld de, $c682
+ ld bc, PlayerRolloutCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_366f6 ; 366ee $6
+ ld de, $c684
+ ld bc, EnemyRolloutCount
+.asm_366f6
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ set 0, [hl]
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ ld [PlayerMoveEffect], a
+ ld [EnemyMoveEffect], a
+ call FarBattleRNG
+ and $1
+ inc a
+ inc a
+ ld [bc], a
+ ld a, $1
+ ld [$c689], a
+ call Function0x37e01
+ jp EndMoveEffect
+; 3671a
+
+
+BattleCommand3e: ; 3671a
+; checkrampage
+
+ ld de, PlayerRolloutCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36725 ; 36720 $3
+ ld de, EnemyRolloutCount
+.asm_36725
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ bit 1, [hl]
+ ret z
+ ld a, [de]
+ dec a
+ ld [de], a
+ jr nz, .asm_3674c ; 36730 $1a
+ res 1, [hl]
+ call SwitchTurn
+ call Function0x37962
+ push af
+ call SwitchTurn
+ pop af
+ jr nz, .asm_3674c ; 3673f $b
+ set 7, [hl]
+ call FarBattleRNG
+ and $1
+ inc a
+ inc a
+ inc de
+ ld [de], a
+.asm_3674c
+ ld b, $3d ; rampage
+ jp SkipToBattleCommand
+; 36751
+
+
+BattleCommand3d: ; 36751
+; rampage
+
+; No rampage during Sleep Talk.
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and 7
+ ret nz
+
+ ld de, PlayerRolloutCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36764 ; 3675f $3
+ ld de, EnemyRolloutCount
+.asm_36764
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ set 1, [hl]
+ call FarBattleRNG
+ and $1
+ inc a
+ ld [de], a
+ ld a, 1
+ ld [$c73e], a
+ ret
+; 36778
+
+
+BattleCommanda0: ; 36778
+; teleport
+
+ ld a, [BattleType]
+ cp $7 ; BATTLE_SHINY
+ jr z, .asm_367b9
+ cp $9 ; ?
+ jr z, .asm_367b9
+ cp $b ; ?
+ jr z, .asm_367b9
+ cp $c ; suicune
+ jr z, .asm_367b9
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call CleanGetBattleVarPair
+ bit 7, a
+ jr nz, .asm_367b9
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_367bf
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .asm_367b9
+ ld a, [$d143]
+ ld b, a
+ ld a, [BattleMonLevel]
+ cp b
+ jr nc, .asm_367df
+ add b
+ ld c, a
+ inc c
+.asm_367ac
+ call FarBattleRNG
+ cp c
+ jr nc, .asm_367ac ; 367b0 $fa
+ srl b
+ srl b
+ cp b
+ jr nc, .asm_367df ; 367b7 $26
+
+.asm_367b9
+ call Function0x37e77
+ jp PrintButItFailed
+
+.asm_367bf
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .asm_367b9 ; 367c3 $f4
+ ld a, [BattleMonLevel]
+ ld b, a
+ ld a, [$d143]
+ cp b
+ jr nc, .asm_367df ; 367cd $10
+ add b
+ ld c, a
+ inc c
+.asm_367d2
+ call FarBattleRNG
+ cp c
+ jr nc, .asm_367d2 ; 367d6 $fa
+ srl b
+ srl b
+ cp b
+ jr nc, .asm_367df ; 367dd $0
+.asm_367df
+ call $399c
+ xor a
+ ld [$cfca], a
+ inc a
+ ld [$d232], a
+ ld [$c689], a
+ call Function0x36804
+ call BattleCommand0a
+ call Function0x37e36
+ ld c, $14
+ call DelayFrames
+ call Function0x36804
+
+ ld hl, FledFromBattleText
+ jp FarBattleTextBox
+; 36804
+
+
+Function0x36804: ; 36804
+ ld a, [$d0ee]
+ and $c0
+ or $2
+ ld [$d0ee], a
+ ret
+; 3680f
+
+
+BattleCommand23: ; 3680f
+; forceswitch
+
+ ld a, [BattleType]
+ cp $7
+ jp z, .asm_36969
+ cp $9
+ jp z, .asm_36969
+ cp $b
+ jp z, .asm_36969
+ cp $c
+ jp z, .asm_36969
+ ld a, [hBattleTurn]
+ and a
+ jp nz, .asm_368cd
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_36852 ; 36830 $20
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .asm_36869 ; 36836 $31
+ ld a, [$d143]
+ ld b, a
+ ld a, [BattleMonLevel]
+ cp b
+ jr nc, .asm_36855 ; 36840 $13
+ add b
+ ld c, a
+ inc c
+.asm_36845
+ call FarBattleRNG
+ cp c
+ jr nc, .asm_36845 ; 36849 $fa
+ srl b
+ srl b
+ cp b
+ jr nc, .asm_36855 ; 36850 $3
+.asm_36852
+ jp .asm_36969
+.asm_36855
+ call $399c
+ xor a
+ ld [$cfca], a
+ inc a
+ ld [$d232], a
+ call Function0x36804
+ ld a, [PlayerMoveAnimation]
+ jp .asm_36975
+.asm_36869
+ call Function0x349f4
+ jr c, .asm_368ca ; 3686c $5c
+ ld a, [$c70f]
+ and a
+ jr z, .asm_368ca ; 36872 $56
+ call $39b0
+ ld a, $1
+ ld [$c689], a
+ call Function0x37e01
+ ld c, $14
+ call DelayFrames
+ ld hl, $c4a1
+ ld bc, $040a
+ call ClearBox
+ ld c, $14
+ call DelayFrames
+ ld a, [OTPartyCount]
+ ld b, a
+ ld a, [CurOTMon]
+ ld c, a
+.asm_3689a
+ call FarBattleRNG
+ and $7
+ cp b
+ jr nc, .asm_3689a ; 368a0 $f8
+ cp c
+ jr z, .asm_3689a ; 368a3 $f5
+ push af
+ push bc
+ ld hl, OTPartyMon1CurHP
+ call GetPartyLocation
+ ld a, [hli]
+ or [hl]
+ pop bc
+ pop de
+ jr z, .asm_3689a ; 368b1 $e7
+ ld a, d
+ inc a
+ ld [$c718], a
+ ld hl, $54c3
+ ld a, $f
+ rst FarCall
+
+ ld hl, DraggedOutText
+ call FarBattleTextBox
+
+ ld hl, $5c23
+ jp CallBankF
+
+.asm_368ca
+ jp .asm_36969
+
+.asm_368cd
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_368f3
+
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .asm_36908
+
+ ld a, [BattleMonLevel]
+ ld b, a
+ ld a, [$d143]
+ cp b
+ jr nc, .asm_368f5
+
+ add b
+ ld c, a
+ inc c
+.asm_368e6
+ call FarBattleRNG
+ cp c
+ jr nc, .asm_368e6
+
+ srl b
+ srl b
+ cp b
+ jr nc, .asm_368f5
+
+.asm_368f3
+ jr .asm_36969
+
+.asm_368f5
+ call $399c
+ xor a
+ ld [$cfca], a
+ inc a
+ ld [$d232], a
+ call Function0x36804
+ ld a, [EnemyMoveAnimation]
+ jr .asm_36975
+
+.asm_36908
+ call Function0x36994
+ jr c, .asm_36969
+
+ ld a, [$c70f]
+ cp $1
+ jr z, .asm_368ca
+
+ call $399c
+ ld a, $1
+ ld [$c689], a
+ call Function0x37e01
+ ld c, $14
+ call DelayFrames
+ ld hl, $c535
+ ld bc, $050b
+ call $0fb6
+ ld c, $14
+ call DelayFrames
+ ld a, [PartyCount]
+ ld b, a
+ ld a, [CurBattleMon]
+ ld c, a
+.asm_3693a
+ call FarBattleRNG
+ and $7
+ cp b
+ jr nc, .asm_3693a
+
+ cp c
+ jr z, .asm_3693a
+
+ push af
+ push bc
+ ld hl, PartyMon1CurHP
+ call GetPartyLocation
+ ld a, [hli]
+ or [hl]
+ pop bc
+ pop de
+ jr z, .asm_3693a
+
+ ld a, d
+ ld [CurPartyMon], a
+ ld hl, $5b32
+ call CallBankF
+
+ ld hl, DraggedOutText
+ call FarBattleTextBox
+
+ ld hl, $5c23
+ jp CallBankF
+
+.asm_36969
+ call BattleCommand0a
+ call BattleCommandaa
+ call BattleCommand0c
+ jp PrintButItFailed
+
+.asm_36975
+ push af
+ call Function0x36804
+ ld a, $1
+ ld [$c689], a
+ call Function0x37e01
+ ld c, $14
+ call DelayFrames
+ pop af
+
+ ld hl, FledInFearText
+ cp $2e
+ jr z, .asm_36991
+ ld hl, BlownAwayText
+.asm_36991
+ jp FarBattleTextBox
+; 36994
+
+
+Function0x36994: ; 36994
+ ld a, [PartyCount]
+ ld d, a
+ ld e, 0
+ ld bc, $30
+.asm_3699d
+ ld a, [CurBattleMon]
+ cp e
+ jr z, .asm_369ae
+
+ ld a, e
+ ld hl, PartyMon1CurHP
+ call AddNTimes
+ ld a, [hli]
+ or [hl]
+ jr nz, .asm_369b4
+
+.asm_369ae
+ inc e
+ dec d
+ jr nz, .asm_3699d
+
+ scf
+ ret
+
+.asm_369b4
+ and a
+ ret
+; 369b6
+
+
+BattleCommand24: ; 369b6
+; endloop
+
+; Loop back to the command before 'critical'.
+
+ ld de, PlayerRolloutCount
+ ld bc, $c682
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_369c7
+ ld de, EnemyRolloutCount
+ ld bc, $c684
+.asm_369c7
+
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ bit 2, [hl]
+ jp nz, $6a43
+ set 2, [hl]
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call GetBattleVarPair
+ ld a, [hl]
+ cp EFFECT_TWINEEDLE
+ jr z, .asm_36a3f
+ cp EFFECT_DOUBLE_HIT
+ ld a, $1
+ jr z, .asm_36a3a
+ ld a, [hl]
+ cp EFFECT_BEAT_UP
+ jr z, .asm_369fb
+ cp EFFECT_TRIPLE_KICK
+ jr nz, .asm_36a2b
+.asm_369ec
+ call FarBattleRNG
+ and $3
+ jr z, .asm_369ec
+ dec a
+ jr nz, .asm_36a3a
+ ld a, $1
+ ld [bc], a
+ jr .asm_36a48
+.asm_369fb
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_36a0b
+ ld a, [PartyCount]
+ cp $1
+ jp z, .asm_36a1e
+ dec a
+ jr .asm_36a3a
+.asm_36a0b
+ ld a, [IsInBattle]
+ cp $1
+ jp z, .asm_36a1e
+ ld a, [OTPartyCount]
+ cp $1
+ jp z, .asm_36a1e
+ dec a
+ jr .asm_36a3a
+
+.asm_36a1e
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ res 2, [hl]
+ call BattleCommanda8
+ jp EndMoveEffect
+.asm_36a2b
+ call FarBattleRNG
+ and $3
+ cp $2
+ jr c, .asm_36a39 ; 36a32 $5
+ call FarBattleRNG
+ and $3
+.asm_36a39
+ inc a
+.asm_36a3a
+ ld [de], a
+ inc a
+ ld [bc], a
+ jr .asm_36a6b ; 36a3d $2c
+.asm_36a3f
+ ld a, $1
+ jr .asm_36a3a ; 36a41 $f7
+ ld a, [de]
+ dec a
+ ld [de], a
+ jr nz, .asm_36a6b ; 36a46 $23
+.asm_36a48
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ res 2, [hl]
+
+ ld hl, PlayerHitTimesText
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36a5a
+ ld hl, EnemyHitTimesText
+.asm_36a5a
+
+ push bc
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp EFFECT_BEAT_UP
+ jr z, .asm_36a67
+ call FarBattleTextBox
+.asm_36a67
+
+ pop bc
+ xor a
+ ld [bc], a
+ ret
+
+; Loop back to the command before 'critical'.
+.asm_36a6b
+ ld a, [BattleScriptBufferLoc + 1]
+ ld h, a
+ ld a, [BattleScriptBufferLoc]
+ ld l, a
+.asm_36a73
+ ld a, [hld]
+ cp $5 ; critical
+ jr nz, .asm_36a73 ; 36a76 $fb
+ inc hl
+ ld a, h
+ ld [BattleScriptBufferLoc + 1], a
+ ld a, l
+ ld [BattleScriptBufferLoc], a
+ ret
+; 36a82
+
+
+BattleCommand94: ; 36a82
+ ld a, [AttackMissed]
+ and a
+ ret nz
+ call CheckSubstituteOpp
+ jr nz, .asm_36a9a ; 36a8a $e
+ ld a, BATTLE_VARS_STATUS_OPP
+ call CleanGetBattleVarPair
+ and $27
+ jr nz, .asm_36a9a ; 36a93 $5
+ call Function0x36abf
+ jr z, Function0x36ab5 ; 36a98 $1b
+.asm_36a9a
+ ld a, 1
+ ld [AttackMissed], a
+ ret
+; 36aa0
+
+
+BattleCommand25: ; 36aa0
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call CleanGetBattleVarPair
+ and $27
+ ret nz
+ call Function0x36abf
+ ret nz
+ ld a, [$c70d]
+ and a
+ ret nz
+
+ ; fallthrough
+; 36ab5
+
+
+Function0x36ab5: ; 36ab5
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call GetBattleVarPair
+ set 3, [hl]
+ jp EndRechargeOpp
+; 36abf
+
+
+Function0x36abf: ; 36abf
+ push bc
+ ld a, [$c70f]
+ ld b, a
+ ld a, [hBattleTurn]
+ xor b
+ pop bc
+ ret
+; 36ac9
+
+
+BattleCommand4d: ; 36ac9
+; kingsrock
+
+ ld a, [AttackMissed]
+ and a
+ ret nz
+
+ call GetUserItem
+ ld a, b
+ cp $4b ; king's rock
+ ret nz
+
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call GetBattleVarPair
+ ld d, h
+ ld e, l
+ call GetUserItem
+ call FarBattleRNG
+ cp c
+ ret nc
+ call EndRechargeOpp
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call GetBattleVarPair
+ set 3, [hl]
+ ret
+; 36af3
+
+
+BattleCommand26: ; 36af3
+; ohko
+
+ call ResetDamage
+ ld a, [TypeModifier]
+ and $7f
+ jr z, .asm_36b2f ; 36afb $32
+ ld hl, EnemyMonLevel
+ ld de, BattleMonLevel
+ ld bc, PlayerMoveAccuracy
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36b12 ; 36b09 $7
+ push hl
+ ld h, d
+ ld l, e
+ pop de
+ ld bc, EnemyMoveAccuracy
+.asm_36b12
+ ld a, [de]
+ sub [hl]
+ jr c, .asm_36b2f ; 36b14 $19
+ add a
+ ld e, a
+ ld a, [bc]
+ add e
+ jr nc, .asm_36b1e ; 36b1a $2
+ ld a, $ff
+.asm_36b1e
+ ld [bc], a
+ call BattleCommand09
+ ld hl, CurDamage
+ ld a, $ff
+ ld [hli], a
+ ld [hl], a
+ ld a, $2
+ ld [CriticalHit], a
+ ret
+.asm_36b2f
+ ld a, $ff
+ ld [CriticalHit], a
+ ld a, $1
+ ld [AttackMissed], a
+ ret
+; 36b3a
+
+
+BattleCommand3a: ; 36b3a
+; checkcharge
+
+; charged?
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ bit 4, [hl]
+ ret z
+; go to town
+ res 4, [hl]
+ res 5, [hl]
+ res 6, [hl]
+ ld b, $39 ; charge
+ jp SkipToBattleCommand
+; 36b4d
+
+
+BattleCommand39: ; 36b4d
+; charge
+
+ call BattleCommand38
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and $7
+ jr z, .asm_36b65
+
+ call BattleCommandaa
+ call BattleCommand0c
+ call PrintButItFailed
+ jp EndMoveEffect
+
+.asm_36b65
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ set 4, [hl]
+
+ ld hl, IgnoredOrders2Text
+ ld a, [AlreadyDisobeyed]
+ and a
+ call nz, FarBattleTextBox
+
+ call BattleCommand0a
+ xor a
+ ld [$cfca], a
+ inc a
+ ld [$c689], a
+ call Function0x37e36
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ cp $13
+ jr z, .asm_36b96 ; 36b8b $9
+ cp $5b
+ jr z, .asm_36b96 ; 36b8f $5
+ call BattleCommand0c
+ jr .asm_36b99 ; 36b94 $3
+.asm_36b96
+ call Function0x37ec0
+.asm_36b99
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ ld b, a
+ cp $13
+ jr z, .asm_36bb0 ; 36ba6 $8
+ cp $5b
+ jr nz, .asm_36bb2 ; 36baa $6
+ set 5, [hl]
+ jr .asm_36bb2 ; 36bae $2
+
+.asm_36bb0
+ set 6, [hl]
+
+.asm_36bb2
+ call Function0x34548
+ jr nz, .asm_36bc3 ; 36bb5 $c
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE
+ call GetBattleVarPair
+ ld [hl], b
+ ld a, BATTLE_VARS_LAST_MOVE
+ call GetBattleVarPair
+ ld [hl], b
+
+.asm_36bc3
+ call ResetDamage
+
+ ld hl, .text_36bdb
+ call BattleTextBox
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp EFFECT_SKULL_BASH
+ ld b, $fe ; endturn
+ jp z, SkipToBattleCommand
+ jp EndMoveEffect
+
+.text_36bdb
+; [user]
+ TX_FAR UnknownText_0x1c0d0e
+ start_asm
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ cp RAZOR_WIND
+ ld hl, .RazorWind
+ jr z, .asm_36c0d
+
+ cp SOLARBEAM
+ ld hl, .Solarbeam
+ jr z, .asm_36c0d
+
+ cp SKULL_BASH
+ ld hl, .SkullBash
+ jr z, .asm_36c0d
+
+ cp SKY_ATTACK
+ ld hl, .SkyAttack
+ jr z, .asm_36c0d
+
+ cp FLY
+ ld hl, .Fly
+ jr z, .asm_36c0d
+
+ cp DIG
+ ld hl, .Dig
+
+.asm_36c0d
+ ret
+
+.RazorWind
+; 'made a whirlwind!'
+ TX_FAR UnknownText_0x1c0d12
+ db "@"
+
+.Solarbeam
+; 'took in sunlight!'
+ TX_FAR UnknownText_0x1c0d26
+ db "@"
+
+.SkullBash
+; 'lowered its head!'
+ TX_FAR UnknownText_0x1c0d3a
+ db "@"
+
+.SkyAttack
+; 'is glowing!'
+ TX_FAR UnknownText_0x1c0d4e
+ db "@"
+
+.Fly
+; 'flew up high!'
+ TX_FAR UnknownText_0x1c0d5c
+ db "@"
+
+.Dig
+; 'dug a hole!'
+ TX_FAR UnknownText_0x1c0d6c
+ db "@"
+; 36c2c
+
+
+BattleCommand3c: ; 36c2c
+; unused
+ ret
+; 36c2d
+
+
+BattleCommand3b: ; 36c2d
+; traptarget
+
+ ld a, [AttackMissed]
+ and a
+ ret nz
+ ld hl, $c731
+ ld de, $c72f
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36c43
+ ld hl, $c730
+ ld de, $c72e
+
+.asm_36c43
+ ld a, [hl]
+ and a
+ ret nz
+ ld a, BATTLE_VARS_SUBSTATUS4_OPP
+ call CleanGetBattleVarPair
+ bit 4, a
+ ret nz
+ call FarBattleRNG
+ and 3
+ inc a
+ inc a
+ inc a
+ ld [hl], a
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ ld [de], a
+ ld b, a
+ ld hl, .Traps
+
+.asm_36c61
+ ld a, [hli]
+ cp b
+ jr z, .asm_36c69
+ inc hl
+ inc hl
+ jr .asm_36c61
+
+.asm_36c69
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp FarBattleTextBox
+
+.Traps
+ dbw BIND, UsedBindText ; 'used BIND on'
+ dbw WRAP, WrappedByText ; 'was WRAPPED by'
+ dbw FIRE_SPIN, FireSpinTrapText ; 'was trapped!'
+ dbw CLAMP, ClampedByText ; 'was CLAMPED by'
+ dbw WHIRLPOOL, WhirlpoolTrapText ; 'was trapped!'
+; 36c7e
+
+
+BattleCommand28: ; 36c7e
+; mist
+
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ bit 1, [hl]
+ jr nz, .asm_36c92 ; 36c85 $b
+ set 1, [hl]
+ call Function0x37e01
+ ld hl, MistText
+ jp FarBattleTextBox
+.asm_36c92
+ call Function0x37e77
+ jp PrintButItFailed
+; 36c98
+
+
+BattleCommand29: ; 36c98
+; focusenergy
+
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ bit 2, [hl]
+ jr nz, .asm_36cac ; 36c9f $b
+ set 2, [hl]
+ call Function0x37e01
+ ld hl, GettingPumpedText
+ jp FarBattleTextBox
+.asm_36cac
+ call Function0x37e77
+ jp PrintButItFailed
+; 36cb2
+
+
+BattleCommand27: ; 36cb2
+; recoil
+
+ ld hl, BattleMonMaxHP
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36cbd ; 36cb8 $3
+ ld hl, EnemyMonMaxHPHi
+.asm_36cbd
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ ld d, a
+ ld a, [CurDamage]
+ ld b, a
+ ld a, [CurDamage + 1]
+ ld c, a
+ srl b
+ rr c
+ srl b
+ rr c
+ ld a, b
+ or c
+ jr nz, .asm_36cd8 ; 36cd5 $1
+ inc c
+.asm_36cd8
+ ld a, [hli]
+ ld [$d1eb], a
+ ld a, [hl]
+ ld [$d1ea], a
+ dec hl
+ dec hl
+ ld a, [hl]
+ ld [$d1ec], a
+ sub c
+ ld [hld], a
+ ld [$d1ee], a
+ ld a, [hl]
+ ld [$d1ed], a
+ sbc b
+ ld [hl], a
+ ld [$d1ef], a
+ jr nc, .asm_36cfe ; 36cf4 $8
+ xor a
+ ld [hli], a
+ ld [hl], a
+ ld hl, $d1ee
+ ld [hli], a
+ ld [hl], a
+.asm_36cfe
+ ld hl, $c55e
+ ld a, [hBattleTurn]
+ and a
+ ld a, $1
+ jr z, .asm_36d0c ; 36d06 $4
+ ld hl, $c4ca
+ xor a
+.asm_36d0c
+ ld [$d10a], a
+ ld a, $b
+ call $2d83
+ call $39c9
+ ld hl, RecoilText
+ jp FarBattleTextBox
+; 36d1d
+
+
+BattleCommand2b: ; 36d1d
+; confusetarget
+
+ call GetOpponentItem
+ ld a, b
+ cp $19
+ ret z
+ ld a, [$c70d]
+ and a
+ ret nz
+ call Function0x37962
+ ret nz
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call GetBattleVarPair
+ bit 7, [hl]
+ ret nz
+ jr Function0x36d70
+
+
+BattleCommand2a: ; 36d3b
+; confuse
+
+ call GetOpponentItem
+ ld a, b
+ cp $19
+ jr nz, .asm_36d53
+ ld a, [hl]
+ ld [$d265], a
+ call $3468
+ call Function0x37e77
+ ld hl, ProtectedByText
+ jp FarBattleTextBox
+
+.asm_36d53
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call GetBattleVarPair
+ bit 7, [hl]
+ jr z, .asm_36d65
+ call Function0x37e77
+ ld hl, AlreadyConfusedText
+ jp FarBattleTextBox
+
+.asm_36d65
+ call CheckSubstituteOpp
+ jr nz, Function0x36db6
+ ld a, [AttackMissed]
+ and a
+ jr nz, Function0x36db6
+
+ ; fallthrough
+; 36d70
+
+
+Function0x36d70: ; 36d70
+ ld bc, EnemyConfuseCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36d7b
+ ld bc, PlayerConfuseCount
+
+.asm_36d7b
+ set 7, [hl]
+ call FarBattleRNG
+ and 3
+ inc a
+ inc a
+ ld [bc], a
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp EFFECT_CONFUSE_HIT
+ jr z, .asm_36d99
+ cp EFFECT_SNORE
+ jr z, .asm_36d99
+ cp EFFECT_SWAGGER
+ jr z, .asm_36d99
+ call Function0x37e01
+
+.asm_36d99
+ ld de, $0103
+ call Function0x37e54
+
+ ld hl, BecameConfusedText
+ call FarBattleTextBox
+
+ call GetOpponentItem
+ ld a, b
+ cp $f
+ jr z, .asm_36db0
+ cp $10
+ ret nz
+.asm_36db0
+ ld hl, $5e51
+ jp CallBankF
+; 36db6
+
+Function0x36db6: ; 36db6
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp EFFECT_CONFUSE_HIT
+ ret z
+ cp EFFECT_SNORE
+ ret z
+ cp EFFECT_SWAGGER
+ ret z
+ jp PrintDidntAffect2
+; 36dc7
+
+
+BattleCommand30: ; 36dc7
+; paralyze
+
+ ld a, BATTLE_VARS_STATUS_OPP
+ call CleanGetBattleVarPair
+ bit 6, a
+ jr nz, .asm_36e49 ; 36dce $79
+ ld a, [TypeModifier]
+ and $7f
+ jr z, .asm_36e55 ; 36dd5 $7e
+ call GetOpponentItem
+ ld a, b
+ cp $18
+ jr nz, .asm_36def ; 36ddd $10
+ ld a, [hl]
+ ld [$d265], a
+ call $3468
+ call Function0x37e77
+ ld hl, ProtectedByText
+ jp FarBattleTextBox
+.asm_36def
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36e0e ; 36df2 $1a
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_36e0e ; 36df8 $14
+ ld a, [$cfc0]
+ and a
+ jr nz, .asm_36e0e ; 36dfe $e
+ ld a, [PlayerSubStatus5]
+ bit 5, a
+ jr nz, .asm_36e0e ; 36e05 $7
+ call FarBattleRNG
+ cp $40
+ jr c, .asm_36e52 ; 36e0c $44
+.asm_36e0e
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ and a
+ jr nz, .asm_36e52 ; 36e14 $3c
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_36e52 ; 36e1a $36
+ call CheckSubstituteOpp
+ jr nz, .asm_36e52 ; 36e1f $31
+ ld c, $1e
+ call DelayFrames
+ call Function0x37e01
+ ld a, $1
+ ld [$ffd4], a
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ set 6, [hl]
+ call $398e
+ ld hl, $6c39
+ call CallBankF
+ call $39d4
+ call PrintParalyze
+ ld hl, $5de9
+ jp CallBankF
+.asm_36e49
+ call Function0x37e77
+ ld hl, AlreadyParalyzedText
+ jp FarBattleTextBox
+.asm_36e52
+ jp PrintDidntAffect2
+.asm_36e55
+ call Function0x37e77
+ jp PrintDoesntAffect
+; 36e5b
+
+
+Function0x36e5b: ; 36e5b
+; Compare move type to user type.
+; Return z if matching the user type (unless the move is Normal).
+
+ push hl
+
+ ld hl, EnemyMonType1
+ ld a, [hBattleTurn]
+ and a
+ jr z, .ok
+ ld hl, BattleMonType1
+.ok
+
+ ld a, BATTLE_VARS_MOVE_TYPE
+ call CleanGetBattleVarPair
+ cp NORMAL
+ jr z, .normal
+
+ cp [hl]
+ jr z, .return
+
+ inc hl
+ cp [hl]
+
+.return
+ pop hl
+ ret
+
+.normal
+ ld a, 1
+ and a
+ pop hl
+ ret
+; 36e7c
+
+
+BattleCommand31: ; 36e7c
+; substitute
+
+ call BattleCommandaa
+ ld hl, BattleMonMaxHP
+ ld de, $c6df
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36e90 ; 36e88 $6
+ ld hl, EnemyMonMaxHPHi
+ ld de, $c6e0
+.asm_36e90
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call CleanGetBattleVarPair
+ bit 4, a
+ jr nz, .asm_36ef4 ; 36e97 $5b
+ ld a, [hli]
+ ld b, [hl]
+ srl a
+ rr b
+ srl a
+ rr b
+ dec hl
+ dec hl
+ ld a, b
+ ld [de], a
+ ld a, [hld]
+ sub b
+ ld e, a
+ ld a, [hl]
+ sbc $0
+ ld d, a
+ jr c, .asm_36eff ; 36eae $4f
+ ld a, d
+ or e
+ jr z, .asm_36eff ; 36eb2 $4b
+ ld [hl], d
+ inc hl
+ ld [hl], e
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ set 4, [hl]
+ ld hl, $c730
+ ld de, $c72e
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36ecf ; 36ec7 $6
+ ld hl, $c731
+ ld de, $c72f
+.asm_36ecf
+ xor a
+ ld [hl], a
+ ld [de], a
+ call Function0x37ed5
+ jr c, .asm_36ee8 ; 36ed5 $11
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ ld [$c689], a
+ ld a, $a4
+ call Function0x37e44
+ jr .asm_36eeb ; 36ee6 $3
+.asm_36ee8
+ call BattleCommanda6
+.asm_36eeb
+ ld hl, MadeSubstituteText
+ call FarBattleTextBox
+ jp $39c9
+.asm_36ef4
+ call Function0x34548
+ call nz, BattleCommand0c
+ ld hl, HasSubstituteText
+ jr .asm_36f08 ; 36efd $9
+.asm_36eff
+ call Function0x34548
+ call nz, BattleCommand0c
+ ld hl, TooWeakSubText
+.asm_36f08
+ jp FarBattleTextBox
+; 36f0b
+
+BattleCommand32: ; 36f0b
+; rechargenextturn
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ set 5, [hl]
+ ret
+; 36f13
+
+
+EndRechargeOpp: ; 36f13
+ push hl
+ ld a, BATTLE_VARS_SUBSTATUS4_OPP
+ call GetBattleVarPair
+ res 5, [hl]
+ pop hl
+ ret
+; 36f1d
+
+
+BattleCommand97: ; 36f1d
+; rage
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ set 6, [hl]
+ ret
+; 36f25
+
+
+BattleCommand98: ; 36f25
+; doubleflyingdamage
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call CleanGetBattleVarPair
+ bit 6, a ; flying
+ ret z
+ jr DoubleDamage
+; 36f2f
+
+
+BattleCommand99: ; 36f2f
+; doubleundergrounddamage
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call CleanGetBattleVarPair
+ bit 5, a ; underground
+ ret z
+
+ ; fallthrough
+; 36f37
+
+
+DoubleDamage: ; 36f37
+ ld hl, CurDamage + 1
+ sla [hl]
+ dec hl
+ rl [hl]
+ jr nc, .quit
+
+ ld a, $ff
+ ld [hli], a
+ ld [hl], a
+.quit
+ ret
+; 36f46
+
+
+BattleCommand33: ; 36f46
+; mimic
+
+ call Function0x372d8
+ call BattleCommandaa
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_36f9a ; 36f50 $48
+ ld hl, BattleMonMoves
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36f5d ; 36f58 $3
+ ld hl, EnemyMonMoves
+.asm_36f5d
+ call CheckHiddenOpponent
+ jr nz, .asm_36f9a ; 36f60 $38
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ and a
+ jr z, .asm_36f9a ; 36f68 $30
+ cp $a5
+ jr z, .asm_36f9a ; 36f6c $2c
+ ld b, a
+ ld c, $4
+.asm_36f71
+ ld a, [hli]
+ cp b
+ jr z, .asm_36f9a ; 36f73 $25
+ dec c
+ jr nz, .asm_36f71 ; 36f76 $f9
+ dec hl
+.asm_36f79
+ ld a, [hld]
+ cp $66
+ jr nz, .asm_36f79 ; 36f7c $fb
+ inc hl
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ ld [hl], a
+ ld [$d265], a
+ ld bc, $0006
+ add hl, bc
+ ld [hl], $5
+ call $34f8
+ call Function0x37e01
+ ld hl, LearnedMoveText
+ jp FarBattleTextBox
+.asm_36f9a
+ jp Function0x37357
+; 36f9d
+
+
+BattleCommand35: ; 36f9d
+; leechseed
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_36fd8 ; 36fa1 $35
+ call CheckSubstituteOpp
+ jr nz, .asm_36fd8 ; 36fa6 $30
+ ld de, EnemyMonType1
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36fb3 ; 36fae $3
+ ld de, BattleMonType1
+.asm_36fb3
+ ld a, [de]
+ cp $16
+ jr z, .asm_36fd2 ; 36fb6 $1a
+ inc de
+ ld a, [de]
+ cp $16
+ jr z, .asm_36fd2 ; 36fbc $14
+ ld a, BATTLE_VARS_SUBSTATUS4_OPP
+ call GetBattleVarPair
+ bit 7, [hl]
+ jr nz, .asm_36fd8 ; 36fc5 $11
+ set 7, [hl]
+ call Function0x37e01
+ ld hl, WasSeededText
+ jp FarBattleTextBox
+.asm_36fd2
+ call Function0x37e77
+ jp PrintDoesntAffect
+.asm_36fd8
+ call Function0x37e77
+ ld hl, EvadedText
+ jp FarBattleTextBox
+; 36fe1
+
+
+BattleCommand36: ; 36fe1
+ call Function0x37e01
+ ld a, $41
+ ld hl, $60e5
+ rst FarCall
+ jp PrintNothingHappened
+; 36fed
+
+
+BattleCommand37: ; 36fed
+; disable
+
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_37059 ; 36ff1 $66
+ ld de, EnemyEncoreCount
+ ld hl, EnemyMonMoves
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37004 ; 36ffc $6
+ ld de, PlayerDisableCount
+ ld hl, BattleMonMoves
+.asm_37004
+ ld a, [de]
+ and a
+ jr nz, .asm_37059 ; 37006 $51
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ and a
+ jr z, .asm_37059 ; 3700e $49
+ cp $a5
+ jr z, .asm_37059 ; 37012 $45
+ ld b, a
+ ld c, $ff
+.asm_37017
+ inc c
+ ld a, [hli]
+ cp b
+ jr nz, .asm_37017 ; 3701a $fb
+ ld a, [hBattleTurn]
+ and a
+ ld hl, EnemyMonPPMove1
+ jr z, .asm_37027 ; 37022 $3
+ ld hl, BattleMonPP
+.asm_37027
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_37059 ; 3702c $2b
+.asm_3702e
+ call FarBattleRNG
+ and $7
+ jr z, .asm_3702e ; 37033 $f9
+ inc a
+ inc c
+ swap c
+ add c
+ ld [de], a
+ call Function0x37e01
+ ld hl, DisabledMove
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_37047 ; 37044 $1
+ inc hl
+.asm_37047
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ ld [hl], a
+ ld [$d265], a
+ call $34f8
+ ld hl, WasDisabledText
+ jp FarBattleTextBox
+.asm_37059
+ jp Function0x37354
+; 3705c
+
+
+BattleCommand1e: ; 3705c
+; payday
+
+ xor a
+ ld hl, StringBuffer1
+ ld [hli], a
+ ld a, [hBattleTurn]
+ and a
+ ld a, [BattleMonLevel]
+ jr z, .asm_3706c ; 37067 $3
+ ld a, [EnemyMonLevel]
+.asm_3706c
+ add a
+ ld hl, $c6ee
+ add [hl]
+ ld [hld], a
+ jr nc, .asm_37079 ; 37072 $5
+ inc [hl]
+ dec hl
+ jr nz, .asm_37079 ; 37076 $1
+ inc [hl]
+.asm_37079
+ ld hl, CoinsScatteredText
+ jp FarBattleTextBox
+; 3707f
+
+
+BattleCommand1f: ; 3707f
+; conversion
+
+ ld hl, BattleMonMoves
+ ld de, BattleMonType1
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37090 ; 37088 $6
+ ld hl, EnemyMonMoves
+ ld de, EnemyMonType1
+.asm_37090
+ push de
+ ld c, $0
+ ld de, StringBuffer1
+.asm_37096
+ push hl
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ and a
+ jr z, .asm_370b2 ; 3709d $13
+ push hl
+ push bc
+ dec a
+ ld hl, $5afe
+ call GetMoveAttr
+ ld [de], a
+ inc de
+ pop bc
+ pop hl
+ inc c
+ ld a, c
+ cp $4
+ jr c, .asm_37096 ; 370b0 $e4
+.asm_370b2
+ ld a, $ff
+ ld [de], a
+ inc de
+ ld [de], a
+ inc de
+ ld [de], a
+ pop de
+ ld hl, StringBuffer1
+.asm_370bd
+ ld a, [hl]
+ cp $ff
+ jr z, .asm_370d3 ; 370c0 $11
+ cp $13
+ jr z, .asm_370d0 ; 370c4 $a
+ ld a, [de]
+ cp [hl]
+ jr z, .asm_370d0 ; 370c8 $6
+ inc de
+ ld a, [de]
+ dec de
+ cp [hl]
+ jr nz, .asm_370d9 ; 370ce $9
+.asm_370d0
+ inc hl
+ jr .asm_370bd ; 370d1 $ea
+.asm_370d3
+ call Function0x37e77
+ jp PrintButItFailed
+.asm_370d9
+ call FarBattleRNG
+ and $3
+ ld c, a
+ ld b, $0
+ ld hl, StringBuffer1
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ jr z, .asm_370d9 ; 370e8 $ef
+ cp $13
+ jr z, .asm_370d9 ; 370ec $eb
+ ld a, [de]
+ cp [hl]
+ jr z, .asm_370d9 ; 370f0 $e7
+ inc de
+ ld a, [de]
+ dec de
+ cp [hl]
+ jr z, .asm_370d9 ; 370f6 $e1
+ ld a, [hl]
+ ld [de], a
+ inc de
+ ld [de], a
+ ld [$d265], a
+ ld a, $14
+ ld hl, $4964
+ rst FarCall
+ call Function0x37e01
+ ld hl, TransformedTypeText
+ jp FarBattleTextBox
+; 3710e
+
+
+BattleCommand20: ; 3710e
+; resetstats
+
+ ld a, 7 ; neutral
+ ld hl, PlayerStatLevels
+ call .Fill
+ ld hl, EnemyStatLevels
+ call .Fill
+
+ ld a, [hBattleTurn]
+ push af
+
+ call SetPlayerTurn
+ call Function0x365d7
+ call SetEnemyTurn
+ call Function0x365fd
+
+ pop af
+ ld [hBattleTurn], a
+
+ call Function0x37e01
+
+ ld hl, EliminatedStatsText
+ jp FarBattleTextBox
+
+.Fill
+ ld b, PlayerStatLevelsEnd - PlayerStatLevels
+.asm_37139
+ ld [hli], a
+ dec b
+ jr nz, .asm_37139
+ ret
+; 3713e
+
+
+BattleCommand2c: ; 3713e
+; heal
+
+ ld de, BattleMonHP
+ ld hl, BattleMonMaxHP
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3714f ; 37147 $6
+ ld de, EnemyMonHPHi
+ ld hl, EnemyMonMaxHPHi
+.asm_3714f
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ ld b, a
+ push hl
+ push de
+ push bc
+ ld c, $2
+ call StringCmp
+ pop bc
+ pop de
+ pop hl
+ jp z, .asm_371c4
+ ld a, b
+ cp $9c
+ jr nz, .asm_37199 ; 37166 $31
+ push hl
+ push de
+ push af
+ call BattleCommandaa
+ ld a, BATTLE_VARS_SUBSTATUS5
+ call GetBattleVarPair
+ res 0, [hl]
+ ld a, BATTLE_VARS_STATUS
+ call GetBattleVarPair
+ ld a, [hl]
+ and a
+ ld [hl], $3
+ ld hl, WentToSleepText
+ jr z, .asm_37186 ; 37181 $3
+ ld hl, RestedText
+.asm_37186
+ call FarBattleTextBox
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_37193 ; 3718c $5
+ call Function0x365d7
+ jr .asm_37196 ; 37191 $3
+.asm_37193
+ call Function0x365fd
+.asm_37196
+ pop af
+ pop de
+ pop hl
+.asm_37199
+ jr z, .asm_371a3 ; 37199 $8
+ ld hl, $4c9f
+ call CallBankF
+ jr .asm_371a9 ; 371a1 $6
+.asm_371a3
+ ld hl, $4cac
+ call CallBankF
+.asm_371a9
+ call Function0x37e01
+ call SwitchTurn
+ ld hl, $4cef
+ call CallBankF
+ call SwitchTurn
+ call $3995
+ call $39c9
+ ld hl, RegainedHealthText
+ jp FarBattleTextBox
+
+.asm_371c4
+ call Function0x37e77
+ ld hl, HPIsFullText
+ jp FarBattleTextBox
+; 371cd
+
+
+BattleCommand2d: ; 371cd
+; transform
+
+ call Function0x372d8
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call GetBattleVarPair
+ bit 3, [hl]
+ jp nz, Function0x372d2
+ call CheckHiddenOpponent
+ jp nz, Function0x372d2
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ ld a, $1
+ ld [$c689], a
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ bit 4, [hl]
+ push af
+ jr z, .asm_37200 ; 371f4 $a
+ call Function0x34548
+ jr nz, .asm_37200 ; 371f9 $5
+ ld a, $a4
+ call Function0x37e44
+.asm_37200
+ ld a, BATTLE_VARS_SUBSTATUS5
+ call GetBattleVarPair
+ set 3, [hl]
+ call Function0x372e7
+ ld hl, BattleMonSpecies
+ ld de, EnemyMonSpecies
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_3721f ; 37213 $a
+ ld hl, EnemyMonSpecies
+ ld de, BattleMonSpecies
+ xor a
+ ld [CurMoveNum], a
+.asm_3721f
+ push hl
+ ld a, [hli]
+ ld [de], a
+ inc hl
+ inc de
+ inc de
+ ld bc, $0004
+ call $3026
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3723a ; 3722e $a
+ ld a, [de]
+ ld [$c6f2], a
+ inc de
+ ld a, [de]
+ ld [$c6f3], a
+ dec de
+.asm_3723a
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld bc, $000c
+ add hl, bc
+ push hl
+ ld h, d
+ ld l, e
+ add hl, bc
+ ld d, h
+ ld e, l
+ pop hl
+ ld bc, $000c
+ call $3026
+ ld bc, $ffe2
+ add hl, bc
+ push de
+ ld d, h
+ ld e, l
+ pop hl
+ ld bc, $ffe8
+ add hl, bc
+ ld b, $4
+.asm_3725f
+ ld a, [de]
+ inc de
+ and a
+ jr z, .asm_3726c ; 37262 $8
+ cp $a6
+ ld a, $1
+ jr z, .asm_3726c ; 37268 $2
+ ld a, $5
+.asm_3726c
+ ld [hli], a
+ dec b
+ jr nz, .asm_3725f ; 3726e $ef
+ pop hl
+ ld a, [hl]
+ ld [$d265], a
+ call $343b
+ ld hl, $c6c1
+ ld de, $c6b6
+ ld bc, $000a
+ call BattleSideCopy
+ ld hl, EnemyStatLevels
+ ld de, PlayerStatLevels
+ ld bc, $0008
+ call BattleSideCopy
+ call Function0x37ed5
+ jr c, .asm_372a8 ; 37293 $13
+ ld a, [hBattleTurn]
+ and a
+ ld a, [$c6fe]
+ jr z, .asm_372a0 ; 3729b $3
+ ld a, [$c6fa]
+.asm_372a0
+ and a
+ jr nz, .asm_372a8 ; 372a1 $5
+ call Function0x37e36
+ jr .asm_372ae ; 372a6 $6
+.asm_372a8
+ call BattleCommandaa
+ call BattleCommanda6
+.asm_372ae
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ ld a, $2
+ ld [$c689], a
+ pop af
+ ld a, $a4
+ call nz, Function0x37e44
+ ld hl, TransformedText
+ jp FarBattleTextBox
+; 372c6
+
+
+BattleSideCopy: ; 372c6
+; Copy bc bytes from hl to de if it's the player's turn.
+; Copy bc bytes from de to hl if it's the enemy's turn.
+ ld a, [hBattleTurn]
+ and a
+ jr z, .copy
+
+; Swap hl and de
+ push hl
+ ld h, d
+ ld l, e
+ pop de
+.copy
+ jp CopyBytes
+; 372d2
+
+
+Function0x372d2: ; 372d2
+ call Function0x37e77
+ jp PrintButItFailed
+; 372d8
+
+
+Function0x372d8: ; 372d8
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE
+ call GetBattleVarPair
+ xor a
+ ld [hl], a
+
+ ld a, BATTLE_VARS_LAST_MOVE
+ call GetBattleVarPair
+ xor a
+ ld [hl], a
+ ret
+; 372e7
+
+
+Function0x372e7: ; 372e7
+ ld a, [hBattleTurn]
+ and a
+ jr z, .player
+
+ xor a
+ ld [EnemyEncoreCount], a
+ ld [EnemyEncoredMove], a
+ ret
+
+.player
+ xor a
+ ld [PlayerDisableCount], a
+ ld [DisabledMove], a
+ ret
+; 372fc
+
+
+BattleCommand2e: ; 372fc
+; screen
+
+ ld hl, PlayerScreens
+ ld bc, PlayerLightScreenCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3730d
+ ld hl, EnemyScreens
+ ld bc, EnemyLightScreenCount
+
+.asm_3730d
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp EFFECT_LIGHT_SCREEN
+ jr nz, .Reflect
+
+ bit 3, [hl]
+ jr nz, .asm_37337
+ set 3, [hl]
+ ld a, $5
+ ld [bc], a
+ ld hl, LightScreenEffectText
+ jr .asm_37331
+
+.Reflect
+ bit 4, [hl]
+ jr nz, .asm_37337
+ set 4, [hl]
+
+; LightScreenCount -> ReflectCount
+ inc bc
+
+ ld a, $5
+ ld [bc], a
+ ld hl, ReflectEffectText
+
+.asm_37331
+ call Function0x37e01
+ jp FarBattleTextBox
+
+.asm_37337
+ call Function0x37e77
+ jp PrintButItFailed
+; 3733d
+
+
+PrintDoesntAffect: ; 3733d
+; 'it doesn't affect'
+ ld hl, DoesntAffectText
+ jp FarBattleTextBox
+; 37343
+
+
+PrintNothingHappened: ; 37343
+; 'but nothing happened!'
+ ld hl, NothingHappenedText
+ jp FarBattleTextBox
+; 37349
+
+
+TryPrintButItFailed: ; 37349
+ ld a, [AlreadyFailed]
+ and a
+ ret nz
+
+ ; fallthrough
+; 3734e
+
+
+PrintButItFailed: ; 3734e
+; 'but it failed!'
+ ld hl, ButItFailedText
+ jp FarBattleTextBox
+; 37354
+
+
+Function0x37354: ; 37354
+ call Function0x37e77
+ ; fallthrough
+; 37357
+
+Function0x37357: ; 37357
+ ld hl, ButItFailedText ; 'but it failed!'
+ ld de, ItFailedText ; 'it failed!'
+ jp Function0x35157
+; 37360
+
+
+PrintDidntAffect: ; 37360
+; 'it didn't affect'
+ ld hl, DidntAffect1Text
+ jp FarBattleTextBox
+; 37366
+
+
+PrintDidntAffect2: ; 37366
+ call Function0x37e77
+ ld hl, DidntAffect1Text ; 'it didn't affect'
+ ld de, DidntAffect2Text ; 'it didn't affect'
+ jp Function0x35157
+; 37372
+
+
+PrintParalyze: ; 37372
+; 'paralyzed! maybe it can't attack!'
+ ld hl, ParalyzedText
+ jp FarBattleTextBox
+; 37378
+
+
+CheckSubstituteOpp: ; 37378
+ ld a, BATTLE_VARS_SUBSTATUS4_OPP
+ call CleanGetBattleVarPair
+ bit 4, a
+ ret
+; 37380
+
+
+BattleCommand1a: ; 37380
+ ld a, $41
+ ld hl, $610d
+ rst FarCall
+ ld a, $4
+ ld [$cfca], a
+ ld c, $3
+ call DelayFrames
+ ld a, BATTLE_VARS_STATUS
+ call GetBattleVarPair
+ xor a
+ ld [hli], a
+ inc hl
+ ld [hli], a
+ ld [hl], a
+ ld a, $1
+ ld [$c689], a
+ call BattleCommand0a
+ call Function0x37e36
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ res 7, [hl]
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call GetBattleVarPair
+ res 6, [hl]
+ call Function0x37ed5
+ ret nc
+ ld a, $f
+ ld hl, $5f58
+ rst FarCall
+ ld a, $f
+ ld hl, $6043
+ rst FarCall
+ call $31f6
+ jp $39c9
+; 373c9
+
+
+BattleCommand1b: ; 373c9
+; mirrormove
+
+ call Function0x372d8
+ ld a, BATTLE_VARS_MOVE
+ call GetBattleVarPair
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ and a
+ jr z, .asm_373de ; 373d7 $5
+ call CheckUserMove
+ jr nz, .asm_373ea ; 373dc $c
+.asm_373de
+ call Function0x37e77
+ ld hl, MirrorMoveFailedText
+ call FarBattleTextBox
+ jp EndMoveEffect
+.asm_373ea
+ ld a, b
+ ld [hl], a
+ ld [$d265], a
+ push af
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call GetBattleVarPair
+ ld d, h
+ ld e, l
+ pop af
+ dec a
+ call GetMoveData
+ call $34f8
+ call $30d6
+ call Function0x34548
+ jr nz, .asm_37412 ; 37405 $b
+ ld a, [$c689]
+ push af
+ call BattleCommand0a
+ pop af
+ ld [$c689], a
+.asm_37412
+ call BattleCommandaa
+ jp ResetTurn
+; 37418
+
+
+BattleCommand34: ; 37418
+; metronome
+
+ call Function0x372d8
+ call Function0x34548
+ jr nz, .asm_3742b
+
+ ld a, [$c689]
+ push af
+ call BattleCommand0a
+ pop af
+ ld [$c689], a
+
+.asm_3742b
+ call Function0x37e36
+
+.GetMove
+ call FarBattleRNG
+
+; No invalid moves.
+ cp BEAT_UP + 1
+ jr nc, .GetMove
+
+; None of the moves in MetronomeExcepts.
+ push af
+ ld de, 1
+ ld hl, MetronomeExcepts
+ call IsInArray
+ pop bc
+ jr c, .GetMove
+
+; No moves the user already has.
+ ld a, b
+ call CheckUserMove
+ jr z, .GetMove
+
+
+ ld a, BATTLE_VARS_MOVE
+ call GetBattleVarPair
+ ld [hl], b
+ call UpdateMoveData
+ jp ResetTurn
+; 37454
+
+
+MetronomeExcepts: ; 37454
+ db $00
+ db METRONOME
+ db STRUGGLE
+ db SKETCH
+ db MIMIC
+ db COUNTER
+ db MIRROR_COAT
+ db PROTECT
+ db DETECT
+ db ENDURE
+ db DESTINY_BOND
+ db SLEEP_TALK
+ db THIEF
+ db $ff
+; 37462
+
+
+CheckUserMove: ; 37462
+; Return z if the user has move a.
+ ld b, a
+ ld de, BattleMonMoves
+ ld a, [hBattleTurn]
+ and a
+ jr z, .ok
+ ld de, EnemyMonMoves
+.ok
+
+ ld c, NUM_MOVES
+.loop
+ ld a, [de]
+ inc de
+ cp b
+ ret z
+
+ dec c
+ jr nz, .loop
+
+ ld a, 1
+ and a
+ ret
+; 3747b
+
+
+ResetTurn: ; 3747b
+ ld hl, $c732
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37486
+ ld hl, $c733
+
+.asm_37486
+ ld [hl], 1
+ xor a
+ ld [AlreadyDisobeyed], a
+ call DoMove
+ jp EndMoveEffect
+; 37492
+
+
+BattleCommand50: ; 37492
+; thief
+
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_374ce ; 37495 $37
+ call .asm_37501
+ ld a, [hl]
+ and a
+ ret nz
+ call .asm_3750c
+ ld a, [hl]
+ and a
+ ret z
+ ld [$d265], a
+ ld d, a
+ ld a, $2e
+ ld hl, $5e76
+ rst FarCall
+ ret c
+ ld a, [$c70d]
+ and a
+ ret nz
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_374be ; 374b7 $5
+ ld a, [IsInBattle]
+ dec a
+ ret z
+.asm_374be
+ call .asm_3750c
+ xor a
+ ld [hl], a
+ ld [de], a
+ call .asm_37501
+ ld a, [$d265]
+ ld [hl], a
+ ld [de], a
+ jr .asm_374f8 ; 374cc $2a
+.asm_374ce
+ call .asm_3750c
+ ld a, [hl]
+ and a
+ ret nz
+ call .asm_37501
+ ld a, [hl]
+ and a
+ ret z
+ ld [$d265], a
+ ld d, a
+ ld a, $2e
+ ld hl, $5e76
+ rst FarCall
+ ret c
+ ld a, [$c70d]
+ and a
+ ret nz
+ call .asm_37501
+ xor a
+ ld [hl], a
+ ld [de], a
+ call .asm_3750c
+ ld a, [$d265]
+ ld [hl], a
+ ld [de], a
+.asm_374f8
+ call $3468
+ ld hl, StoleText
+ jp FarBattleTextBox
+
+.asm_37501
+ ld a, 1
+ call BattlePartyAttr
+ ld d, h
+ ld e, l
+ ld hl, BattleMonItem
+ ret
+
+.asm_3750c
+ ld a, 1
+ call $396d ; GetOTStat_Battle
+ ld d, h
+ ld e, l
+ ld hl, EnemyMonItem
+ ret
+; 37517
+
+
+BattleCommand51: ; 37517
+; arenatrap
+ call CheckHiddenOpponent
+ jr nz, .asm_37530 ; 3751a $14
+ ld a, BATTLE_VARS_SUBSTATUS5
+ call GetBattleVarPair
+ bit 7, [hl]
+ jr nz, .asm_37530 ; 37523 $b
+ set 7, [hl]
+ call Function0x37e01
+ ld hl, CantEscapeNowText
+ jp FarBattleTextBox
+.asm_37530
+ call Function0x37e77
+ jp PrintButItFailed
+; 37536
+
+
+BattleCommand52: ; 37536
+; nightmare
+
+ call CheckHiddenOpponent
+ jr nz, .asm_3755d ; 37539 $22
+ call CheckSubstituteOpp
+ jr nz, .asm_3755d ; 3753e $1d
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ and $7
+ jr z, .asm_3755d ; 37547 $14
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call GetBattleVarPair
+ bit 0, [hl]
+ jr nz, .asm_3755d ; 37550 $b
+ set 0, [hl]
+ call Function0x37e01
+ ld hl, StartedNightmareText
+ jp FarBattleTextBox
+.asm_3755d
+ call Function0x37e77
+ jp PrintButItFailed
+; 37563
+
+
+BattleCommand53: ; 37563
+; defrost
+
+ ld a, BATTLE_VARS_STATUS
+ call GetBattleVarPair
+ bit 5, [hl]
+ ret z
+ res 5, [hl]
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37578 ; 37570 $6
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_3757f ; 37576 $7
+.asm_37578
+ ld a, $20
+ call $3945
+ res 5, [hl]
+.asm_3757f
+ call $39c9
+ ld hl, WasDefrostedText
+ jp FarBattleTextBox
+; 37588
+
+
+BattleCommand54: ; 37588
+; curse
+
+ ld de, BattleMonType1
+ ld bc, PlayerStatLevels
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37599 ; 37591 $6
+ ld de, EnemyMonType1
+ ld bc, EnemyStatLevels
+.asm_37599
+ ld a, [de]
+ cp $8
+ jr z, .asm_375d7 ; 3759c $39
+ inc de
+ ld a, [de]
+ cp $8
+ jr z, .asm_375d7 ; 375a2 $33
+ ld a, [bc]
+ cp $d
+ jr c, .asm_375af ; 375a7 $6
+ inc bc
+ ld a, [bc]
+ cp $d
+ jr nc, .asm_3760a ; 375ad $5b
+.asm_375af
+ ld a, $1
+ ld [$c689], a
+ call Function0x37e01
+ ld a, $2
+ call Function0x36532
+ call SwitchTurn
+ call BattleCommand8d
+ call ResetMiss
+ call SwitchTurn
+ call BattleCommand70
+ call BattleCommand8c
+ call ResetMiss
+ call BattleCommand71
+ jp BattleCommand8c
+.asm_375d7
+ call CheckHiddenOpponent
+ jr nz, .asm_37604 ; 375da $28
+ call CheckSubstituteOpp
+ jr nz, .asm_37604 ; 375df $23
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call GetBattleVarPair
+ bit 1, [hl]
+ jr nz, .asm_37604 ; 375e8 $1a
+ set 1, [hl]
+ call Function0x37e01
+ ld hl, $4c9f
+ call CallBankF
+ ld hl, $4c3f
+ call CallBankF
+ call $3995
+ ld hl, PutACurseText
+ jp FarBattleTextBox
+.asm_37604
+ call Function0x37e77
+ jp PrintButItFailed
+.asm_3760a
+ ld b, $8
+ call GetStatName
+ call Function0x37e77
+ ld hl, WontRiseAnymoreText
+ jp FarBattleTextBox
+; 37618
+
+
+BattleCommand55: ; 37618
+; protect
+
+ call Function0x3762c
+ ret c
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ set 2, [hl]
+ call Function0x37e01
+ ld hl, ProtectedItselfText
+ jp FarBattleTextBox
+; 3762c
+
+
+Function0x3762c: ; 3762c
+ ld de, $c679
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37637
+
+ ld de, PlayerDamageTaken
+.asm_37637
+ call Function0x36abf
+ jr nz, .asm_37665
+
+ ld a, $3
+ call CleanGetBattleVarPair
+ bit 4, a
+ jr nz, .asm_37665
+
+ ld b, $ff
+ ld a, [de]
+ ld c, a
+.asm_37649
+ ld a, c
+ and a
+ jr z, .asm_37656
+
+ dec c
+ srl b
+ ld a, b
+ and a
+ jr nz, .asm_37649
+
+ jr .asm_37665
+
+.asm_37656
+ call FarBattleRNG
+ and a
+ jr z, .asm_37656
+
+ dec a
+ cp b
+ jr nc, .asm_37665
+
+ ld a, [de]
+ inc a
+ ld [de], a
+ and a
+ ret
+
+.asm_37665
+ xor a
+ ld [de], a
+ call Function0x37e77
+ call PrintButItFailed
+ scf
+ ret
+; 3766f
+
+
+BattleCommand5a: ; 3766f
+; endure
+
+ call Function0x3762c
+ ret c
+; get substatus1
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ set 5, [hl] ; endure
+ call Function0x37e01
+ ld hl, BracedItselfText
+ jp FarBattleTextBox
+; 37683
+
+
+BattleCommand56: ; 37683
+; spikes
+
+ ld hl, EnemyScreens
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3768e ; 37689 $3
+ ld hl, PlayerScreens
+.asm_3768e
+ bit 0, [hl]
+ jr nz, .asm_3769d ; 37690 $b
+ set 0, [hl]
+ call Function0x37e01
+ ld hl, SpikesText
+ jp FarBattleTextBox
+.asm_3769d
+ jp Function0x37354
+; 376a0
+
+
+BattleCommand57: ; 376a0
+; foresight
+
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_376bf ; 376a4 $19
+ call CheckHiddenOpponent
+ jr nz, .asm_376bf ; 376a9 $14
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call GetBattleVarPair
+ bit 3, [hl]
+ jr nz, .asm_376bf ; 376b2 $b
+ set 3, [hl]
+ call Function0x37e01
+ ld hl, IdentifiedText
+ jp FarBattleTextBox
+.asm_376bf
+ jp Function0x37354
+; 376c2
+
+
+BattleCommand58: ; 376c2
+; perishsong
+
+ ld hl, PlayerSubStatus1
+ ld de, EnemySubStatus1
+ bit 4, [hl]
+ jr z, .asm_376d1 ; 376ca $5
+ ld a, [de]
+ bit 4, a
+ jr nz, .asm_376f2 ; 376cf $21
+.asm_376d1
+ bit 4, [hl]
+ jr nz, .asm_376dc ; 376d3 $7
+ set 4, [hl]
+ ld a, $4
+ ld [PlayerPerishCount], a
+.asm_376dc
+ ld a, [de]
+ bit 4, a
+ jr nz, .asm_376e9 ; 376df $8
+ set 4, a
+ ld [de], a
+ ld a, $4
+ ld [$c67f], a
+.asm_376e9
+ call Function0x37e01
+ ld hl, StartPerishText
+ jp FarBattleTextBox
+.asm_376f2
+ call Function0x37e77
+ jp PrintButItFailed
+; 376f8
+
+
+BattleCommand59: ; 376f8
+; startsandstorm
+
+ ld a, [Weather]
+ cp WEATHER_SANDSTORM
+ jr z, .asm_37712
+ ld a, WEATHER_SANDSTORM
+ ld [Weather], a
+ ld a, 5
+ ld [WeatherCount], a
+ call Function0x37e01
+ ld hl, SandstormBrewedText
+ jp FarBattleTextBox
+.asm_37712
+ call Function0x37e77
+ jp PrintButItFailed
+; 37718
+
+
+BattleCommand5b: ; 37718
+; checkcurl
+
+ ld de, PlayerRolloutCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37723 ; 3771e $3
+ ld de, EnemyRolloutCount
+.asm_37723
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call CleanGetBattleVarPair
+ bit 6, a
+ jr z, .asm_37731 ; 3772a $5
+
+ ld b, $4 ; doturn
+ jp SkipToBattleCommand
+
+.asm_37731
+ xor a
+ ld [de], a
+ ret
+; 37734
+
+
+BattleCommand5c: ; 37734
+; rolloutpower
+
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and 7
+ ret nz
+
+ ld hl, PlayerRolloutCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37747
+ ld hl, EnemyRolloutCount
+
+.asm_37747
+ ld a, [hl]
+ and a
+ jr nz, .asm_37750
+ ld a, 1
+ ld [$c73e], a
+
+.asm_37750
+ ld a, [AttackMissed]
+ and a
+ jr z, .hit
+
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ res 6, [hl]
+ ret
+
+.hit
+ inc [hl]
+ ld a, [hl]
+ ld b, a
+ cp $5
+ jr c, .asm_3776e ; 37763 $9
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ res 6, [hl]
+ jr .asm_37775 ; 3776c $7
+
+.asm_3776e
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ set 6, [hl]
+
+.asm_37775
+ ld a, BATTLE_VARS_SUBSTATUS2
+ call CleanGetBattleVarPair
+ bit 0, a
+ jr z, .asm_3777f ; 3777c $1
+ inc b
+.asm_3777f
+ dec b
+ jr z, .asm_37790 ; 37780 $e
+ ld hl, CurDamage + 1
+ sla [hl]
+ dec hl
+ rl [hl]
+ jr nc, .asm_3777f ; 3778a $f3
+ ld a, $ff
+ ld [hli], a
+ ld [hl], a
+.asm_37790
+ ret
+; 37791
+
+
+BattleCommand5d: ; 37791
+; unused
+ ret
+; 37792
+
+
+BattleCommand5e: ; 37792
+; furycutter
+
+ ld hl, PlayerFuryCutterCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .go
+ ld hl, EnemyFuryCutterCount
+
+.go
+ ld a, [AttackMissed]
+ and a
+ jp nz, ResetFuryCutterCount
+
+ inc [hl]
+
+; Damage capped at 5 turns' worth (16x).
+ ld a, [hl]
+ ld b, a
+ cp 6
+ jr c, .checkdouble
+ ld b, 5
+
+.checkdouble
+ dec b
+ ret z
+
+; Double the damage
+ ld hl, CurDamage + 1
+ sla [hl]
+ dec hl
+ rl [hl]
+ jr nc, .checkdouble
+
+; No overflow
+ ld a, $ff
+ ld [hli], a
+ ld [hl], a
+ ret
+; 377be
+
+
+ResetFuryCutterCount: ; 377be
+
+ push hl
+
+ ld hl, PlayerFuryCutterCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .reset
+ ld hl, EnemyFuryCutterCount
+
+.reset
+ xor a
+ ld [hl], a
+
+ pop hl
+ ret
+; 377ce
+
+
+BattleCommand5f: ; 377ce
+; attract
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_377f2
+ call Function0x377f5
+ jr c, .asm_377f2
+ call CheckHiddenOpponent
+ jr nz, .asm_377f2
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call GetBattleVarPair
+ bit 7, [hl]
+ jr nz, .asm_377f2
+
+ set 7, [hl]
+ call Function0x37e01
+
+; 'fell in love!'
+ ld hl, FellInLoveText
+ jp FarBattleTextBox
+
+.asm_377f2
+ jp Function0x37354
+; 377f5
+
+
+Function0x377f5: ; 377f5
+ ld a, 0
+ call BattlePartyAttr
+ ld a, [hl]
+ ld [CurPartySpecies], a
+
+ ld a, [CurBattleMon]
+ ld [CurPartyMon], a
+ xor a
+ ld [MonType], a
+
+ ld a, $14
+ ld hl, $4bdd
+ rst FarCall
+ jr c, .asm_37849
+
+ ld b, 1
+ jr nz, .asm_37815
+ dec b
+
+.asm_37815
+ push bc
+ ld a, [TempEnemyMonSpecies]
+ ld [CurPartySpecies], a
+ ld hl, EnemyMonAtkDefDV
+ ld a, [EnemySubStatus5]
+ bit 3, a
+ jr z, .asm_37829
+ ld hl, $c6f2
+
+.asm_37829
+ ld a, [hli]
+ ld [$d123], a
+ ld a, [hl]
+ ld [$d124], a
+ ld a, $3
+ ld [MonType], a
+ ld a, $14
+ ld hl, $4bdd
+ rst FarCall
+ pop bc
+ jr c, .asm_37849
+
+ ld a, 1
+ jr nz, .asm_37844
+ dec a
+
+.asm_37844
+ xor b
+ jr z, .asm_37849
+
+ and a
+ ret
+
+.asm_37849
+ scf
+ ret
+; 3784b
+
+
+BattleCommand60: ; 3784b
+; happinesspower
+ push bc
+ ld hl, BattleMonHappiness
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37857 ; 37852 $3
+ ld hl, EnemyMonHappiness
+.asm_37857
+ xor a
+ ld [$ffb4], a
+ ld [$ffb5], a
+ ld a, [hl]
+ ld [$ffb6], a
+ ld a, $a
+ ld [$ffb7], a
+ call $3119
+ ld a, $19
+ ld [$ffb7], a
+ ld b, $4
+ call $3124
+ ld a, [$ffb6]
+ ld d, a
+ pop bc
+ ret
+; 37874
+
+
+BattleCommand61: ; 37874
+; present
+
+ ld a, [InLinkBattle]
+ cp $3
+ jr z, .asm_3787d ; 37879 $2
+ push bc
+ push de
+.asm_3787d
+ call BattleCommand07
+ ld a, [InLinkBattle]
+ cp $3
+ jr z, .asm_37889 ; 37885 $2
+ pop de
+ pop bc
+.asm_37889
+ ld a, [$d265]
+ and a
+ jp z, Function0x37e77
+ ld a, [AttackMissed]
+ and a
+ jp nz, Function0x37e77
+ push bc
+ call FarBattleRNG
+ ld b, a
+ ld hl, .table_37907
+ ld c, 0
+.asm_378a1
+ ld a, [hli]
+ cp $ff
+ jr z, .asm_378b7 ; 378a4 $11
+ cp b
+ jr nc, .asm_378ad ; 378a7 $4
+ inc c
+ inc hl
+ jr .asm_378a1 ; 378ab $f4
+.asm_378ad
+ ld a, c
+ ld [$c689], a
+ call Function0x37de9
+ ld d, [hl]
+ pop bc
+ ret
+.asm_378b7
+ pop bc
+ ld a, $3
+ ld [$c689], a
+ call Function0x37e01
+ call SwitchTurn
+ ld hl, $5246
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_378ce ; 378c9 $3
+ ld hl, $5251
+.asm_378ce
+ ld a, $e
+ rst FarCall
+ jr c, .asm_378f3 ; 378d1 $20
+ ld hl, $4c8e
+ call CallBankF
+ call SwitchTurn
+ ld hl, $4cef
+ call CallBankF
+ call SwitchTurn
+ ld hl, RegainedHealthText
+ call FarBattleTextBox
+ call SwitchTurn
+ call $398e
+ jr .asm_37904 ; 378f1 $11
+.asm_378f3
+ call SwitchTurn
+ call Function0x37ed5
+ jr nc, .asm_37904 ; 378f9 $9
+ call Function0x37e77
+ ld hl, RefusedGiftText
+ call FarBattleTextBox
+.asm_37904
+ jp EndMoveEffect
+
+.table_37907
+ db $66, 40
+ db $b3, 80
+ db $cc, 120
+ db $ff
+; 3790e
+
+
+BattleCommand63: ; 3790e
+; frustrationpower
+
+ push bc
+ ld hl, BattleMonHappiness
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3791a ; 37915 $3
+ ld hl, EnemyMonHappiness
+.asm_3791a
+ ld a, $ff
+ sub [hl]
+ ld [$ffb6], a
+ xor a
+ ld [$ffb4], a
+ ld [$ffb5], a
+ ld a, $a
+ ld [$ffb7], a
+ call $3119
+ ld a, $19
+ ld [$ffb7], a
+ ld b, $4
+ call $3124
+ ld a, [$ffb6]
+ ld d, a
+ pop bc
+ ret
+; 37939
+
+
+BattleCommand64: ; 37939
+; safeguard
+
+ ld hl, PlayerScreens
+ ld de, $c701
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3794a ; 37942 $6
+ ld hl, EnemyScreens
+ ld de, $c705
+.asm_3794a
+ bit 2, [hl]
+ jr nz, .asm_3795c ; 3794c $e
+ set 2, [hl]
+ ld a, $5
+ ld [de], a
+ call Function0x37e01
+ ld hl, CoveredByVeilText
+ jp FarBattleTextBox
+.asm_3795c
+ call Function0x37e77
+ jp PrintButItFailed
+; 37962
+
+
+Function0x37962: ; 37962
+ push hl
+ ld hl, EnemyScreens
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3796e
+ ld hl, PlayerScreens
+
+.asm_3796e
+ bit 2, [hl]
+ pop hl
+ ret
+; 37972
+
+
+BattleCommand65: ; 37972
+; checksafeguard
+ ld hl, EnemyScreens
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3797d ; 37978 $3
+ ld hl, PlayerScreens
+.asm_3797d
+ bit 2, [hl]
+ ret z
+ ld a, $1
+ ld [AttackMissed], a
+ call BattleCommandaa
+ ld hl, SafeguardProtectText
+ call FarBattleTextBox
+ jp EndMoveEffect
+; 37991
+
+
+BattleCommand66: ; 37991
+; getmagnitude
+
+ push bc
+ call FarBattleRNG
+ ld b, a
+ ld hl, .Magnitudes
+.asm_37999
+ ld a, [hli]
+ cp b
+ jr nc, .asm_379a1 ; 3799b $4
+ inc hl
+ inc hl
+ jr .asm_37999 ; 3799f $f8
+.asm_379a1
+ ld d, [hl]
+ push de
+ inc hl
+ ld a, [hl]
+ ld [$d265], a
+ call BattleCommandaa
+ ld hl, MagnitudeText
+ call FarBattleTextBox
+ pop de
+ pop bc
+ ret
+
+.Magnitudes
+ ; /255, BP, magnitude
+ db 13, 10, 4
+ db 38, 30, 5
+ db 89, 50, 6
+ db 166, 70, 7
+ db 217, 90, 8
+ db 242, 110, 9
+ db 255, 150, 10
+; 379c9
+
+
+BattleCommand67: ; 379c9
+; batonpass
+
+ ld a, [hBattleTurn]
+ and a
+ jp nz, .Enemy
+
+ call Function0x37ae9
+ jp z, Function0x37aab
+
+ call $399c
+ call Function0x37e01
+
+ ld c, 50
+ call DelayFrames
+
+ call $1d6e
+
+ ld a, $f
+ ld hl, $52f7
+ rst FarCall
+
+ ld a, $f
+ ld hl, $5380
+ rst FarCall
+
+ call $3317
+
+ ld a, $f
+ ld hl, $6d9f
+ rst FarCall
+
+ call $1c17
+ call $300b
+
+ ld hl, $c4a1
+ ld bc, $040a
+ call ClearBox
+
+ ld b, 1
+ call $3340
+ call $32f9
+ call Function0x37a67
+
+ ld a, $f
+ ld hl, $52e0
+ rst FarCall
+
+ jp c, EndMoveEffect
+
+ ld hl, $6459
+ call CallBankF
+ call Function0x37ab1
+
+ ret
+
+.Enemy
+ ld a, [IsInBattle]
+ dec a
+ jp z, Function0x37aab
+
+ call Function0x37af6
+ jp z, Function0x37aab
+
+ call $39b0
+ call Function0x37e01
+ call Function0x37a82
+
+ ld a, $f
+ ld hl, $52e0
+ rst FarCall
+ jp c, EndMoveEffect
+
+ xor a
+ ld [$c718], a
+
+ ld hl, $5517
+ call CallBankF
+
+ ld hl, $557a
+ call CallBankF
+
+ ld a, 1
+ ld [$d265], a
+
+ ld hl, $6cab
+ call CallBankF
+
+ ld hl, $5c23
+ call CallBankF
+
+ jr Function0x37ab1
+; 37a67
+
+
+Function0x37a67: ; 37a67
+ ld a, [InLinkBattle]
+ and a
+ ret z
+
+ ld a, 1
+ ld [$d0ec], a
+
+ call $1d6e
+
+ ld hl, $68e4
+ call CallBankF
+
+ call $1c17
+
+ xor a
+ ld [$d0ec], a
+
+ ret
+; 37a82
+
+
+Function0x37a82; 37a82
+ ld a, [InLinkBattle]
+ and a
+ ret z
+
+ call $1d6e
+ ld hl, $68e4
+ call CallBankF
+ ld a, [OTPartyCount]
+ add $4
+ ld b, a
+ ld a, [$d430]
+ cp $4
+ jr c, .asm_37aa0
+
+ cp b
+ jr c, .asm_37aa8
+
+.asm_37aa0
+ ld a, [CurOTMon]
+ add $4
+ ld [$d430], a
+.asm_37aa8
+ jp $1c17
+; 37aab
+
+
+Function0x37aab: ; 37aab
+ call Function0x37e77
+ jp PrintButItFailed
+; 37ab1
+
+
+Function0x37ab1: ; 37ab1
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and 7
+ jr nz, .asm_37ac1
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ res 0, [hl]
+
+.asm_37ac1
+ call Function0x372e7
+ ld hl, PlayerSubStatus1
+ res 7, [hl]
+ ld hl, EnemySubStatus1
+ res 7, [hl]
+ ld hl, PlayerSubStatus5
+ ld a, BATTLE_VARS_SUBSTATUS5
+ call GetBattleVarPair
+ res 3, [hl]
+ res 4, [hl]
+ ld a, BATTLE_VARS_LAST_MOVE
+ call GetBattleVarPair
+ ld [hl], 0
+ xor a
+ ld [$c730], a
+ ld [$c731], a
+ ret
+; 37ae9
+
+
+Function0x37ae9: ; 37ae9
+ ld hl, PartyMon1CurHP
+ ld a, [PartyCount]
+ ld d, a
+ ld a, [CurBattleMon]
+ ld e, a
+ jr Function0x37b01
+; 37af6
+
+
+Function0x37af6: ; 37af6
+ ld hl, OTPartyMon1CurHP
+ ld a, [OTPartyCount]
+ ld d, a
+ ld a, [CurOTMon]
+ ld e, a
+
+ ; fallthrough
+; 37b01
+
+Function0x37b01: ; 37b01
+ xor a
+ ld b, a
+ ld c, a
+.asm_37b04
+ ld a, c
+ cp d
+ jr z, .asm_37b1a
+
+ cp e
+ jr z, .asm_37b11
+
+ ld a, [hli]
+ or b
+ ld b, a
+ ld a, [hld]
+ or b
+ ld b, a
+.asm_37b11
+ push bc
+ ld bc, $30
+ add hl, bc
+ pop bc
+ inc c
+ jr .asm_37b04
+
+.asm_37b1a
+ ld a, b
+ and a
+ ret
+; 37b1d
+
+
+BattleCommand68: ; 37b1d
+ ld hl, $c711
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37b28 ; 37b23 $3
+ ld hl, $c710
+.asm_37b28
+ ld a, [hl]
+ and a
+ ret z
+ ld hl, CurDamage + 1
+ sla [hl]
+ dec hl
+ rl [hl]
+ ret nc
+ ld a, $ff
+ ld [hli], a
+ ld [hl], a
+ ret
+; 37b39
+
+
+BattleCommand69: ; 37b39
+; clearhazards
+
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ bit 7, [hl]
+ jr z, .asm_37b4a ; 37b40 $8
+ res 7, [hl]
+ ld hl, ShedLeechSeedText
+ call FarBattleTextBox
+.asm_37b4a
+ ld hl, PlayerScreens
+ ld de, $c730
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37b5b ; 37b53 $6
+ ld hl, EnemyScreens
+ ld de, $c731
+.asm_37b5b
+ bit 0, [hl]
+ jr z, .asm_37b69 ; 37b5d $a
+ res 0, [hl]
+ ld hl, BlewSpikesText
+ push de
+ call FarBattleTextBox
+ pop de
+.asm_37b69
+ ld a, [de]
+ and a
+ ret z
+ xor a
+ ld [de], a
+ ld hl, ReleasedByText
+ jp FarBattleTextBox
+; 37b74
+
+
+BattleCommand6a: ; 37b74
+; healmorn
+ ld b, MORN
+ jr BattleCommand6a6c
+; 37b78
+
+BattleCommand6b: ; 37b78
+; healday
+ ld b, DAY
+ jr BattleCommand6a6c
+; 37b7c
+
+BattleCommand6c: ; 37b7c
+; healnite
+ ld b, NITE
+ ; fallthrough
+; 37b7e
+
+BattleCommand6a6c: ; 37b7e
+; Time- and weather-sensitive heal.
+
+ ld hl, BattleMonMaxHP
+ ld de, BattleMonHP
+ ld a, [hBattleTurn]
+ and a
+ jr z, .start
+ ld hl, EnemyMonMaxHP
+ ld de, EnemyMonHP
+
+.start
+; Index for .Multipliers
+; Default restores half max HP.
+ ld c, 2
+
+; Don't bother healing if HP is already full.
+ push bc
+ call StringCmp
+ pop bc
+ jr z, .Full
+
+; Don't factor in time of day in link battles.
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .Weather
+
+ ld a, [TimeOfDay]
+ cp b
+ jr z, .Weather
+ dec c
+
+.Weather
+ ld a, [Weather]
+ and a
+ jr z, .Heal
+
+; x2 in sun
+; /2 in rain/sandstorm
+ inc c
+ cp WEATHER_SUN
+ jr z, .Heal
+ dec c
+ dec c
+
+.Heal
+ ld b, 0
+ ld hl, .Multipliers
+ add hl, bc
+ add hl, bc
+
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, BANK(GetMaxHP)
+ rst FarCall
+
+ call Function0x37e01
+ call SwitchTurn
+
+ ld hl, $4cef
+ ld a, $f
+ rst FarCall ; callab 3ccef
+
+ call SwitchTurn
+ call $3995
+
+; 'regained health!'
+ ld hl, RegainedHealthText
+ jp FarBattleTextBox
+
+.Full
+ call Function0x37e77
+
+; 'hp is full!'
+ ld hl, HPIsFullText
+ jp FarBattleTextBox
+
+.Multipliers
+ dw GetEighthMaxHP
+ dw GetQuarterMaxHP
+ dw GetHalfMaxHP
+ dw GetMaxHP
+; 37be8
+
+
+BattleCommand6d: ; 37be8
+; hiddenpower
+
+ ld a, [AttackMissed]
+ and a
+ ret nz
+
+ ld a, $3e
+ ld hl, $7ced
+ rst FarCall
+
+ ret
+; 37bf4
+
+
+BattleCommand6e: ; 37bf4
+; startrain
+ ld a, WEATHER_RAIN
+ ld [Weather], a
+ ld a, 5
+ ld [WeatherCount], a
+ call Function0x37e01
+ ld hl, DownpourText
+ jp FarBattleTextBox
+; 37c07
+
+
+BattleCommand6f: ; 37c07
+; startsun
+ ld a, WEATHER_SUN
+ ld [Weather], a
+ ld a, 5
+ ld [WeatherCount], a
+ call Function0x37e01
+ ld hl, SunGotBrightText
+ jp FarBattleTextBox
+; 37c1a
+
+
+BattleCommand95: ; 37c1a
+; bellydrum
+ call BattleCommand77
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_37c4f
+
+ ld hl, $4c9f
+ ld a, $f
+ rst FarCall
+
+ ld hl, $4cde
+ ld a, $f
+ rst FarCall
+ jr nc, .asm_37c4f
+
+ push bc
+ call Function0x37e01
+ pop bc
+ ld hl, $4c3f
+ ld a, $f
+ rst FarCall
+ call $3995
+ ld a, $5
+
+.asm_37c41
+ push af
+ call BattleCommand77
+ pop af
+ dec a
+ jr nz, .asm_37c41 ; 37c47 $f8
+
+ ld hl, BellyDrumText
+ jp FarBattleTextBox
+.asm_37c4f
+ call Function0x37e77
+ jp PrintButItFailed
+; 37c55
+
+
+BattleCommand96: ; 37c55
+; psychup
+
+ ld hl, EnemyStatLevels
+ ld de, PlayerStatLevels
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37c64 ; 37c5e $4
+ push hl
+ ld h, d
+ ld l, e
+ pop de
+.asm_37c64
+ push hl
+ ld b, $8
+.asm_37c67
+ ld a, [hli]
+ cp $7
+ jr nz, .asm_37c76 ; 37c6a $a
+ dec b
+ jr nz, .asm_37c67 ; 37c6d $f8
+ pop hl
+ call Function0x37e77
+ jp PrintButItFailed
+.asm_37c76
+ pop hl
+ ld b, $8
+.asm_37c79
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .asm_37c79 ; 37c7d $fa
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_37c89 ; 37c82 $5
+ call Function0x365d7
+ jr .asm_37c8c ; 37c87 $3
+.asm_37c89
+ call Function0x365fd
+.asm_37c8c
+ call Function0x37e01
+ ld hl, CopiedStatsText
+ jp FarBattleTextBox
+; 37c95
+
+
+BattleCommand9a: ; 37c95
+; mirrorcoat
+
+ ld a, $1
+ ld [AttackMissed], a
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ and a
+ ret z
+ ld b, a
+ ld hl, $45ec
+ ld a, $f
+ rst FarCall
+ ld a, b
+ cp $90
+ ret z
+ call BattleCommanda3
+ ld a, [$d265]
+ and a
+ ret z
+ call Function0x36abf
+ ret z
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ dec a
+ ld de, StringBuffer1
+ call GetMoveData
+ ld a, [$d075]
+ and a
+ ret z
+ ld a, [$d076]
+ cp $14
+ ret c
+ ld hl, CurDamage
+ ld a, [hli]
+ or [hl]
+ ret z
+ ld a, [hl]
+ add a
+ ld [hld], a
+ ld a, [hl]
+ adc a
+ ld [hl], a
+ jr nc, .asm_37ce1 ; 37cdb $4
+ ld a, $ff
+ ld [hli], a
+ ld [hl], a
+.asm_37ce1
+ xor a
+ ld [AttackMissed], a
+ ret
+; 37ce6
+
+
+BattleCommand9d: ; 37ce6
+; doubleminimizedamage
+
+ ld hl, $c6fa
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37cf1 ; 37cec $3
+ ld hl, $c6fe
+.asm_37cf1
+ ld a, [hl]
+ and a
+ ret z
+ ld hl, CurDamage + 1
+ sla [hl]
+ dec hl
+ rl [hl]
+ ret nc
+ ld a, $ff
+ ld [hli], a
+ ld [hl], a
+ ret
+; 37d02
+
+
+BattleCommand9e: ; 37d02
+; skipsuncharge
+ ld a, [Weather]
+ cp WEATHER_SUN
+ ret nz
+ ld b, $39 ; charge
+ jp SkipToBattleCommand
+; 37d0d
+
+
+BattleCommand9b: ; 37d0d
+; checkfuturesight
+
+ ld hl, $c71d
+ ld de, $c727
+ ld a, [hBattleTurn]
+ and a
+ jr z, .ok
+ ld hl, $c71e
+ ld de, $c729
+.ok
+
+ ld a, [hl]
+ and a
+ ret z
+ cp 1
+ ret nz
+
+ ld [hl], 0
+ ld a, [de]
+ inc de
+ ld [CurDamage], a
+ ld a, [de]
+ ld [CurDamage + 1], a
+ ld b, $9c ; futuresight
+ jp SkipToBattleCommand
+; 37d34
+
+BattleCommand9c: ; 37d34
+; futuresight
+
+ call Function0x34548
+ jr nz, .asm_37d4b ; 37d37 $12
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ ld b, a
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE
+ call GetBattleVarPair
+ ld [hl], b
+ ld a, BATTLE_VARS_LAST_MOVE
+ call GetBattleVarPair
+ ld [hl], b
+.asm_37d4b
+ ld hl, $c71d
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37d56 ; 37d51 $3
+ ld hl, $c71e
+.asm_37d56
+ ld a, [hl]
+ and a
+ jr nz, .asm_37d87 ; 37d58 $2d
+ ld a, $4
+ ld [hl], a
+ call BattleCommand0a
+ call BattleCommandaa
+ ld hl, ForesawAttackText
+ call FarBattleTextBox
+ call BattleCommand0c
+ ld de, $c727
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37d77 ; 37d72 $3
+ ld de, $c729
+.asm_37d77
+ ld hl, CurDamage
+ ld a, [hl]
+ ld [de], a
+ ld [hl], $0
+ inc hl
+ inc de
+ ld a, [hl]
+ ld [de], a
+ ld [hl], $0
+ jp EndMoveEffect
+.asm_37d87
+ pop bc
+ call ResetDamage
+ call Function0x37e77
+ call PrintButItFailed
+ jp EndMoveEffect
+; 37d94
+
+
+BattleCommand9f: ; 37d94
+; thunderaccuracy
+
+ ld a, BATTLE_VARS_MOVE_TYPE
+ call GetBattleVarPair
+ inc hl
+ ld a, [Weather]
+ cp WEATHER_RAIN
+ jr z, .asm_37da7 ; 37d9f $6
+ cp WEATHER_SUN
+ ret nz
+ ld [hl], $80
+ ret
+.asm_37da7
+ ld [hl], $ff
+ ret
+; 37daa
+
+
+CheckHiddenOpponent: ; 37daa
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call CleanGetBattleVarPair
+ and $60 ; fly | dig
+ ret
+; 37db2
+
+
+GetUserItem: ; 37db2
+; Return the effect of the user's item in bc, and its id at hl.
+ ld hl, BattleMonItem
+ ld a, [hBattleTurn]
+ and a
+ jr z, .go
+ ld hl, EnemyMonItem
+.go
+ ld b, [hl]
+ jp GetItem
+; 37dc1
+
+
+GetOpponentItem: ; 37dc1
+; Return the effect of the opponent's item in bc, and its id at hl.
+ ld hl, EnemyMonItem
+ ld a, [hBattleTurn]
+ and a
+ jr z, .go
+ ld hl, BattleMonItem
+.go
+ ld b, [hl]
+ jp GetItem
+; 37dd0
+
+
+GetItem: ; 37dd0
+; Return the effect of item b in bc.
+ ld a, b
+ and a
+ ret z
+
+ push hl
+ ld hl, $67c3 ; Items
+ dec a
+ ld c, a
+ ld b, 0
+ ld a, 7
+ call AddNTimes
+ ld a, $1 ; BANK(Items)
+ call GetFarHalfword
+ ld b, l
+ ld c, h
+ pop hl
+ ret
+; 37de9
+
+
+Function0x37de9: ; 37de9
+ push hl
+ push de
+ push bc
+ ld a, [$c689]
+ push af
+ call BattleCommand0a
+ pop af
+ ld [$c689], a
+ call Function0x37e19
+ call BattleCommand0c
+ pop bc
+ pop de
+ pop hl
+ ret
+; 37e01
+
+
+Function0x37e01: ; 37e01
+ push hl
+ push de
+ push bc
+ ld a, [$c689]
+ push af
+ call BattleCommand0a
+ pop af
+ ld [$c689], a
+ call Function0x37e36
+ call BattleCommand0c
+ pop bc
+ pop de
+ pop hl
+ ret
+; 37e19
+
+
+Function0x37e19: ; 37e19
+ xor a
+ ld [FXAnimIDHi], a
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ and a
+ ret z
+
+ ld [FXAnimIDLo], a
+
+ ld a, [hBattleTurn]
+ and a
+ ld a, 1
+ jr z, .asm_37e30
+ ld a, 4
+
+.asm_37e30
+ ld [$cfca], a
+
+ jp Function0x37e47
+; 37e36
+
+
+Function0x37e36: ; 37e36
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ and a
+ ret z
+
+ ; fallthrough
+; 37e44
+
+
+Function0x37e44: ; 37e44
+
+ ld [FXAnimIDLo], a
+
+ ; fallthrough
+; 37e47
+
+
+Function0x37e47: ; 37e47
+ push hl
+ push de
+ push bc
+ ld hl, $40d6
+ ld a, $33
+ rst FarCall ; callab SafePlayBattleAnimation
+ pop bc
+ pop de
+ pop hl
+ ret
+; 37e54
+
+
+Function0x37e54: ; 37e54
+ ld a, e
+ ld [FXAnimIDLo], a
+ ld a, d
+ ld [FXAnimIDHi], a
+ xor a
+ ld [$cfca], a
+
+ push hl
+ push de
+ push bc
+ call SwitchTurn
+
+ ld hl, $40d6
+ ld a, $33
+ rst FarCall ; callab SafePlayBattleAnimation
+
+ call SwitchTurn
+ pop bc
+ pop de
+ pop hl
+ ret
+; 37e73
+
+
+CallBankF: ; 37e73
+ ld a, $f
+ rst FarCall
+ ret
+; 37e77
+
+
+Function0x37e77: ; 37e77
+ call BattleCommand0a
+ call BattleCommandaa
+ jp BattleCommand0c
+; 37e80
+
+
+BattleCommandaa: ; 37e80
+; wait
+; Wait 40 frames.
+ ld c, 40
+ jp DelayFrames
+; 37e85
+
+
+BattleCommand38: ; 37e85
+; cleartext
+
+; Used in multi-hit moves.
+ ld hl, .text
+ jp BattleTextBox
+.text
+ db "@"
+; 37e8c
+
+
+SkipToBattleCommand: ; 37e8c
+; Skip over commands until reaching command b.
+ ld a, [BattleScriptBufferLoc + 1]
+ ld h, a
+ ld a, [BattleScriptBufferLoc]
+ ld l, a
+.asm_37e94
+ ld a, [hli]
+ cp b
+ jr nz, .asm_37e94
+
+ ld a, h
+ ld [BattleScriptBufferLoc + 1], a
+ ld a, l
+ ld [BattleScriptBufferLoc], a
+ ret
+; 37ea1
+
+
+GetMoveAttr: ; 37ea1
+; Assuming hl = Moves + x, return attribute x of move a.
+ push bc
+ ld bc, Move2 - Move1
+ call AddNTimes
+ call GetMoveByte
+ pop bc
+ ret
+; 37ead
+
+
+GetMoveData: ; 37ead
+; Copy move struct a to de.
+ ld hl, Moves
+ ld bc, Move2 - Move1
+ call AddNTimes
+ ld a, Bank(Moves)
+ jp FarCopyBytes
+; 37ebb
+
+
+GetMoveByte: ; 37ebb
+ ld a, BANK(Moves)
+ jp GetFarByte
+; 37ec0
+
+
+Function0x37ec0: ; 37ec0
+ ld a, $3e
+ ld hl, $7d54
+ rst $8
+ ret
+; 37ec7
+
+
+Function0x37ec7: ; 37ec7
+ ld a, $3e
+ ld hl, $7d71
+ rst $8
+ ret
+; 37ece
+
+
+Function0x37ece: ; 37ece
+ ld a, $3e
+ ld hl, $7d69
+ rst $8
+ ret
+; 37ed5
+
+
+Function0x37ed5: ; 37ed5
+; Related to mobile link battles.
+ push hl
+ push de
+ push bc
+ ld a, $13
+ ld hl, $6a44
+ rst $8
+ pop bc
+ pop de
+ pop hl
+ ret
+; 37ee2
+
+
+
diff --git a/battle/moves/move_effects.asm b/battle/moves/move_effects.asm
new file mode 100644
index 000000000..a17a9a7d5
--- /dev/null
+++ b/battle/moves/move_effects.asm
@@ -0,0 +1,2243 @@
+Pound:
+KarateChop:
+MegaPunch:
+Scratch:
+Vicegrip:
+Cut:
+WingAttack:
+Slam:
+VineWhip:
+MegaKick:
+HornAttack:
+Tackle:
+WaterGun:
+HydroPump:
+Surf:
+Peck:
+DrillPeck:
+Strength:
+RazorLeaf:
+RockThrow:
+EggBomb:
+Waterfall:
+Crabhammer:
+Slash:
+Aeroblast:
+Megahorn:
+CrossChop:
+Swift:
+FaintAttack:
+VitalThrow:
+JumpKick:
+HiJumpKick:
+QuickAttack:
+MachPunch:
+Extremespeed:
+NormalHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Sing:
+SleepPowder:
+Hypnosis:
+LovelyKiss:
+Spore:
+DoSleep:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ checksafeguard
+ sleeptarget
+ endmove
+
+PoisonSting:
+Smog:
+Sludge:
+SludgeBomb:
+PoisonHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ poisontarget
+ endmove
+
+Absorb:
+MegaDrain:
+LeechLife:
+GigaDrain:
+LeechHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ draintarget
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+FirePunch:
+Ember:
+Flamethrower:
+FireBlast:
+BurnHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ burntarget
+ endmove
+
+IcePunch:
+IceBeam:
+Blizzard:
+PowderSnow:
+FreezeHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ freezetarget
+ endmove
+
+Thunderpunch:
+BodySlam:
+Thundershock:
+Thunderbolt:
+Lick:
+ZapCannon:
+Spark:
+Dragonbreath:
+ParalyzeHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ paralyzetarget
+ endmove
+
+Selfdestruct:
+Explosion:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ selfdestruct
+ effect0x0b
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+DreamEater:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ eatdream
+ checkdestinybond
+ buildopponentrage
+ endmove
+
+MirrorMove:
+ checkobedience
+ usedmovetext
+ doturn
+ mirrormove
+ endmove
+
+Meditate:
+Sharpen:
+AttackUp:
+ checkobedience
+ usedmovetext
+ doturn
+ attackup
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+Harden:
+Withdraw:
+DefenseUp:
+ checkobedience
+ usedmovetext
+ doturn
+ defenseup
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+SpeedUp:
+ checkobedience
+ usedmovetext
+ doturn
+ speedup
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+Growth:
+SpecialAttackUp:
+ checkobedience
+ usedmovetext
+ doturn
+ specialattackup
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+SpecialDefenseUp:
+ checkobedience
+ usedmovetext
+ doturn
+ specialdefenseup
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+AccuracyUp:
+ checkobedience
+ usedmovetext
+ doturn
+ accuracyup
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+DoubleTeam:
+Minimize:
+EvasionUp:
+ checkobedience
+ usedmovetext
+ doturn
+ effect0x0a
+ evasionup
+ effect0x92
+ effect0xa7
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+SwordsDance:
+AttackUp2:
+ checkobedience
+ usedmovetext
+ doturn
+ attackup2
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+Barrier:
+AcidArmor:
+DefenseUp2:
+ checkobedience
+ usedmovetext
+ doturn
+ defenseup2
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+Agility:
+SpeedUp2:
+ checkobedience
+ usedmovetext
+ doturn
+ speedup2
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+SpecialAttackUp2:
+ checkobedience
+ usedmovetext
+ doturn
+ specialattackup2
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+Amnesia:
+SpecialDefenseUp2:
+ checkobedience
+ usedmovetext
+ doturn
+ specialdefenseup2
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+AccuracyUp2:
+ checkobedience
+ usedmovetext
+ doturn
+ accuracyup2
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+EvasionUp2:
+ checkobedience
+ usedmovetext
+ doturn
+ evasionup2
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+Growl:
+AttackDown:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ attackdown
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+TailWhip:
+Leer:
+DefenseDown:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ defensedown
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+StringShot:
+SpeedDown:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ speeddown
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+SpecialAttackDown:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ specialattackdown
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+SpecialDefenseDown:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ specialdefensedown
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+SandAttack:
+Smokescreen:
+Kinesis:
+Flash:
+AccuracyDown:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ accuracydown
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+SweetScent:
+EvasionDown:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ evasiondown
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+Charm:
+AttackDown2:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ attackdown2
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+Screech:
+DefenseDown2:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ defensedown2
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+CottonSpore:
+ScaryFace:
+SpeedDown2:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ speeddown2
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+SpecialAttackDown2:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ specialattackdown2
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+SpecialDefenseDown2:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ specialdefensedown2
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+AccuracyDown2:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ accuracydown2
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+EvasionDown2:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ evasiondown2
+ effect0x0a
+ effect0x91
+ effect0x0c
+ statmessagetarget
+ statdownfailtext
+ endmove
+
+AuroraBeam:
+AttackDownHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ attackdown
+ statmessagetarget
+ endmove
+
+Acid:
+IronTail:
+RockSmash:
+DefenseDownHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ effectchance
+ defensedown
+ statmessagetarget
+ endmove
+
+Bubblebeam:
+Constrict:
+Bubble:
+IcyWind:
+SpeedDownHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ speeddown
+ statmessagetarget
+ endmove
+
+SpecialAttackDownHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ specialattackdown
+ statmessagetarget
+ endmove
+
+PsychicM:
+Crunch:
+ShadowBall:
+SpecialDefenseDownHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ specialdefensedown
+ statmessagetarget
+ endmove
+
+MudSlap:
+Octazooka:
+AccuracyDownHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ accuracydown
+ statmessagetarget
+ endmove
+
+EvasionDownHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ evasiondown
+ statmessagetarget
+ endmove
+
+SteelWing:
+DefenseUpHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ defenseup
+ statmessageuser
+ endmove
+
+MetalClaw:
+AttackUpHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ attackup
+ statmessageuser
+ endmove
+
+Ancientpower:
+AllUpHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ allstatsup
+ endmove
+
+PayDay:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ payday
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Conversion:
+ checkobedience
+ usedmovetext
+ doturn
+ conversion
+ endmove
+
+Haze:
+ checkobedience
+ usedmovetext
+ doturn
+ resetstats
+ endmove
+
+Bide:
+ storeenergy
+ checkobedience
+ doturn
+ usedmovetext
+ unleashenergy
+ effect0xa3
+ checkhit
+ hittarget
+ effect0xa5
+ checkfaint
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Thrash:
+PetalDance:
+Outrage:
+Rampage:
+ checkrampage
+ checkobedience
+ doturn
+ rampage
+ usedmovetext
+ checkhit
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ clearmissdamage
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Whirlwind:
+Roar:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ forceswitch
+ endmove
+
+Doubleslap:
+CometPunch:
+FuryAttack:
+PinMissile:
+SpikeCannon:
+Barrage:
+FurySwipes:
+BoneRush:
+DoubleKick:
+Bonemerang:
+MultiHit:
+ checkobedience
+ usedmovetext
+ doturn
+ startloop
+ effect0x0a
+ checkhit
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ clearmissdamage
+ effect0x0b
+ resulttext
+ checkfaint
+ criticaltext
+ cleartext
+ supereffectivelooptext
+ checkdestinybond
+ buildopponentrage
+ endloop
+ effect0x0c
+ kingsrock
+ endmove
+
+Twineedle:
+PoisonMultiHit:
+ checkobedience
+ usedmovetext
+ doturn
+ startloop
+ effect0x0a
+ checkhit
+ effectchance
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ clearmissdamage
+ effect0x0b
+ resulttext
+ checkfaint
+ criticaltext
+ cleartext
+ supereffectivelooptext
+ checkdestinybond
+ buildopponentrage
+ endloop
+ effect0x0c
+ kingsrock
+ poisontarget
+ endmove
+
+RollingKick:
+Headbutt:
+Bite:
+LowKick:
+BoneClub:
+RockSlide:
+HyperFang:
+FlinchHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ flinchtarget
+ endmove
+
+Guillotine:
+HornDrill:
+Fissure:
+OHKOHit:
+ checkobedience
+ usedmovetext
+ doturn
+ stab
+ ohko
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ endmove
+
+TakeDown:
+DoubleEdge:
+Submission:
+Struggle:
+RecoilHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ recoil
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Mist:
+ checkobedience
+ usedmovetext
+ doturn
+ mist
+ endmove
+
+FocusEnergy:
+CriticalUp:
+ checkobedience
+ usedmovetext
+ doturn
+ focusenergy
+ endmove
+
+Supersonic:
+ConfuseRay:
+SweetKiss:
+DoConfuse:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ checksafeguard
+ confuse
+ endmove
+
+Psybeam:
+Confusion:
+DizzyPunch:
+Dynamicpunch:
+ConfuseHit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ confusetarget
+ endmove
+
+Recover:
+Softboiled:
+Rest:
+MilkDrink:
+Heal:
+ checkobedience
+ usedmovetext
+ doturn
+ heal
+ endmove
+
+Transform:
+ checkobedience
+ usedmovetext
+ doturn
+ transform
+ endmove
+
+LightScreen:
+Reflect:
+Screen:
+ checkobedience
+ usedmovetext
+ doturn
+ screen
+ endmove
+
+TriAttack:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ tristatuschance
+ endmove
+
+Toxic:
+Poisonpowder:
+PoisonGas:
+DoPoison:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ stab
+ checksafeguard
+ poison
+ endmove
+
+StunSpore:
+ThunderWave:
+Glare:
+DoParalyze:
+ checkobedience
+ usedmovetext
+ doturn
+ stab
+ checkhit
+ checksafeguard
+ paralyze
+ endmove
+
+SkyAttack:
+ checkcharge
+ checkobedience
+ doturn
+ charge
+ usedmovetext
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ flinchtarget
+ kingsrock
+ endmove
+
+Substitute:
+ checkobedience
+ usedmovetext
+ doturn
+ substitute
+ endmove
+
+HyperBeam:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ rechargenextturn
+ checkdestinybond
+ buildopponentrage
+ endmove
+
+Rage:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ checkhit
+ ragedamage
+ damagevariation
+ hittarget
+ resulttext
+ rage
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Mimic:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ mimic
+ endmove
+
+Metronome:
+ checkobedience
+ usedmovetext
+ doturn
+ metronome
+ endmove
+
+LeechSeed:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ leechseed
+ endmove
+
+Splash:
+ checkobedience
+ usedmovetext
+ doturn
+ splash
+ endmove
+
+Disable:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ disable
+ endmove
+
+RazorWind:
+ checkcharge
+ checkobedience
+ doturn
+ charge
+ usedmovetext
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Fly:
+Dig:
+ checkcharge
+ checkobedience
+ doturn
+ charge
+ usedmovetext
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effect0x0b
+ effect0x0c
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Bind:
+Wrap:
+FireSpin:
+Clamp:
+Whirlpool:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ clearmissdamage
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ traptarget
+ endmove
+
+SuperFang:
+Sonicboom:
+DragonRage:
+SeismicToss:
+NightShade:
+Psywave:
+StaticDamage:
+ checkobedience
+ usedmovetext
+ doturn
+ constantdamage
+ checkhit
+ effect0xa3
+ hittarget
+ resulttext
+ checkfaint
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Flail:
+Reversal:
+ checkobedience
+ usedmovetext
+ doturn
+ constantdamage
+ stab
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Counter:
+ checkobedience
+ usedmovetext
+ doturn
+ counter
+ hittarget
+ resulttext
+ checkfaint
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Encore:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ encore
+ endmove
+
+PainSplit:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ painsplit
+ endmove
+
+Snore:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ snore
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ flinchtarget
+ kingsrock
+ endmove
+
+Conversion2:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ conversion2
+ endmove
+
+MindReader:
+LockOn:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ lockon
+ endmove
+
+Sketch:
+ checkobedience
+ usedmovetext
+ doturn
+ sketch
+ endmove
+
+DefrostOpponent:
+ checkobedience
+ usedmovetext
+ doturn
+ defrostopponent
+ endmove
+
+SleepTalk:
+ checkobedience
+ usedmovetext
+ doturn
+ sleeptalk
+ endmove
+
+DestinyBond:
+ checkobedience
+ usedmovetext
+ doturn
+ destinybond
+ endmove
+
+Spite:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ spite
+ endmove
+
+FalseSwipe:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ falseswipe
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+HealBell:
+ checkobedience
+ usedmovetext
+ doturn
+ healbell
+ endmove
+
+TripleKick:
+ checkobedience
+ usedmovetext
+ doturn
+ startloop
+ effect0x0a
+ checkhit
+ critical
+ damagestats
+ damagecalc
+ triplekick
+ stab
+ damagevariation
+ clearmissdamage
+ effect0x0b
+ resulttext
+ checkfaint
+ criticaltext
+ cleartext
+ supereffectivelooptext
+ checkdestinybond
+ buildopponentrage
+ kickcounter
+ endloop
+ effect0x0c
+ kingsrock
+ endmove
+
+Thief:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ thief
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+SpiderWeb:
+MeanLook:
+ checkobedience
+ usedmovetext
+ doturn
+ arenatrap
+ endmove
+
+Nightmare:
+ checkobedience
+ usedmovetext
+ doturn
+ nightmare
+ endmove
+
+FlameWheel:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ defrost
+ checkdestinybond
+ buildopponentrage
+ burntarget
+ endmove
+
+Curse:
+ checkobedience
+ usedmovetext
+ doturn
+ curse
+ endmove
+
+Protect:
+Detect:
+ checkobedience
+ usedmovetext
+ doturn
+ protect
+ endmove
+
+Spikes:
+ checkobedience
+ usedmovetext
+ doturn
+ spikes
+ endmove
+
+Foresight:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ foresight
+ endmove
+
+PerishSong:
+ checkobedience
+ usedmovetext
+ doturn
+ perishsong
+ endmove
+
+Sandstorm:
+ checkobedience
+ usedmovetext
+ doturn
+ startsandstorm
+ endmove
+
+Endure:
+ checkobedience
+ usedmovetext
+ doturn
+ endure
+ endmove
+
+Rollout:
+ checkcurl
+ checkobedience
+ doturn
+ usedmovetext
+ critical
+ damagestats
+ damagecalc
+ stab
+ checkhit
+ rolloutpower
+ damagevariation
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Swagger:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ switchturn
+ attackup2
+ switchturn
+ effect0x0a
+ effect0x92
+ effect0x0c
+ resulttext
+ switchturn
+ statmessageuser
+ switchturn
+ confusetarget
+ endmove
+
+FuryCutter:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ checkhit
+ furycutter
+ damagevariation
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Attract:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ attract
+ endmove
+
+Return:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ happinesspower
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Present:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ critical
+ damagestats
+ present
+ damagecalc
+ stab
+ damagevariation
+ clearmissdamage
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Frustration:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ frustrationpower
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Safeguard:
+ checkobedience
+ usedmovetext
+ doturn
+ safeguard
+ endmove
+
+SacredFire:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ defrost
+ checkdestinybond
+ buildopponentrage
+ burntarget
+ endmove
+
+Magnitude:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ getmagnitude
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ doubleundergrounddamage
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+BatonPass:
+ checkobedience
+ usedmovetext
+ doturn
+ batonpass
+ endmove
+
+Pursuit:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ pursuit
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+RapidSpin:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ clearhazards
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+MorningSun:
+ checkobedience
+ usedmovetext
+ doturn
+ healmorn
+ endmove
+
+Synthesis:
+ checkobedience
+ usedmovetext
+ doturn
+ healday
+ endmove
+
+Moonlight:
+ checkobedience
+ usedmovetext
+ doturn
+ healnite
+ endmove
+
+HiddenPower:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ hiddenpower
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+RainDance:
+ checkobedience
+ usedmovetext
+ doturn
+ startrain
+ endmove
+
+SunnyDay:
+ checkobedience
+ usedmovetext
+ doturn
+ startsun
+ endmove
+
+FakeOut:
+ checkobedience
+ usedmovetext
+ doturn
+ checkhit
+ fakeout
+ hittarget
+ resulttext
+ endmove
+
+BellyDrum:
+ checkobedience
+ usedmovetext
+ doturn
+ bellydrum
+ endmove
+
+PsychUp:
+ checkobedience
+ usedmovetext
+ doturn
+ psychup
+ endmove
+
+MirrorCoat:
+ checkobedience
+ usedmovetext
+ doturn
+ mirrorcoat
+ hittarget
+ resulttext
+ checkfaint
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+SkullBash:
+ checkcharge
+ checkobedience
+ doturn
+ charge
+ usedmovetext
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endturn
+ defenseup
+ statmessageuser
+ endmove
+
+Twister:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ doubleflyingdamage
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ flinchtarget
+ endmove
+
+Earthquake:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ doubleundergrounddamage
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ endmove
+
+FutureSight:
+ checkfuturesight
+ checkobedience
+ usedmovetext
+ doturn
+ damagestats
+ damagecalc
+ futuresight
+ damagevariation
+ checkhit
+ effect0x0b
+ resulttext
+ checkfaint
+ checkdestinybond
+ buildopponentrage
+ endmove
+
+Gust:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ doubleflyingdamage
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ endmove
+
+Stomp:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ doubleminimizedamage
+ checkhit
+ effectchance
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ flinchtarget
+ endmove
+
+Solarbeam:
+ checkcharge
+ checkobedience
+ doturn
+ skipsuncharge
+ charge
+ usedmovetext
+ critical
+ damagestats
+ damagecalc
+ stab
+ damagevariation
+ checkhit
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ kingsrock
+ endmove
+
+Thunder:
+ checkobedience
+ usedmovetext
+ doturn
+ critical
+ damagestats
+ damagecalc
+ thunderaccuracy
+ checkhit
+ effectchance
+ stab
+ damagevariation
+ hittarget
+ resulttext
+ checkfaint
+ criticaltext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ paralyzetarget
+ endmove
+
+Teleport:
+ checkobedience
+ usedmovetext
+ doturn
+ teleport
+ endmove
+
+BeatUp:
+ checkobedience
+ usedmovetext
+ wait
+ doturn
+ startloop
+ effect0x0a
+ checkhit
+ critical
+ beatup
+ damagecalc
+ damagevariation
+ clearmissdamage
+ effect0x0b
+ resulttext
+ checkfaint
+ criticaltext
+ cleartext
+ supereffectivetext
+ checkdestinybond
+ buildopponentrage
+ endloop
+ effect0xa8
+ effect0x0c
+ kingsrock
+ endmove
+
+DefenseCurl:
+ checkobedience
+ usedmovetext
+ doturn
+ defenseup
+ curl
+ effect0x0a
+ effect0x92
+ effect0x0c
+ statmessageuser
+ statupfailtext
+ endmove
+
+
+
+
diff --git a/battle/moves/move_effects_pointers.asm b/battle/moves/move_effects_pointers.asm
new file mode 100644
index 000000000..4f955444a
--- /dev/null
+++ b/battle/moves/move_effects_pointers.asm
@@ -0,0 +1,158 @@
+ dw NormalHit
+ dw DoSleep
+ dw PoisonHit
+ dw LeechHit
+ dw BurnHit
+ dw FreezeHit
+ dw ParalyzeHit
+ dw Explosion
+ dw DreamEater
+ dw MirrorMove
+ dw AttackUp
+ dw DefenseUp
+ dw SpeedUp
+ dw Growth
+ dw SpecialDefenseUp
+ dw AccuracyUp
+ dw EvasionUp
+ dw NormalHit
+ dw Growl
+ dw DefenseDown
+ dw StringShot
+ dw SpecialAttackDown
+ dw SpecialDefenseDown
+ dw AccuracyDown
+ dw SweetScent
+ dw Haze
+ dw Bide
+ dw Rampage
+ dw Whirlwind
+ dw MultiHit
+ dw Conversion
+ dw FlinchHit
+ dw Heal
+ dw Toxic
+ dw PayDay
+ dw LightScreen
+ dw TriAttack
+ dw NormalHit
+ dw OHKOHit
+ dw RazorWind
+ dw SuperFang
+ dw StaticDamage
+ dw Bind
+ dw NormalHit
+ dw MultiHit
+ dw NormalHit
+ dw Mist
+ dw FocusEnergy
+ dw RecoilHit
+ dw DoConfuse
+ dw SwordsDance
+ dw DefenseUp2
+ dw Agility
+ dw SpecialAttackUp2
+ dw Amnesia
+ dw AccuracyUp2
+ dw EvasionUp2
+ dw Transform
+ dw Charm
+ dw Screech
+ dw SpeedDown2
+ dw SpecialAttackDown2
+ dw SpecialDefenseDown2
+ dw AccuracyDown2
+ dw EvasionDown2
+ dw Reflect
+ dw DoPoison
+ dw DoParalyze
+ dw AuroraBeam
+ dw DefenseDownHit
+ dw SpeedDownHit
+ dw SpecialAttackDownHit
+ dw SpecialDefenseDownHit
+ dw AccuracyDownHit
+ dw EvasionDownHit
+ dw SkyAttack
+ dw ConfuseHit
+ dw Twineedle
+ dw NormalHit
+ dw Substitute
+ dw HyperBeam
+ dw Rage
+ dw Mimic
+ dw Metronome
+ dw LeechSeed
+ dw Splash
+ dw Disable
+ dw StaticDamage
+ dw Psywave
+ dw Counter
+ dw Encore
+ dw PainSplit
+ dw Snore
+ dw Conversion2
+ dw LockOn
+ dw Sketch
+ dw DefrostOpponent
+ dw SleepTalk
+ dw DestinyBond
+ dw Reversal
+ dw Spite
+ dw FalseSwipe
+ dw HealBell
+ dw NormalHit
+ dw TripleKick
+ dw Thief
+ dw MeanLook
+ dw Nightmare
+ dw FlameWheel
+ dw Curse
+ dw NormalHit
+ dw Protect
+ dw Spikes
+ dw Foresight
+ dw PerishSong
+ dw Sandstorm
+ dw Endure
+ dw Rollout
+ dw Swagger
+ dw FuryCutter
+ dw Attract
+ dw Return
+ dw Present
+ dw Frustration
+ dw Safeguard
+ dw SacredFire
+ dw Magnitude
+ dw BatonPass
+ dw Pursuit
+ dw RapidSpin
+ dw NormalHit
+ dw NormalHit
+ dw MorningSun
+ dw Synthesis
+ dw Moonlight
+ dw HiddenPower
+ dw RainDance
+ dw SunnyDay
+ dw SteelWing
+ dw MetalClaw
+ dw Ancientpower
+ dw FakeOut
+ dw BellyDrum
+ dw PsychUp
+ dw MirrorCoat
+ dw SkullBash
+ dw Twister
+ dw Earthquake
+ dw FutureSight
+ dw Gust
+ dw Stomp
+ dw Solarbeam
+ dw Thunder
+ dw Teleport
+ dw BeatUp
+ dw Fly
+ dw DefenseCurl
+
diff --git a/battle/moves/moves.asm b/battle/moves/moves.asm
index c2b72d2c9..ee30cd1e7 100644
--- a/battle/moves/moves.asm
+++ b/battle/moves/moves.asm
@@ -1,257 +1,258 @@
; Characteristics of each move
; animation, effect, power, type, accuracy, PP, effect chance
-Move0:
- db POUND, $00, 40, NORMAL, $ff, 35, $00
+
Move1:
- db KARATE_CHOP, $00, 50, FIGHTING, $ff, 25, $00
- db DOUBLESLAP, $1d, 15, NORMAL, $d8, 10, $00
- db COMET_PUNCH, $1d, 18, NORMAL, $d8, 15, $00
- db MEGA_PUNCH, $00, 80, NORMAL, $d8, 20, $00
- db PAY_DAY, $22, 40, NORMAL, $ff, 20, $00
- db FIRE_PUNCH, $04, 75, FIRE, $ff, 15, $19
- db ICE_PUNCH, $05, 75, ICE, $ff, 15, $19
- db THUNDERPUNCH, $06, 75, ELECTRIC, $ff, 15, $19
- db SCRATCH, $00, 40, NORMAL, $ff, 35, $00
- db VICEGRIP, $00, 55, NORMAL, $ff, 30, $00
- db GUILLOTINE, $26, 0, NORMAL, $4c, 5, $00
- db RAZOR_WIND, $27, 80, NORMAL, $bf, 10, $00
- db SWORDS_DANCE, $32, 0, NORMAL, $ff, 30, $00
- db CUT, $00, 50, NORMAL, $f2, 30, $00
- db GUST, $95, 40, FLYING, $ff, 35, $00
- db WING_ATTACK, $00, 60, FLYING, $ff, 35, $00
- db WHIRLWIND, $1c, 0, NORMAL, $ff, 20, $00
- db FLY, $9b, 70, FLYING, $f2, 15, $00
- db BIND, $2a, 15, NORMAL, $bf, 20, $00
- db SLAM, $00, 80, NORMAL, $bf, 20, $00
- db VINE_WHIP, $00, 35, GRASS, $ff, 10, $00
- db STOMP, $96, 65, NORMAL, $ff, 20, $4c
- db DOUBLE_KICK, $2c, 30, FIGHTING, $ff, 30, $00
- db MEGA_KICK, $00, 120, NORMAL, $bf, 5, $00
- db JUMP_KICK, $2d, 70, FIGHTING, $f2, 25, $00
- db ROLLING_KICK, $1f, 60, FIGHTING, $d8, 15, $4c
- db SAND_ATTACK, $17, 0, GROUND, $ff, 15, $00
- db HEADBUTT, $1f, 70, NORMAL, $ff, 15, $4c
- db HORN_ATTACK, $00, 65, NORMAL, $ff, 25, $00
- db FURY_ATTACK, $1d, 15, NORMAL, $d8, 20, $00
- db HORN_DRILL, $26, 1, NORMAL, $4c, 5, $00
- db TACKLE, $00, 35, NORMAL, $f2, 35, $00
- db BODY_SLAM, $06, 85, NORMAL, $ff, 15, $4c
- db WRAP, $2a, 15, NORMAL, $d8, 20, $00
- db TAKE_DOWN, $30, 90, NORMAL, $d8, 20, $00
- db THRASH, $1b, 90, NORMAL, $ff, 20, $00
- db DOUBLE_EDGE, $30, 120, NORMAL, $ff, 15, $00
- db TAIL_WHIP, $13, 0, NORMAL, $ff, 30, $00
- db POISON_STING, $02, 15, POISON, $ff, 35, $4c
- db TWINEEDLE, $4d, 25, BUG, $ff, 20, $33
- db PIN_MISSILE, $1d, 14, BUG, $d8, 20, $00
- db LEER, $13, 0, NORMAL, $ff, 30, $00
- db BITE, $1f, 60, DARK, $ff, 25, $4c
- db GROWL, $12, 0, NORMAL, $ff, 40, $00
- db ROAR, $1c, 0, NORMAL, $ff, 20, $00
- db SING, $01, 0, NORMAL, $8c, 15, $00
- db SUPERSONIC, $31, 0, NORMAL, $8c, 20, $00
- db SONICBOOM, $29, 20, NORMAL, $e5, 20, $00
- db DISABLE, $56, 0, NORMAL, $8c, 20, $00
- db ACID, $45, 40, POISON, $ff, 30, $19
- db EMBER, $04, 40, FIRE, $ff, 25, $19
- db FLAMETHROWER, $04, 95, FIRE, $ff, 15, $19
- db MIST, $2e, 0, ICE, $ff, 30, $00
- db WATER_GUN, $00, 40, WATER, $ff, 25, $00
- db HYDRO_PUMP, $00, 120, WATER, $cc, 5, $00
- db SURF, $00, 95, WATER, $ff, 15, $00
- db ICE_BEAM, $05, 95, ICE, $ff, 10, $19
- db BLIZZARD, $05, 120, ICE, $b2, 5, $19
- db PSYBEAM, $4c, 65, PSYCHIC, $ff, 20, $19
- db BUBBLEBEAM, $46, 65, WATER, $ff, 20, $19
- db AURORA_BEAM, $44, 65, ICE, $ff, 20, $19
- db HYPER_BEAM, $50, 150, NORMAL, $e5, 5, $00
- db PECK, $00, 35, FLYING, $ff, 35, $00
- db DRILL_PECK, $00, 80, FLYING, $ff, 20, $00
- db SUBMISSION, $30, 80, FIGHTING, $cc, 25, $00
- db LOW_KICK, $1f, 50, FIGHTING, $e5, 20, $4c
- db COUNTER, $59, 1, FIGHTING, $ff, 20, $00
- db SEISMIC_TOSS, $57, 1, FIGHTING, $ff, 20, $00
- db STRENGTH, $00, 80, NORMAL, $ff, 15, $00
- db ABSORB, $03, 20, GRASS, $ff, 20, $00
- db MEGA_DRAIN, $03, 40, GRASS, $ff, 10, $00
- db LEECH_SEED, $54, 0, GRASS, $e5, 10, $00
- db GROWTH, $0d, 0, NORMAL, $ff, 40, $00
- db RAZOR_LEAF, $00, 55, GRASS, $f2, 25, $00
- db SOLARBEAM, $97, 120, GRASS, $ff, 10, $00
- db POISONPOWDER, $42, 0, POISON, $bf, 35, $00
- db STUN_SPORE, $43, 0, GRASS, $bf, 30, $00
- db SLEEP_POWDER, $01, 0, GRASS, $bf, 15, $00
- db PETAL_DANCE, $1b, 70, GRASS, $ff, 20, $00
- db STRING_SHOT, $14, 0, BUG, $f2, 40, $00
- db DRAGON_RAGE, $29, 40, DRAGON, $ff, 10, $00
- db FIRE_SPIN, $2a, 15, FIRE, $b2, 15, $00
- db THUNDERSHOCK, $06, 40, ELECTRIC, $ff, 30, $19
- db THUNDERBOLT, $06, 95, ELECTRIC, $ff, 15, $19
- db THUNDER_WAVE, $43, 0, ELECTRIC, $ff, 20, $00
- db THUNDER, $98, 120, ELECTRIC, $b2, 10, $4c
- db ROCK_THROW, $00, 50, ROCK, $e5, 15, $00
- db EARTHQUAKE, $93, 100, GROUND, $ff, 10, $00
- db FISSURE, $26, 1, GROUND, $4c, 5, $00
- db DIG, $9b, 60, GROUND, $ff, 10, $00
- db TOXIC, $21, 0, POISON, $d8, 10, $00
- db CONFUSION, $4c, 50, PSYCHIC, $ff, 25, $19
- db PSYCHIC_M, $48, 90, PSYCHIC, $ff, 10, $19
- db HYPNOSIS, $01, 0, PSYCHIC, $99, 20, $00
- db MEDITATE, $0a, 0, PSYCHIC, $ff, 40, $00
- db AGILITY, $34, 0, PSYCHIC, $ff, 30, $00
- db QUICK_ATTACK, $67, 40, NORMAL, $ff, 30, $00
- db RAGE, $51, 20, NORMAL, $ff, 20, $00
- db TELEPORT, $99, 0, PSYCHIC, $ff, 20, $00
- db NIGHT_SHADE, $57, 1, GHOST, $ff, 15, $00
- db MIMIC, $52, 0, NORMAL, $ff, 10, $00
- db SCREECH, $3b, 0, NORMAL, $d8, 40, $00
- db DOUBLE_TEAM, $10, 0, NORMAL, $ff, 15, $00
- db RECOVER, $20, 0, NORMAL, $ff, 20, $00
- db HARDEN, $0b, 0, NORMAL, $ff, 30, $00
- db MINIMIZE, $10, 0, NORMAL, $ff, 20, $00
- db SMOKESCREEN, $17, 0, NORMAL, $ff, 20, $00
- db CONFUSE_RAY, $31, 0, GHOST, $ff, 10, $00
- db WITHDRAW, $0b, 0, WATER, $ff, 40, $00
- db DEFENSE_CURL, $9c, 0, NORMAL, $ff, 40, $00
- db BARRIER, $33, 0, PSYCHIC, $ff, 30, $00
- db LIGHT_SCREEN, $23, 0, PSYCHIC, $ff, 30, $00
- db HAZE, $19, 0, ICE, $ff, 30, $00
- db REFLECT, $41, 0, PSYCHIC, $ff, 20, $00
- db FOCUS_ENERGY, $2f, 0, NORMAL, $ff, 30, $00
- db BIDE, $1a, 0, NORMAL, $ff, 10, $00
- db METRONOME, $53, 0, NORMAL, $ff, 10, $00
- db MIRROR_MOVE, $09, 0, FLYING, $ff, 20, $00
- db SELFDESTRUCT, $07, 200, NORMAL, $ff, 5, $00
- db EGG_BOMB, $00, 100, NORMAL, $bf, 10, $00
- db LICK, $06, 20, GHOST, $ff, 30, $4c
- db SMOG, $02, 20, POISON, $b2, 20, $66
- db SLUDGE, $02, 65, POISON, $ff, 20, $4c
- db BONE_CLUB, $1f, 65, GROUND, $d8, 20, $19
- db FIRE_BLAST, $04, 120, FIRE, $d8, 5, $19
- db WATERFALL, $00, 80, WATER, $ff, 15, $00
- db CLAMP, $2a, 35, WATER, $bf, 10, $00
- db SWIFT, $11, 60, NORMAL, $ff, 20, $00
- db SKULL_BASH, $91, 100, NORMAL, $ff, 15, $00
- db SPIKE_CANNON, $1d, 20, NORMAL, $ff, 15, $00
- db CONSTRICT, $46, 10, NORMAL, $ff, 35, $19
- db AMNESIA, $36, 0, PSYCHIC, $ff, 20, $00
- db KINESIS, $17, 0, PSYCHIC, $cc, 15, $00
- db SOFTBOILED, $20, 0, NORMAL, $ff, 10, $00
- db HI_JUMP_KICK, $2d, 85, FIGHTING, $e5, 20, $00
- db GLARE, $43, 0, NORMAL, $bf, 30, $00
- db DREAM_EATER, $08, 100, PSYCHIC, $ff, 15, $00
- db POISON_GAS, $42, 0, POISON, $8c, 40, $00
- db BARRAGE, $1d, 15, NORMAL, $d8, 20, $00
- db LEECH_LIFE, $03, 20, BUG, $ff, 15, $00
- db LOVELY_KISS, $01, 0, NORMAL, $bf, 10, $00
- db SKY_ATTACK, $4b, 140, FLYING, $e5, 5, $00
- db TRANSFORM, $39, 0, NORMAL, $ff, 10, $00
- db BUBBLE, $46, 20, WATER, $ff, 30, $19
- db DIZZY_PUNCH, $4c, 70, NORMAL, $ff, 10, $33
- db SPORE, $01, 0, GRASS, $ff, 15, $00
- db FLASH, $17, 0, NORMAL, $b2, 20, $00
- db PSYWAVE, $58, 1, PSYCHIC, $cc, 15, $00
- db SPLASH, $55, 0, NORMAL, $ff, 40, $00
- db ACID_ARMOR, $33, 0, POISON, $ff, 40, $00
- db CRABHAMMER, $00, 90, WATER, $d8, 10, $00
- db EXPLOSION, $07, 250, NORMAL, $ff, 5, $00
- db FURY_SWIPES, $1d, 18, NORMAL, $cc, 15, $00
- db BONEMERANG, $2c, 50, GROUND, $e5, 10, $00
- db REST, $20, 0, PSYCHIC, $ff, 10, $00
- db ROCK_SLIDE, $1f, 75, ROCK, $e5, 10, $4c
- db HYPER_FANG, $1f, 80, NORMAL, $e5, 15, $19
- db SHARPEN, $0a, 0, NORMAL, $ff, 30, $00
- db CONVERSION, $1e, 0, NORMAL, $ff, 30, $00
- db TRI_ATTACK, $24, 80, NORMAL, $ff, 10, $33
- db SUPER_FANG, $28, 1, NORMAL, $e5, 10, $00
- db SLASH, $00, 70, NORMAL, $ff, 20, $00
- db SUBSTITUTE, $4f, 0, NORMAL, $ff, 10, $00
- db STRUGGLE, $30, 50, NORMAL, $ff, 1, $00
- db SKETCH, $5f, 0, NORMAL, $ff, 1, $00
- db TRIPLE_KICK, $68, 10, FIGHTING, $e5, 10, $00
- db THIEF, $69, 40, DARK, $ff, 10, $ff
- db SPIDER_WEB, $6a, 0, BUG, $ff, 10, $00
- db MIND_READER, $5e, 0, NORMAL, $ff, 5, $00
- db NIGHTMARE, $6b, 0, GHOST, $ff, 15, $00
- db FLAME_WHEEL, $6c, 60, FIRE, $ff, 25, $19
- db SNORE, $5c, 40, NORMAL, $ff, 15, $4c
- db CURSE, $6d, 0, CURSE_T, $ff, 10, $00
- db FLAIL, $63, 1, NORMAL, $ff, 15, $00
- db CONVERSION2, $5d, 0, NORMAL, $ff, 30, $00
- db AEROBLAST, $00, 100, FLYING, $f2, 5, $00
- db COTTON_SPORE, $3c, 0, GRASS, $d8, 40, $00
- db REVERSAL, $63, 1, FIGHTING, $ff, 15, $00
- db SPITE, $64, 0, GHOST, $ff, 10, $00
- db POWDER_SNOW, $05, 40, ICE, $ff, 25, $19
- db PROTECT, $6f, 0, NORMAL, $ff, 10, $00
- db MACH_PUNCH, $67, 40, FIGHTING, $ff, 30, $00
- db SCARY_FACE, $3c, 0, NORMAL, $e5, 10, $00
- db FAINT_ATTACK, $11, 60, DARK, $ff, 20, $00
- db SWEET_KISS, $31, 0, NORMAL, $bf, 10, $00
- db BELLY_DRUM, $8e, 0, NORMAL, $ff, 10, $00
- db SLUDGE_BOMB, $02, 90, POISON, $ff, 10, $4c
- db MUD_SLAP, $49, 20, GROUND, $ff, 10, $ff
- db OCTAZOOKA, $49, 65, WATER, $d8, 10, $7f
- db SPIKES, $70, 0, GROUND, $ff, 20, $00
- db ZAP_CANNON, $06, 100, ELECTRIC, $7f, 5, $ff
- db FORESIGHT, $71, 0, NORMAL, $ff, 40, $00
- db DESTINY_BOND, $62, 0, GHOST, $ff, 5, $00
- db PERISH_SONG, $72, 0, NORMAL, $ff, 5, $00
- db ICY_WIND, $46, 55, ICE, $f2, 15, $ff
- db DETECT, $6f, 0, FIGHTING, $ff, 5, $00
- db BONE_RUSH, $1d, 25, GROUND, $cc, 10, $00
- db LOCK_ON, $5e, 0, NORMAL, $ff, 5, $00
- db OUTRAGE, $1b, 90, DRAGON, $ff, 15, $00
- db SANDSTORM, $73, 0, ROCK, $ff, 10, $00
- db GIGA_DRAIN, $03, 60, GRASS, $ff, 5, $00
- db ENDURE, $74, 0, NORMAL, $ff, 10, $00
- db CHARM, $3a, 0, NORMAL, $ff, 20, $00
- db ROLLOUT, $75, 30, ROCK, $e5, 20, $00
- db FALSE_SWIPE, $65, 40, NORMAL, $ff, 40, $00
- db SWAGGER, $76, 0, NORMAL, $e5, 15, $ff
- db MILK_DRINK, $20, 0, NORMAL, $ff, 10, $00
- db SPARK, $06, 65, ELECTRIC, $ff, 20, $4c
- db FURY_CUTTER, $77, 10, BUG, $f2, 20, $00
- db STEEL_WING, $8a, 70, STEEL, $e5, 25, $19
- db MEAN_LOOK, $6a, 0, NORMAL, $ff, 5, $00
- db ATTRACT, $78, 0, NORMAL, $ff, 15, $00
- db SLEEP_TALK, $61, 0, NORMAL, $ff, 10, $00
- db HEAL_BELL, $66, 0, NORMAL, $ff, 5, $00
- db RETURN, $79, 1, NORMAL, $ff, 20, $00
- db PRESENT, $7a, 1, NORMAL, $e5, 15, $00
- db FRUSTRATION, $7b, 1, NORMAL, $ff, 20, $00
- db SAFEGUARD, $7c, 0, NORMAL, $ff, 25, $00
- db PAIN_SPLIT, $5b, 0, NORMAL, $ff, 20, $00
- db SACRED_FIRE, $7d, 100, FIRE, $f2, 5, $7f
- db MAGNITUDE, $7e, 1, GROUND, $ff, 30, $00
- db DYNAMICPUNCH, $4c, 100, FIGHTING, $7f, 5, $ff
- db MEGAHORN, $00, 120, BUG, $d8, 10, $00
- db DRAGONBREATH, $06, 60, DRAGON, $ff, 20, $4c
- db BATON_PASS, $7f, 0, NORMAL, $ff, 40, $00
- db ENCORE, $5a, 0, NORMAL, $ff, 5, $00
- db PURSUIT, $80, 40, DARK, $ff, 20, $00
- db RAPID_SPIN, $81, 20, NORMAL, $ff, 40, $00
- db SWEET_SCENT, $18, 0, NORMAL, $ff, 20, $00
- db IRON_TAIL, $45, 100, STEEL, $bf, 15, $4c
- db METAL_CLAW, $8b, 50, STEEL, $f2, 35, $19
- db VITAL_THROW, $11, 70, FIGHTING, $ff, 10, $00
- db MORNING_SUN, $84, 0, NORMAL, $ff, 5, $00
- db SYNTHESIS, $85, 0, GRASS, $ff, 5, $00
- db MOONLIGHT, $86, 0, NORMAL, $ff, 5, $00
- db HIDDEN_POWER, $87, 1, NORMAL, $ff, 15, $00
- db CROSS_CHOP, $00, 100, FIGHTING, $cc, 5, $00
- db TWISTER, $92, 40, DRAGON, $ff, 20, $33
- db RAIN_DANCE, $88, 0, WATER, $e5, 5, $00
- db SUNNY_DAY, $89, 0, FIRE, $e5, 5, $00
- db CRUNCH, $48, 80, DARK, $ff, 15, $33
- db MIRROR_COAT, $90, 1, PSYCHIC, $ff, 20, $00
- db PSYCH_UP, $8f, 0, NORMAL, $ff, 10, $00
- db EXTREMESPEED, $67, 80, NORMAL, $ff, 5, $00
- db ANCIENTPOWER, $8c, 60, ROCK, $ff, 5, $19
- db SHADOW_BALL, $48, 80, GHOST, $ff, 15, $33
- db FUTURE_SIGHT, $94, 80, PSYCHIC, $e5, 15, $00
- db ROCK_SMASH, $45, 20, FIGHTING, $ff, 15, $7f
- db WHIRLPOOL, $2a, 15, WATER, $b2, 15, $00
- db BEAT_UP, $9a, 10, DARK, $ff, 10, $00
+ db POUND, EFFECT_NORMAL_HIT, 40, NORMAL, $ff, 35, $00
+Move2:
+ db KARATE_CHOP, EFFECT_NORMAL_HIT, 50, FIGHTING, $ff, 25, $00
+ db DOUBLESLAP, EFFECT_MULTI_HIT, 15, NORMAL, $d8, 10, $00
+ db COMET_PUNCH, EFFECT_MULTI_HIT, 18, NORMAL, $d8, 15, $00
+ db MEGA_PUNCH, EFFECT_NORMAL_HIT, 80, NORMAL, $d8, 20, $00
+ db PAY_DAY, EFFECT_PAY_DAY, 40, NORMAL, $ff, 20, $00
+ db FIRE_PUNCH, EFFECT_BURN_HIT, 75, FIRE, $ff, 15, $19
+ db ICE_PUNCH, EFFECT_FREEZE_HIT, 75, ICE, $ff, 15, $19
+ db THUNDERPUNCH, EFFECT_PARALYZE_HIT, 75, ELECTRIC, $ff, 15, $19
+ db SCRATCH, EFFECT_NORMAL_HIT, 40, NORMAL, $ff, 35, $00
+ db VICEGRIP, EFFECT_NORMAL_HIT, 55, NORMAL, $ff, 30, $00
+ db GUILLOTINE, EFFECT_OHKO, 0, NORMAL, $4c, 5, $00
+ db RAZOR_WIND, EFFECT_RAZOR_WIND, 80, NORMAL, $bf, 10, $00
+ db SWORDS_DANCE, EFFECT_ATTACK_UP_2, 0, NORMAL, $ff, 30, $00
+ db CUT, EFFECT_NORMAL_HIT, 50, NORMAL, $f2, 30, $00
+ db GUST, EFFECT_GUST, 40, FLYING, $ff, 35, $00
+ db WING_ATTACK, EFFECT_NORMAL_HIT, 60, FLYING, $ff, 35, $00
+ db WHIRLWIND, EFFECT_WHIRLWIND, 0, NORMAL, $ff, 20, $00
+ db FLY, EFFECT_FLY, 70, FLYING, $f2, 15, $00
+ db BIND, EFFECT_BIND, 15, NORMAL, $bf, 20, $00
+ db SLAM, EFFECT_NORMAL_HIT, 80, NORMAL, $bf, 20, $00
+ db VINE_WHIP, EFFECT_NORMAL_HIT, 35, GRASS, $ff, 10, $00
+ db STOMP, EFFECT_STOMP, 65, NORMAL, $ff, 20, $4c
+ db DOUBLE_KICK, EFFECT_DOUBLE_HIT, 30, FIGHTING, $ff, 30, $00
+ db MEGA_KICK, EFFECT_NORMAL_HIT, 120, NORMAL, $bf, 5, $00
+ db JUMP_KICK, EFFECT_JUMP_KICK, 70, FIGHTING, $f2, 25, $00
+ db ROLLING_KICK, EFFECT_FLINCH_HIT, 60, FIGHTING, $d8, 15, $4c
+ db SAND_ATTACK, EFFECT_ACCURACY_DOWN, 0, GROUND, $ff, 15, $00
+ db HEADBUTT, EFFECT_FLINCH_HIT, 70, NORMAL, $ff, 15, $4c
+ db HORN_ATTACK, EFFECT_NORMAL_HIT, 65, NORMAL, $ff, 25, $00
+ db FURY_ATTACK, EFFECT_MULTI_HIT, 15, NORMAL, $d8, 20, $00
+ db HORN_DRILL, EFFECT_OHKO, 1, NORMAL, $4c, 5, $00
+ db TACKLE, EFFECT_NORMAL_HIT, 35, NORMAL, $f2, 35, $00
+ db BODY_SLAM, EFFECT_PARALYZE_HIT, 85, NORMAL, $ff, 15, $4c
+ db WRAP, EFFECT_BIND, 15, NORMAL, $d8, 20, $00
+ db TAKE_DOWN, EFFECT_RECOIL_HIT, 90, NORMAL, $d8, 20, $00
+ db THRASH, EFFECT_RAMPAGE, 90, NORMAL, $ff, 20, $00
+ db DOUBLE_EDGE, EFFECT_RECOIL_HIT, 120, NORMAL, $ff, 15, $00
+ db TAIL_WHIP, EFFECT_DEFENSE_DOWN, 0, NORMAL, $ff, 30, $00
+ db POISON_STING, EFFECT_POISON_HIT, 15, POISON, $ff, 35, $4c
+ db TWINEEDLE, EFFECT_TWINEEDLE, 25, BUG, $ff, 20, $33
+ db PIN_MISSILE, EFFECT_MULTI_HIT, 14, BUG, $d8, 20, $00
+ db LEER, EFFECT_DEFENSE_DOWN, 0, NORMAL, $ff, 30, $00
+ db BITE, EFFECT_FLINCH_HIT, 60, DARK, $ff, 25, $4c
+ db GROWL, EFFECT_ATTACK_DOWN, 0, NORMAL, $ff, 40, $00
+ db ROAR, EFFECT_WHIRLWIND, 0, NORMAL, $ff, 20, $00
+ db SING, EFFECT_SLEEP, 0, NORMAL, $8c, 15, $00
+ db SUPERSONIC, EFFECT_CONFUSE, 0, NORMAL, $8c, 20, $00
+ db SONICBOOM, EFFECT_STATIC_DAMAGE, 20, NORMAL, $e5, 20, $00
+ db DISABLE, EFFECT_DISABLE, 0, NORMAL, $8c, 20, $00
+ db ACID, EFFECT_DEFENSE_DOWN_HIT, 40, POISON, $ff, 30, $19
+ db EMBER, EFFECT_BURN_HIT, 40, FIRE, $ff, 25, $19
+ db FLAMETHROWER, EFFECT_BURN_HIT, 95, FIRE, $ff, 15, $19
+ db MIST, EFFECT_MIST, 0, ICE, $ff, 30, $00
+ db WATER_GUN, EFFECT_NORMAL_HIT, 40, WATER, $ff, 25, $00
+ db HYDRO_PUMP, EFFECT_NORMAL_HIT, 120, WATER, $cc, 5, $00
+ db SURF, EFFECT_NORMAL_HIT, 95, WATER, $ff, 15, $00
+ db ICE_BEAM, EFFECT_FREEZE_HIT, 95, ICE, $ff, 10, $19
+ db BLIZZARD, EFFECT_FREEZE_HIT, 120, ICE, $b2, 5, $19
+ db PSYBEAM, EFFECT_CONFUSE_HIT, 65, PSYCHIC, $ff, 20, $19
+ db BUBBLEBEAM, EFFECT_SPEED_DOWN_HIT, 65, WATER, $ff, 20, $19
+ db AURORA_BEAM, EFFECT_ATTACK_DOWN_HIT, 65, ICE, $ff, 20, $19
+ db HYPER_BEAM, EFFECT_HYPER_BEAM, 150, NORMAL, $e5, 5, $00
+ db PECK, EFFECT_NORMAL_HIT, 35, FLYING, $ff, 35, $00
+ db DRILL_PECK, EFFECT_NORMAL_HIT, 80, FLYING, $ff, 20, $00
+ db SUBMISSION, EFFECT_RECOIL_HIT, 80, FIGHTING, $cc, 25, $00
+ db LOW_KICK, EFFECT_FLINCH_HIT, 50, FIGHTING, $e5, 20, $4c
+ db COUNTER, EFFECT_COUNTER, 1, FIGHTING, $ff, 20, $00
+ db SEISMIC_TOSS, EFFECT_LEVEL_DAMAGE, 1, FIGHTING, $ff, 20, $00
+ db STRENGTH, EFFECT_NORMAL_HIT, 80, NORMAL, $ff, 15, $00
+ db ABSORB, EFFECT_LEECH_HIT, 20, GRASS, $ff, 20, $00
+ db MEGA_DRAIN, EFFECT_LEECH_HIT, 40, GRASS, $ff, 10, $00
+ db LEECH_SEED, EFFECT_LEECH_SEED, 0, GRASS, $e5, 10, $00
+ db GROWTH, EFFECT_SP_ATTACK_UP, 0, NORMAL, $ff, 40, $00
+ db RAZOR_LEAF, EFFECT_NORMAL_HIT, 55, GRASS, $f2, 25, $00
+ db SOLARBEAM, EFFECT_SOLARBEAM, 120, GRASS, $ff, 10, $00
+ db POISONPOWDER, EFFECT_POISON, 0, POISON, $bf, 35, $00
+ db STUN_SPORE, EFFECT_PARALYZE, 0, GRASS, $bf, 30, $00
+ db SLEEP_POWDER, EFFECT_SLEEP, 0, GRASS, $bf, 15, $00
+ db PETAL_DANCE, EFFECT_RAMPAGE, 70, GRASS, $ff, 20, $00
+ db STRING_SHOT, EFFECT_SPEED_DOWN, 0, BUG, $f2, 40, $00
+ db DRAGON_RAGE, EFFECT_STATIC_DAMAGE, 40, DRAGON, $ff, 10, $00
+ db FIRE_SPIN, EFFECT_BIND, 15, FIRE, $b2, 15, $00
+ db THUNDERSHOCK, EFFECT_PARALYZE_HIT, 40, ELECTRIC, $ff, 30, $19
+ db THUNDERBOLT, EFFECT_PARALYZE_HIT, 95, ELECTRIC, $ff, 15, $19
+ db THUNDER_WAVE, EFFECT_PARALYZE, 0, ELECTRIC, $ff, 20, $00
+ db THUNDER, EFFECT_THUNDER, 120, ELECTRIC, $b2, 10, $4c
+ db ROCK_THROW, EFFECT_NORMAL_HIT, 50, ROCK, $e5, 15, $00
+ db EARTHQUAKE, EFFECT_EARTHQUAKE, 100, GROUND, $ff, 10, $00
+ db FISSURE, EFFECT_OHKO, 1, GROUND, $4c, 5, $00
+ db DIG, EFFECT_FLY, 60, GROUND, $ff, 10, $00
+ db TOXIC, EFFECT_TOXIC, 0, POISON, $d8, 10, $00
+ db CONFUSION, EFFECT_CONFUSE_HIT, 50, PSYCHIC, $ff, 25, $19
+ db PSYCHIC_M, EFFECT_SP_DEFENSE_DOWN_HIT, 90, PSYCHIC, $ff, 10, $19
+ db HYPNOSIS, EFFECT_SLEEP, 0, PSYCHIC, $99, 20, $00
+ db MEDITATE, EFFECT_ATTACK_UP, 0, PSYCHIC, $ff, 40, $00
+ db AGILITY, EFFECT_SPEED_UP_2, 0, PSYCHIC, $ff, 30, $00
+ db QUICK_ATTACK, EFFECT_PRIORITY_HIT, 40, NORMAL, $ff, 30, $00
+ db RAGE, EFFECT_RAGE, 20, NORMAL, $ff, 20, $00
+ db TELEPORT, EFFECT_TELEPORT, 0, PSYCHIC, $ff, 20, $00
+ db NIGHT_SHADE, EFFECT_LEVEL_DAMAGE, 1, GHOST, $ff, 15, $00
+ db MIMIC, EFFECT_MIMIC, 0, NORMAL, $ff, 10, $00
+ db SCREECH, EFFECT_DEFENSE_DOWN_2, 0, NORMAL, $d8, 40, $00
+ db DOUBLE_TEAM, EFFECT_EVASION_UP, 0, NORMAL, $ff, 15, $00
+ db RECOVER, EFFECT_HEAL, 0, NORMAL, $ff, 20, $00
+ db HARDEN, EFFECT_DEFENSE_UP, 0, NORMAL, $ff, 30, $00
+ db MINIMIZE, EFFECT_EVASION_UP, 0, NORMAL, $ff, 20, $00
+ db SMOKESCREEN, EFFECT_ACCURACY_DOWN, 0, NORMAL, $ff, 20, $00
+ db CONFUSE_RAY, EFFECT_CONFUSE, 0, GHOST, $ff, 10, $00
+ db WITHDRAW, EFFECT_DEFENSE_UP, 0, WATER, $ff, 40, $00
+ db DEFENSE_CURL, EFFECT_DEFENSE_CURL, 0, NORMAL, $ff, 40, $00
+ db BARRIER, EFFECT_DEFENSE_UP_2, 0, PSYCHIC, $ff, 30, $00
+ db LIGHT_SCREEN, EFFECT_LIGHT_SCREEN, 0, PSYCHIC, $ff, 30, $00
+ db HAZE, EFFECT_HAZE, 0, ICE, $ff, 30, $00
+ db REFLECT, EFFECT_REFLECT, 0, PSYCHIC, $ff, 20, $00
+ db FOCUS_ENERGY, EFFECT_FOCUS_ENERGY, 0, NORMAL, $ff, 30, $00
+ db BIDE, EFFECT_BIDE, 0, NORMAL, $ff, 10, $00
+ db METRONOME, EFFECT_METRONOME, 0, NORMAL, $ff, 10, $00
+ db MIRROR_MOVE, EFFECT_MIRROR_MOVE, 0, FLYING, $ff, 20, $00
+ db SELFDESTRUCT, EFFECT_EXPLOSION, 200, NORMAL, $ff, 5, $00
+ db EGG_BOMB, EFFECT_NORMAL_HIT, 100, NORMAL, $bf, 10, $00
+ db LICK, EFFECT_PARALYZE_HIT, 20, GHOST, $ff, 30, $4c
+ db SMOG, EFFECT_POISON_HIT, 20, POISON, $b2, 20, $66
+ db SLUDGE, EFFECT_POISON_HIT, 65, POISON, $ff, 20, $4c
+ db BONE_CLUB, EFFECT_FLINCH_HIT, 65, GROUND, $d8, 20, $19
+ db FIRE_BLAST, EFFECT_BURN_HIT, 120, FIRE, $d8, 5, $19
+ db WATERFALL, EFFECT_NORMAL_HIT, 80, WATER, $ff, 15, $00
+ db CLAMP, EFFECT_BIND, 35, WATER, $bf, 10, $00
+ db SWIFT, EFFECT_ALWAYS_HIT, 60, NORMAL, $ff, 20, $00
+ db SKULL_BASH, EFFECT_SKULL_BASH, 100, NORMAL, $ff, 15, $00
+ db SPIKE_CANNON, EFFECT_MULTI_HIT, 20, NORMAL, $ff, 15, $00
+ db CONSTRICT, EFFECT_SPEED_DOWN_HIT, 10, NORMAL, $ff, 35, $19
+ db AMNESIA, EFFECT_SP_DEFENSE_UP_2, 0, PSYCHIC, $ff, 20, $00
+ db KINESIS, EFFECT_ACCURACY_DOWN, 0, PSYCHIC, $cc, 15, $00
+ db SOFTBOILED, EFFECT_HEAL, 0, NORMAL, $ff, 10, $00
+ db HI_JUMP_KICK, EFFECT_JUMP_KICK, 85, FIGHTING, $e5, 20, $00
+ db GLARE, EFFECT_PARALYZE, 0, NORMAL, $bf, 30, $00
+ db DREAM_EATER, EFFECT_DREAM_EATER, 100, PSYCHIC, $ff, 15, $00
+ db POISON_GAS, EFFECT_POISON, 0, POISON, $8c, 40, $00
+ db BARRAGE, EFFECT_MULTI_HIT, 15, NORMAL, $d8, 20, $00
+ db LEECH_LIFE, EFFECT_LEECH_HIT, 20, BUG, $ff, 15, $00
+ db LOVELY_KISS, EFFECT_SLEEP, 0, NORMAL, $bf, 10, $00
+ db SKY_ATTACK, EFFECT_SKY_ATTACK, 140, FLYING, $e5, 5, $00
+ db TRANSFORM, EFFECT_TRANSFORM, 0, NORMAL, $ff, 10, $00
+ db BUBBLE, EFFECT_SPEED_DOWN_HIT, 20, WATER, $ff, 30, $19
+ db DIZZY_PUNCH, EFFECT_CONFUSE_HIT, 70, NORMAL, $ff, 10, $33
+ db SPORE, EFFECT_SLEEP, 0, GRASS, $ff, 15, $00
+ db FLASH, EFFECT_ACCURACY_DOWN, 0, NORMAL, $b2, 20, $00
+ db PSYWAVE, EFFECT_PSYWAVE, 1, PSYCHIC, $cc, 15, $00
+ db SPLASH, EFFECT_SPLASH, 0, NORMAL, $ff, 40, $00
+ db ACID_ARMOR, EFFECT_DEFENSE_UP_2, 0, POISON, $ff, 40, $00
+ db CRABHAMMER, EFFECT_NORMAL_HIT, 90, WATER, $d8, 10, $00
+ db EXPLOSION, EFFECT_EXPLOSION, 250, NORMAL, $ff, 5, $00
+ db FURY_SWIPES, EFFECT_MULTI_HIT, 18, NORMAL, $cc, 15, $00
+ db BONEMERANG, EFFECT_DOUBLE_HIT, 50, GROUND, $e5, 10, $00
+ db REST, EFFECT_HEAL, 0, PSYCHIC, $ff, 10, $00
+ db ROCK_SLIDE, EFFECT_FLINCH_HIT, 75, ROCK, $e5, 10, $4c
+ db HYPER_FANG, EFFECT_FLINCH_HIT, 80, NORMAL, $e5, 15, $19
+ db SHARPEN, EFFECT_ATTACK_UP, 0, NORMAL, $ff, 30, $00
+ db CONVERSION, EFFECT_CONVERSION, 0, NORMAL, $ff, 30, $00
+ db TRI_ATTACK, EFFECT_TRI_ATTACK, 80, NORMAL, $ff, 10, $33
+ db SUPER_FANG, EFFECT_SUPER_FANG, 1, NORMAL, $e5, 10, $00
+ db SLASH, EFFECT_NORMAL_HIT, 70, NORMAL, $ff, 20, $00
+ db SUBSTITUTE, EFFECT_SUBSTITUTE, 0, NORMAL, $ff, 10, $00
+ db STRUGGLE, EFFECT_RECOIL_HIT, 50, NORMAL, $ff, 1, $00
+ db SKETCH, EFFECT_SKETCH, 0, NORMAL, $ff, 1, $00
+ db TRIPLE_KICK, EFFECT_TRIPLE_KICK, 10, FIGHTING, $e5, 10, $00
+ db THIEF, EFFECT_THIEF, 40, DARK, $ff, 10, $ff
+ db SPIDER_WEB, EFFECT_MEAN_LOOK, 0, BUG, $ff, 10, $00
+ db MIND_READER, EFFECT_LOCK_ON, 0, NORMAL, $ff, 5, $00
+ db NIGHTMARE, EFFECT_NIGHTMARE, 0, GHOST, $ff, 15, $00
+ db FLAME_WHEEL, EFFECT_FLAME_WHEEL, 60, FIRE, $ff, 25, $19
+ db SNORE, EFFECT_SNORE, 40, NORMAL, $ff, 15, $4c
+ db CURSE, EFFECT_CURSE, 0, CURSE_T, $ff, 10, $00
+ db FLAIL, EFFECT_REVERSAL, 1, NORMAL, $ff, 15, $00
+ db CONVERSION2, EFFECT_CONVERSION2, 0, NORMAL, $ff, 30, $00
+ db AEROBLAST, EFFECT_NORMAL_HIT, 100, FLYING, $f2, 5, $00
+ db COTTON_SPORE, EFFECT_SPEED_DOWN_2, 0, GRASS, $d8, 40, $00
+ db REVERSAL, EFFECT_REVERSAL, 1, FIGHTING, $ff, 15, $00
+ db SPITE, EFFECT_SPITE, 0, GHOST, $ff, 10, $00
+ db POWDER_SNOW, EFFECT_FREEZE_HIT, 40, ICE, $ff, 25, $19
+ db PROTECT, EFFECT_PROTECT, 0, NORMAL, $ff, 10, $00
+ db MACH_PUNCH, EFFECT_PRIORITY_HIT, 40, FIGHTING, $ff, 30, $00
+ db SCARY_FACE, EFFECT_SPEED_DOWN_2, 0, NORMAL, $e5, 10, $00
+ db FAINT_ATTACK, EFFECT_ALWAYS_HIT, 60, DARK, $ff, 20, $00
+ db SWEET_KISS, EFFECT_CONFUSE, 0, NORMAL, $bf, 10, $00
+ db BELLY_DRUM, EFFECT_BELLY_DRUM, 0, NORMAL, $ff, 10, $00
+ db SLUDGE_BOMB, EFFECT_POISON_HIT, 90, POISON, $ff, 10, $4c
+ db MUD_SLAP, EFFECT_ACCURACY_DOWN_HIT, 20, GROUND, $ff, 10, $ff
+ db OCTAZOOKA, EFFECT_ACCURACY_DOWN_HIT, 65, WATER, $d8, 10, $7f
+ db SPIKES, EFFECT_SPIKES, 0, GROUND, $ff, 20, $00
+ db ZAP_CANNON, EFFECT_PARALYZE_HIT, 100, ELECTRIC, $7f, 5, $ff
+ db FORESIGHT, EFFECT_FORESIGHT, 0, NORMAL, $ff, 40, $00
+ db DESTINY_BOND, EFFECT_DESTINY_BOND, 0, GHOST, $ff, 5, $00
+ db PERISH_SONG, EFFECT_PERISH_SONG, 0, NORMAL, $ff, 5, $00
+ db ICY_WIND, EFFECT_SPEED_DOWN_HIT, 55, ICE, $f2, 15, $ff
+ db DETECT, EFFECT_PROTECT, 0, FIGHTING, $ff, 5, $00
+ db BONE_RUSH, EFFECT_MULTI_HIT, 25, GROUND, $cc, 10, $00
+ db LOCK_ON, EFFECT_LOCK_ON, 0, NORMAL, $ff, 5, $00
+ db OUTRAGE, EFFECT_RAMPAGE, 90, DRAGON, $ff, 15, $00
+ db SANDSTORM, EFFECT_SANDSTORM, 0, ROCK, $ff, 10, $00
+ db GIGA_DRAIN, EFFECT_LEECH_HIT, 60, GRASS, $ff, 5, $00
+ db ENDURE, EFFECT_ENDURE, 0, NORMAL, $ff, 10, $00
+ db CHARM, EFFECT_ATTACK_DOWN_2, 0, NORMAL, $ff, 20, $00
+ db ROLLOUT, EFFECT_ROLLOUT, 30, ROCK, $e5, 20, $00
+ db FALSE_SWIPE, EFFECT_FALSE_SWIPE, 40, NORMAL, $ff, 40, $00
+ db SWAGGER, EFFECT_SWAGGER, 0, NORMAL, $e5, 15, $ff
+ db MILK_DRINK, EFFECT_HEAL, 0, NORMAL, $ff, 10, $00
+ db SPARK, EFFECT_PARALYZE_HIT, 65, ELECTRIC, $ff, 20, $4c
+ db FURY_CUTTER, EFFECT_FURY_CUTTER, 10, BUG, $f2, 20, $00
+ db STEEL_WING, EFFECT_STEEL_WING, 70, STEEL, $e5, 25, $19
+ db MEAN_LOOK, EFFECT_MEAN_LOOK, 0, NORMAL, $ff, 5, $00
+ db ATTRACT, EFFECT_ATTRACT, 0, NORMAL, $ff, 15, $00
+ db SLEEP_TALK, EFFECT_SLEEP_TALK, 0, NORMAL, $ff, 10, $00
+ db HEAL_BELL, EFFECT_HEAL_BELL, 0, NORMAL, $ff, 5, $00
+ db RETURN, EFFECT_RETURN, 1, NORMAL, $ff, 20, $00
+ db PRESENT, EFFECT_PRESENT, 1, NORMAL, $e5, 15, $00
+ db FRUSTRATION, EFFECT_FRUSTRATION, 1, NORMAL, $ff, 20, $00
+ db SAFEGUARD, EFFECT_SAFEGUARD, 0, NORMAL, $ff, 25, $00
+ db PAIN_SPLIT, EFFECT_PAIN_SPLIT, 0, NORMAL, $ff, 20, $00
+ db SACRED_FIRE, EFFECT_SACRED_FIRE, 100, FIRE, $f2, 5, $7f
+ db MAGNITUDE, EFFECT_MAGNITUDE, 1, GROUND, $ff, 30, $00
+ db DYNAMICPUNCH, EFFECT_CONFUSE_HIT, 100, FIGHTING, $7f, 5, $ff
+ db MEGAHORN, EFFECT_NORMAL_HIT, 120, BUG, $d8, 10, $00
+ db DRAGONBREATH, EFFECT_PARALYZE_HIT, 60, DRAGON, $ff, 20, $4c
+ db BATON_PASS, EFFECT_BATON_PASS, 0, NORMAL, $ff, 40, $00
+ db ENCORE, EFFECT_ENCORE, 0, NORMAL, $ff, 5, $00
+ db PURSUIT, EFFECT_PURSUIT, 40, DARK, $ff, 20, $00
+ db RAPID_SPIN, EFFECT_RAPID_SPIN, 20, NORMAL, $ff, 40, $00
+ db SWEET_SCENT, EFFECT_EVASION_DOWN, 0, NORMAL, $ff, 20, $00
+ db IRON_TAIL, EFFECT_DEFENSE_DOWN_HIT, 100, STEEL, $bf, 15, $4c
+ db METAL_CLAW, EFFECT_METAL_CLAW, 50, STEEL, $f2, 35, $19
+ db VITAL_THROW, EFFECT_ALWAYS_HIT, 70, FIGHTING, $ff, 10, $00
+ db MORNING_SUN, EFFECT_MORNING_SUN, 0, NORMAL, $ff, 5, $00
+ db SYNTHESIS, EFFECT_SYNTHESIS, 0, GRASS, $ff, 5, $00
+ db MOONLIGHT, EFFECT_MOONLIGHT, 0, NORMAL, $ff, 5, $00
+ db HIDDEN_POWER, EFFECT_HIDDEN_POWER, 1, NORMAL, $ff, 15, $00
+ db CROSS_CHOP, EFFECT_NORMAL_HIT, 100, FIGHTING, $cc, 5, $00
+ db TWISTER, EFFECT_TWISTER, 40, DRAGON, $ff, 20, $33
+ db RAIN_DANCE, EFFECT_RAIN_DANCE, 0, WATER, $e5, 5, $00
+ db SUNNY_DAY, EFFECT_SUNNY_DAY, 0, FIRE, $e5, 5, $00
+ db CRUNCH, EFFECT_SP_DEFENSE_DOWN_HIT, 80, DARK, $ff, 15, $33
+ db MIRROR_COAT, EFFECT_MIRROR_COAT, 1, PSYCHIC, $ff, 20, $00
+ db PSYCH_UP, EFFECT_PSYCH_UP, 0, NORMAL, $ff, 10, $00
+ db EXTREMESPEED, EFFECT_PRIORITY_HIT, 80, NORMAL, $ff, 5, $00
+ db ANCIENTPOWER, EFFECT_ANCIENTPOWER, 60, ROCK, $ff, 5, $19
+ db SHADOW_BALL, EFFECT_SP_DEFENSE_DOWN_HIT, 80, GHOST, $ff, 15, $33
+ db FUTURE_SIGHT, EFFECT_FUTURE_SIGHT, 80, PSYCHIC, $e5, 15, $00
+ db ROCK_SMASH, EFFECT_DEFENSE_DOWN_HIT, 20, FIGHTING, $ff, 15, $7f
+ db WHIRLPOOL, EFFECT_BIND, 15, WATER, $b2, 15, $00
+ db BEAT_UP, EFFECT_BEAT_UP, 10, DARK, $ff, 10, $00
diff --git a/constants.asm b/constants.asm
index 03df937c1..b764c8585 100644
--- a/constants.asm
+++ b/constants.asm
@@ -2337,6 +2337,7 @@ EVOLVE_HAPPINESS EQU 4
EVOLVE_STAT EQU 5
; happiness evolution triggers
+HAPPINESS_TO_EVOLVE EQU 220
TR_ANYTIME EQU 1
TR_MORNDAY EQU 2
TR_NITE EQU 3
@@ -3321,42 +3322,45 @@ NOTE_16 EQU $0f
; specials
NUM_SPECIALS EQU $a8
-SPECIAL_UPDATESPRITETILES EQU $0038
+SPECIAL_UPDATESPRITETILES EQU $0038
-SPECIAL_WAITSFX EQU $003b
-SPECIAL_BIKESURFMUSIC EQU $003c
+SPECIAL_WAITSFX EQU $003b
+SPECIAL_BIKESURFMUSIC EQU $003c
-SPECIAL_LOADFACESTEP EQU $003f
+SPECIAL_LOADFACESTEP EQU $003f
-SPECIAL_SNORLAXAWAKE EQU $0060
+SPECIAL_GIVESHUCKLE EQU $004b
-SPECIAL_GAMEBOYCHECK EQU $0066
-SPECIAL_TRAINERHOUSE EQU $0067
+SPECIAL_SNORLAXAWAKE EQU $0060
-SPECIAL_RUSTLETREE EQU $006a
+SPECIAL_GAMEBOYCHECK EQU $0066
+SPECIAL_TRAINERHOUSE EQU $0067
-SPECIAL_ODDEGG EQU $007d
+SPECIAL_RUSTLETREE EQU $006a
-SPECIAL_MOVETUTOR EQU $0083
-SPECIAL_OMANYTECHAMBER EQU $0084
+SPECIAL_ODDEGG EQU $007d
-SPECIAL_RUINCHAMBERWALL EQU $0087
+SPECIAL_MOVETUTOR EQU $0083
+SPECIAL_OMANYTECHAMBER EQU $0084
-SPECIAL_HOOHCHAMBER EQU $008d
+SPECIAL_RUINCHAMBERWALL EQU $0087
-SPECIAL_CELEBI EQU $008f
+SPECIAL_HOOHCHAMBER EQU $008d
-SPECIAL_AFTERCELEBI EQU $0090
-SPECIAL_POKESEER EQU $0091
+SPECIAL_CELEBI EQU $008f
-SPECIAL_DRATINI EQU $0094
+SPECIAL_AFTERCELEBI EQU $0090
+SPECIAL_POKESEER EQU $0091
-SPECIAL_BEASTSCHECK EQU $0096
-SPECIAL_MONCHECK EQU $0097
+SPECIAL_DRATINI EQU $0094
+
+SPECIAL_BEASTSCHECK EQU $0096
+SPECIAL_MONCHECK EQU $0097
; predefs
PREDEF_FILLPP EQU $05
+PREDEF_ADDPARTYMON EQU $06
PREDEF_FILLSTATS EQU $0C
PREDEF_FILLMOVES EQU $1B
PREDEF_GETUNOWNLETTER EQU $2D
@@ -3442,6 +3446,221 @@ BATTLE_VARS_LAST_MOVE EQU 19
BATTLE_VARS_LAST_MOVE_OPP EQU 20
+SUBSTATUS_IN_LOVE EQU 7
+SUBSTATUS_ENCORED EQU 6
+SUBSTATUS_ENDURE EQU 5
+SUBSTATUS_PERISH EQU 4
+SUBSTATUS_PROTECT EQU 2
+SUBSTATUS_CURSE EQU 1
+SUBSTATUS_NIGHTMARE EQU 0
+
+SUBSTATUS_CURLED EQU 0
+
+SUBSTATUS_CONFUSED EQU 7
+SUBSTATUS_FLYING EQU 6
+SUBSTATUS_UNDERGROUND EQU 5
+SUBSTATUS_CHARGED EQU 4
+SUBSTATUS_FLINCHED EQU 3
+SUBSTATUS_ROLLOUT EQU 1
+SUBSTATUS_BIDE EQU 0
+
+SUBSTATUS_LEECH_SEED EQU 7
+SUBSTATUS_RAGE EQU 6
+SUBSTATUS_RECHARGE EQU 5
+SUBSTATUS_SUBSTITUTE EQU 4
+SUBSTATUS_FOCUS_ENERGY EQU 2
+SUBSTATUS_UNLEASH EQU 0
+
+SUBSTATUS_DESTINY_BOND EQU 6
+SUBSTATUS_LOCK_ON EQU 5
+
+
+; status
+SLP EQU 7
+PSN EQU 1 << 3
+BRN EQU 1 << 4
+FRZ EQU 1 << 5
+PAR EQU 1 << 6
+
+
+
+; move effects
+EFFECT_NORMAL_HIT EQU $00
+EFFECT_SLEEP EQU $01
+EFFECT_POISON_HIT EQU $02
+EFFECT_LEECH_HIT EQU $03
+EFFECT_BURN_HIT EQU $04
+EFFECT_FREEZE_HIT EQU $05
+EFFECT_PARALYZE_HIT EQU $06
+EFFECT_EXPLOSION EQU $07
+EFFECT_DREAM_EATER EQU $08
+EFFECT_MIRROR_MOVE EQU $09
+EFFECT_ATTACK_UP EQU $0a
+EFFECT_DEFENSE_UP EQU $0b
+EFFECT_SPEED_UP EQU $0c
+EFFECT_SP_ATTACK_UP EQU $0d
+EFFECT_SP_DEFENSE_UP EQU $0e
+EFFECT_ACCURACY_UP EQU $0f
+EFFECT_EVASION_UP EQU $10
+EFFECT_ALWAYS_HIT EQU $11
+EFFECT_ATTACK_DOWN EQU $12
+EFFECT_DEFENSE_DOWN EQU $13
+EFFECT_SPEED_DOWN EQU $14
+EFFECT_SP_ATTACK_DOWN EQU $15
+EFFECT_SP_DEFENSE_DOWN EQU $16
+EFFECT_ACCURACY_DOWN EQU $17
+EFFECT_EVASION_DOWN EQU $18
+EFFECT_HAZE EQU $19
+EFFECT_BIDE EQU $1a
+EFFECT_RAMPAGE EQU $1b
+EFFECT_WHIRLWIND EQU $1c
+EFFECT_MULTI_HIT EQU $1d
+EFFECT_CONVERSION EQU $1e
+EFFECT_FLINCH_HIT EQU $1f
+EFFECT_HEAL EQU $20
+EFFECT_TOXIC EQU $21
+EFFECT_PAY_DAY EQU $22
+EFFECT_LIGHT_SCREEN EQU $23
+EFFECT_TRI_ATTACK EQU $24
+; unused EQU $25
+EFFECT_OHKO EQU $26
+EFFECT_RAZOR_WIND EQU $27
+EFFECT_SUPER_FANG EQU $28
+EFFECT_STATIC_DAMAGE EQU $29
+EFFECT_BIND EQU $2a
+; unused EQU $2b
+EFFECT_DOUBLE_HIT EQU $2c
+EFFECT_JUMP_KICK EQU $2d
+EFFECT_MIST EQU $2e
+EFFECT_FOCUS_ENERGY EQU $2f
+EFFECT_RECOIL_HIT EQU $30
+EFFECT_CONFUSE EQU $31
+EFFECT_ATTACK_UP_2 EQU $32
+EFFECT_DEFENSE_UP_2 EQU $33
+EFFECT_SPEED_UP_2 EQU $34
+EFFECT_SP_ATTACK_UP_2 EQU $35
+EFFECT_SP_DEFENSE_UP_2 EQU $36
+EFFECT_ACCURACY_UP_2 EQU $37
+EFFECT_EVASION_UP_2 EQU $38
+EFFECT_TRANSFORM EQU $39
+EFFECT_ATTACK_DOWN_2 EQU $3a
+EFFECT_DEFENSE_DOWN_2 EQU $3b
+EFFECT_SPEED_DOWN_2 EQU $3c
+EFFECT_SP_ATTACK_DOWN_2 EQU $3d
+EFFECT_SP_DEFENSE_DOWN_2 EQU $3e
+EFFECT_ACCURACY_DOWN_2 EQU $3f
+EFFECT_EVASION_DOWN_2 EQU $40
+EFFECT_REFLECT EQU $41
+EFFECT_POISON EQU $42
+EFFECT_PARALYZE EQU $43
+EFFECT_ATTACK_DOWN_HIT EQU $44
+EFFECT_DEFENSE_DOWN_HIT EQU $45
+EFFECT_SPEED_DOWN_HIT EQU $46
+EFFECT_SP_ATTACK_DOWN_HIT EQU $47
+EFFECT_SP_DEFENSE_DOWN_HIT EQU $48
+EFFECT_ACCURACY_DOWN_HIT EQU $49
+EFFECT_EVASION_DOWN_HIT EQU $4a
+EFFECT_SKY_ATTACK EQU $4b
+EFFECT_CONFUSE_HIT EQU $4c
+EFFECT_TWINEEDLE EQU $4d
+; unused EQU $4e
+EFFECT_SUBSTITUTE EQU $4f
+EFFECT_HYPER_BEAM EQU $50
+EFFECT_RAGE EQU $51
+EFFECT_MIMIC EQU $52
+EFFECT_METRONOME EQU $53
+EFFECT_LEECH_SEED EQU $54
+EFFECT_SPLASH EQU $55
+EFFECT_DISABLE EQU $56
+EFFECT_LEVEL_DAMAGE EQU $57
+EFFECT_PSYWAVE EQU $58
+EFFECT_COUNTER EQU $59
+EFFECT_ENCORE EQU $5a
+EFFECT_PAIN_SPLIT EQU $5b
+EFFECT_SNORE EQU $5c
+EFFECT_CONVERSION2 EQU $5d
+EFFECT_LOCK_ON EQU $5e
+EFFECT_SKETCH EQU $5f
+EFFECT_DEFROST_OPPONENT EQU $60
+EFFECT_SLEEP_TALK EQU $61
+EFFECT_DESTINY_BOND EQU $62
+EFFECT_REVERSAL EQU $63
+EFFECT_SPITE EQU $64
+EFFECT_FALSE_SWIPE EQU $65
+EFFECT_HEAL_BELL EQU $66
+EFFECT_PRIORITY_HIT EQU $67
+EFFECT_TRIPLE_KICK EQU $68
+EFFECT_THIEF EQU $69
+EFFECT_MEAN_LOOK EQU $6a
+EFFECT_NIGHTMARE EQU $6b
+EFFECT_FLAME_WHEEL EQU $6c
+EFFECT_CURSE EQU $6d
+; unused EQU $6e
+EFFECT_PROTECT EQU $6f
+EFFECT_SPIKES EQU $70
+EFFECT_FORESIGHT EQU $71
+EFFECT_PERISH_SONG EQU $72
+EFFECT_SANDSTORM EQU $73
+EFFECT_ENDURE EQU $74
+EFFECT_ROLLOUT EQU $75
+EFFECT_SWAGGER EQU $76
+EFFECT_FURY_CUTTER EQU $77
+EFFECT_ATTRACT EQU $78
+EFFECT_RETURN EQU $79
+EFFECT_PRESENT EQU $7a
+EFFECT_FRUSTRATION EQU $7b
+EFFECT_SAFEGUARD EQU $7c
+EFFECT_SACRED_FIRE EQU $7d
+EFFECT_MAGNITUDE EQU $7e
+EFFECT_BATON_PASS EQU $7f
+EFFECT_PURSUIT EQU $80
+EFFECT_RAPID_SPIN EQU $81
+; unused EQU $82
+; unused EQU $83
+EFFECT_MORNING_SUN EQU $84
+EFFECT_SYNTHESIS EQU $85
+EFFECT_MOONLIGHT EQU $86
+EFFECT_HIDDEN_POWER EQU $87
+EFFECT_RAIN_DANCE EQU $88
+EFFECT_SUNNY_DAY EQU $89
+EFFECT_STEEL_WING EQU $8a
+EFFECT_METAL_CLAW EQU $8b
+EFFECT_ANCIENTPOWER EQU $8c
+EFFECT_FAKE_OUT EQU $8d
+EFFECT_BELLY_DRUM EQU $8e
+EFFECT_PSYCH_UP EQU $8f
+EFFECT_MIRROR_COAT EQU $90
+EFFECT_SKULL_BASH EQU $91
+EFFECT_TWISTER EQU $92
+EFFECT_EARTHQUAKE EQU $93
+EFFECT_FUTURE_SIGHT EQU $94
+EFFECT_GUST EQU $95
+EFFECT_STOMP EQU $96
+EFFECT_SOLARBEAM EQU $97
+EFFECT_THUNDER EQU $98
+EFFECT_TELEPORT EQU $99
+EFFECT_BEAT_UP EQU $9a
+EFFECT_FLY EQU $9b
+EFFECT_DEFENSE_CURL EQU $9c
+
+
+
+; battle animations
+; animations below fc are 1:1 with move constants
+ANIM_CONFUSED EQU $103
+ANIM_SLEEP EQU $104
+
+ANIM_INLOVE EQU $10a
+
+
+WEATHER_RAIN EQU 1
+WEATHER_SUN EQU 2
+WEATHER_SANDSTORM EQU 3
+WEATHER_RAIN_END EQU 4
+WEATHER_SUN_END EQU 5
+WEATHER_SANDSTORM_END EQU 6
+
+
; joypad
BUTTONS EQU %00010000
D_PAD EQU %00100000
diff --git a/extras/chars.py b/extras/chars.py
index 28f37cb84..159a479a7 100644
--- a/extras/chars.py
+++ b/extras/chars.py
@@ -98,6 +98,7 @@ chars = {
0xE9: "&",
0xEA: "é",
0xEB: "→",
+ 0xED: "▶",
0xEF: "♂",
0xF0: "¥",
0xF1: "×",
diff --git a/extras/crystal.py b/extras/crystal.py
index d620d3fdd..790125222 100644
--- a/extras/crystal.py
+++ b/extras/crystal.py
@@ -2917,7 +2917,7 @@ music_command_enders = [0xEA, 0xEB, 0xEE, 0xFC, 0xFF,]
# special case for 0xFD (if loopchannel.count = 0, break)
def create_music_command_classes(debug=False):
- klasses = [GivePoke]
+ klasses = []
for (byte, cmd) in music_commands_new.items():
cmd_name = cmd[0].replace(" ", "_")
params = {"id": byte, "size": 1, "end": byte in music_command_enders, "macro_name": cmd_name}
@@ -2943,6 +2943,221 @@ def create_music_command_classes(debug=False):
return klasses
music_classes = create_music_command_classes()
+
+
+effect_commands = {
+ 0x1: ['checkturn'],
+ 0x2: ['checkobedience'],
+ 0x3: ['usedmovetext'],
+ 0x4: ['doturn'],
+ 0x5: ['critical'],
+ 0x6: ['damagestats'],
+ 0x7: ['stab'],
+ 0x8: ['damagevariation'],
+ 0x9: ['checkhit'],
+ 0xa: ['effect0x0a'],
+ 0xb: ['effect0x0b'],
+ 0xc: ['effect0x0c'],
+ 0xd: ['resulttext'],
+ 0xe: ['checkfaint'],
+ 0xf: ['criticaltext'],
+ 0x10: ['supereffectivetext'],
+ 0x11: ['checkdestinybond'],
+ 0x12: ['buildopponentrage'],
+ 0x13: ['poisontarget'],
+ 0x14: ['sleeptarget'],
+ 0x15: ['draintarget'],
+ 0x16: ['eatdream'],
+ 0x17: ['burntarget'],
+ 0x18: ['freezetarget'],
+ 0x19: ['paralyzetarget'],
+ 0x1a: ['selfdestruct'],
+ 0x1b: ['mirrormove'],
+ 0x1c: ['statup'],
+ 0x1d: ['statdown'],
+ 0x1e: ['payday'],
+ 0x1f: ['conversion'],
+ 0x20: ['resetstats'],
+ 0x21: ['storeenergy'],
+ 0x22: ['unleashenergy'],
+ 0x23: ['forceswitch'],
+ 0x24: ['endloop'],
+ 0x25: ['flinchtarget'],
+ 0x26: ['ohko'],
+ 0x27: ['recoil'],
+ 0x28: ['mist'],
+ 0x29: ['focusenergy'],
+ 0x2a: ['confuse'],
+ 0x2b: ['confusetarget'],
+ 0x2c: ['heal'],
+ 0x2d: ['transform'],
+ 0x2e: ['screen'],
+ 0x2f: ['poison'],
+ 0x30: ['paralyze'],
+ 0x31: ['substitute'],
+ 0x32: ['rechargenextturn'],
+ 0x33: ['mimic'],
+ 0x34: ['metronome'],
+ 0x35: ['leechseed'],
+ 0x36: ['splash'],
+ 0x37: ['disable'],
+ 0x38: ['cleartext'],
+ 0x39: ['charge'],
+ 0x3a: ['checkcharge'],
+ 0x3b: ['traptarget'],
+ 0x3c: ['effect0x3c'],
+ 0x3d: ['rampage'],
+ 0x3e: ['checkrampage'],
+ 0x3f: ['constantdamage'],
+ 0x40: ['counter'],
+ 0x41: ['encore'],
+ 0x42: ['painsplit'],
+ 0x43: ['snore'],
+ 0x44: ['conversion2'],
+ 0x45: ['lockon'],
+ 0x46: ['sketch'],
+ 0x47: ['defrostopponent'],
+ 0x48: ['sleeptalk'],
+ 0x49: ['destinybond'],
+ 0x4a: ['spite'],
+ 0x4b: ['falseswipe'],
+ 0x4c: ['healbell'],
+ 0x4d: ['kingsrock'],
+ 0x4e: ['triplekick'],
+ 0x4f: ['kickcounter'],
+ 0x50: ['thief'],
+ 0x51: ['arenatrap'],
+ 0x52: ['nightmare'],
+ 0x53: ['defrost'],
+ 0x54: ['curse'],
+ 0x55: ['protect'],
+ 0x56: ['spikes'],
+ 0x57: ['foresight'],
+ 0x58: ['perishsong'],
+ 0x59: ['startsandstorm'],
+ 0x5a: ['endure'],
+ 0x5b: ['checkcurl'],
+ 0x5c: ['rolloutpower'],
+ 0x5d: ['effect0x5d'],
+ 0x5e: ['furycutter'],
+ 0x5f: ['attract'],
+ 0x60: ['happinesspower'],
+ 0x61: ['present'],
+ 0x62: ['damagecalc'],
+ 0x63: ['frustrationpower'],
+ 0x64: ['safeguard'],
+ 0x65: ['checksafeguard'],
+ 0x66: ['getmagnitude'],
+ 0x67: ['batonpass'],
+ 0x68: ['pursuit'],
+ 0x69: ['clearhazards'],
+ 0x6a: ['healmorn'],
+ 0x6b: ['healday'],
+ 0x6c: ['healnite'],
+ 0x6d: ['hiddenpower'],
+ 0x6e: ['startrain'],
+ 0x6f: ['startsun'],
+ 0x70: ['attackup'],
+ 0x71: ['defenseup'],
+ 0x72: ['speedup'],
+ 0x73: ['specialattackup'],
+ 0x74: ['specialdefenseup'],
+ 0x75: ['accuracyup'],
+ 0x76: ['evasionup'],
+ 0x77: ['attackup2'],
+ 0x78: ['defenseup2'],
+ 0x79: ['speedup2'],
+ 0x7a: ['specialattackup2'],
+ 0x7b: ['specialdefenseup2'],
+ 0x7c: ['accuracyup2'],
+ 0x7d: ['evasionup2'],
+ 0x7e: ['attackdown'],
+ 0x7f: ['defensedown'],
+ 0x80: ['speeddown'],
+ 0x81: ['specialattackdown'],
+ 0x82: ['specialdefensedown'],
+ 0x83: ['accuracydown'],
+ 0x84: ['evasiondown'],
+ 0x85: ['attackdown2'],
+ 0x86: ['defensedown2'],
+ 0x87: ['speeddown2'],
+ 0x88: ['specialattackdown2'],
+ 0x89: ['specialdefensedown2'],
+ 0x8a: ['accuracydown2'],
+ 0x8b: ['evasiondown2'],
+ 0x8c: ['statmessageuser'],
+ 0x8d: ['statmessagetarget'],
+ 0x8e: ['statupfailtext'],
+ 0x8f: ['statdownfailtext'],
+ 0x90: ['effectchance'],
+ 0x91: ['effect0x91'],
+ 0x92: ['effect0x92'],
+ 0x93: ['switchturn'],
+ 0x94: ['fakeout'],
+ 0x95: ['bellydrum'],
+ 0x96: ['psychup'],
+ 0x97: ['rage'],
+ 0x98: ['doubleflyingdamage'],
+ 0x99: ['doubleundergrounddamage'],
+ 0x9a: ['mirrorcoat'],
+ 0x9b: ['checkfuturesight'],
+ 0x9c: ['futuresight'],
+ 0x9d: ['doubleminimizedamage'],
+ 0x9e: ['skipsuncharge'],
+ 0x9f: ['thunderaccuracy'],
+ 0xa0: ['teleport'],
+ 0xa1: ['beatup'],
+ 0xa2: ['ragedamage'],
+ 0xa3: ['effect0xa3'],
+ 0xa4: ['allstatsup'],
+ 0xa5: ['effect0xa5'],
+ 0xa6: ['effect0xa6'],
+ 0xa7: ['effect0xa7'],
+ 0xa8: ['effect0xa8'],
+ 0xa9: ['clearmissdamage'],
+ 0xaa: ['wait'],
+ 0xab: ['hittarget'],
+ 0xac: ['tristatuschance'],
+ 0xad: ['supereffectivelooptext'],
+ 0xae: ['startloop'],
+ 0xaf: ['curl'],
+ 0xfe: ['endturn'],
+ 0xff: ['endmove'],
+}
+
+effect_command_enders = [0xFF,]
+
+def create_effect_command_classes(debug=False):
+ klasses = []
+ for (byte, cmd) in effect_commands.items():
+ cmd_name = cmd[0].replace(" ", "_")
+ params = {
+ "id": byte,
+ "size": 1,
+ "end": byte in effect_command_enders,
+ "macro_name": cmd_name
+ }
+ params["param_types"] = {}
+ if len(cmd) > 1:
+ param_types = cmd[1:]
+ for (i, each) in enumerate(param_types):
+ thing = {"name": each[0], "class": each[1]}
+ params["param_types"][i] = thing
+ if debug:
+ print "each is: " + str(each)
+ print "thing[class] is: " + str(thing["class"])
+ params["size"] += thing["class"].size
+ klass_name = cmd_name+"Command"
+ klass = classobj(klass_name, (Command,), params)
+ globals()[klass_name] = klass
+ klasses.append(klass)
+ # later an individual klass will be instantiated to handle something
+ return klasses
+
+effect_classes = create_effect_command_classes()
+
+
+
def generate_macros(filename="../script_macros.asm"):
"""generates all macros based on commands
this is dumped into script_macros.asm"""
diff --git a/hram.asm b/hram.asm
index fd9ed2134..bfab6e295 100644
--- a/hram.asm
+++ b/hram.asm
@@ -26,6 +26,16 @@ hJoyDown EQU $ffa8
hPastLeadingZeroes EQU $ffb3
+hDividend EQU $ffb3
+hDivisor EQU $ffb7
+hQuotient EQU $ffb4
+
+hMultiplicand EQU $ffb4
+hMultiplier EQU $ffb7
+hProduct EQU $ffb3
+
+hMathBuffer EQU $ffb8
+
hLCDStatCustom EQU $ffc6
hBGMapMode EQU $ffd4
diff --git a/main.asm b/main.asm
index 52f7109a7..a2c1f9460 100644
--- a/main.asm
+++ b/main.asm
@@ -56,14 +56,14 @@ Start:
SECTION "start",HOME[$150]
-INCBIN "baserom.gbc",$150,$283 - $150
+INCBIN "baserom.gbc", $150, $283 - $150
VBlank: ; 283
INCLUDE "vblank.asm"
-DelayFrame: ; 0x45a
+DelayFrame: ; 45a
; Wait for one frame
ld a, 1
ld [VBlankOccurred], a
@@ -75,25 +75,26 @@ DelayFrame: ; 0x45a
and a
jr nz, .halt
ret
-; 0x468
+; 468
-DelayFrames: ; 0x468
+
+DelayFrames: ; 468
; Wait c frames
call DelayFrame
dec c
jr nz, DelayFrames
ret
-; 0x46f
+; 46f
+
RTC: ; 46f
; update time and time-sensitive palettes
; rtc enabled?
ld a, [$c2ce]
- cp $0
+ cp 0
ret z
-; update clock
call UpdateTime
; obj update on?
@@ -106,7 +107,9 @@ RTC: ; 46f
ret
; 485
-INCBIN "baserom.gbc",$485,$52f - $485
+
+INCBIN "baserom.gbc", $485, $52f - $485
+
IncGradGBPalTable_01: ; 52f
db %11111111 ; bgp
@@ -142,7 +145,9 @@ IncGradGBPalTable_01: ; 52f
db %00000000
; 547
-INCBIN "baserom.gbc",$547,$568 - $547
+
+INCBIN "baserom.gbc", $547, $568 - $547
+
DisableLCD: ; 568
; Turn the LCD off
@@ -186,6 +191,7 @@ DisableLCD: ; 568
ret
; 58a
+
EnableLCD: ; 58a
ld a, [rLCDC]
set 7, a ; lcd enable
@@ -193,10 +199,12 @@ EnableLCD: ; 58a
ret
; 591
+
AskTimer: ; 591
- INCBIN "baserom.gbc",$591,$59c - $591
+ INCBIN "baserom.gbc", $591, $59c - $591
; 59c
+
LatchClock: ; 59c
; latch clock counter data
ld a, $0
@@ -206,6 +214,7 @@ LatchClock: ; 59c
ret
; 5a7
+
UpdateTime: ; 5a7
; get rtc data
call GetClock
@@ -218,6 +227,7 @@ UpdateTime: ; 5a7
ret
; 5b7
+
GetClock: ; 5b7
; store clock data in hRTCDayHi-hRTCSeconds
@@ -374,7 +384,7 @@ FixTime: ; 61d
ret
; 658
-INCBIN "baserom.gbc",$658,$691 - $658
+INCBIN "baserom.gbc", $658, $691 - $658
SetClock: ; 691
; set clock data from hram
@@ -424,13 +434,13 @@ SetClock: ; 691
ret
; 6c4
-INCBIN "baserom.gbc",$6c4,$92e - $6c4
+INCBIN "baserom.gbc", $6c4, $92e - $6c4
INCLUDE "joypad.asm"
-INCBIN "baserom.gbc",$a1b,$b40 - $a1b
+INCBIN "baserom.gbc", $a1b, $b40 - $a1b
FarDecompress: ; b40
; Decompress graphics data at a:hl to de
@@ -811,121 +821,62 @@ UpdatePalsIfCGB: ; c2f
ld a, [hCGB]
and a
ret z
-
+
+
UpdateCGBPals: ; c33
; return carry if successful
; any pals to update?
ld a, [hCGBPalUpdate]
and a
ret z
-
+
+
ForceUpdateCGBPals: ; c37
-; save wram bank
+
ld a, [rSVBK]
push af
-; bankswitch
ld a, 5 ; BANK(BGPals)
ld [rSVBK], a
-; get bg pal buffer
+
ld hl, BGPals ; 5:d080
-
-; update bg pals
+
+; copy 8 pals to bgpd
ld a, %10000000 ; auto increment, index 0
ld [rBGPI], a
- ld c, rBGPD - rJOYP
+ ld c, rBGPD % $100
ld b, 4 ; NUM_PALS / 2
-
.bgp
-; copy 16 bytes (8 colors / 2 pals) to bgpd
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
+ rept $10
ld a, [hli]
ld [$ff00+c], a
-; done?
+ endr
+
dec b
jr nz, .bgp
; hl is now 5:d0c0 OBPals
-; update obj pals
+; copy 8 pals to obpd
ld a, %10000000 ; auto increment, index 0
ld [rOBPI], a
ld c, rOBPD - rJOYP
ld b, 4 ; NUM_PALS / 2
-
.obp
-; copy 16 bytes (8 colors / 2 pals) to obpd
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
+ rept $10
ld a, [hli]
ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
- ld a, [hli]
- ld [$ff00+c], a
-; done?
+ endr
+
dec b
jr nz, .obp
-; restore wram bank
pop af
ld [rSVBK], a
+
; clear pal update queue
xor a
ld [hCGBPalUpdate], a
-; successfully updated palettes
+
scf
ret
; c9f
@@ -935,23 +886,22 @@ DmgToCgbBGPals: ; c9f
; exists to forego reinserting cgb-converted image data
; input: a -> bgp
+
ld [rBGP], a
push af
-
-; check cgb
+
ld a, [hCGB]
and a
jr z, .end
-
+
push hl
push de
push bc
-; save wram bank
- ld a, [$ff70]
+ ld a, [rSVBK]
push af
-; wram bank 5
+
ld a, 5
- ld [$ff70], a
+ ld [rSVBK], a
; copy & reorder bg pal buffer
ld hl, BGPals ; to
@@ -959,15 +909,15 @@ DmgToCgbBGPals: ; c9f
; order
ld a, [rBGP]
ld b, a
-; # pals
- ld c, 8 ; all pals
+; all pals
+ ld c, 8
call CopyPals
; request pal update
- ld a, $1
+ ld a, 1
ld [hCGBPalUpdate], a
-; restore wram bank
+
pop af
- ld [$ff70], a
+ ld [rSVBK], a
pop bc
pop de
pop hl
@@ -981,51 +931,50 @@ DmgToCgbObjPals: ; ccb
; exists to forego reinserting cgb-converted image data
; input: d -> obp1
-; e -> obp2
+; e -> obp2
+
ld a, e
ld [rOBP0], a
ld a, d
ld [rOBP1], a
-; check cgb
ld a, [hCGB]
and a
ret z
-
+
push hl
push de
push bc
-; save wram bank
- ld a, [$ff70]
+ ld a, [rSVBK]
push af
-; wram bank 5
- ld a, $5
- ld [$ff70], a
-
+
+ ld a, 5
+ ld [rSVBK], a
+
; copy & reorder obj pal buffer
- ; to
- ld hl, OBPals
- ; from
- ld de, Unkn2Pals
+ ld hl, OBPals ; to
+ ld de, Unkn2Pals ; from
; order
ld a, [rOBP0]
ld b, a
-; # pals
- ld c, 8 ; all pals
+; all pals
+ ld c, 8
call CopyPals
; request pal update
- ld a, $1
+ ld a, 1
ld [hCGBPalUpdate], a
-; restore wram bank
+
pop af
- ld [$ff70], a
+ ld [rSVBK], a
pop bc
pop de
pop hl
ret
; cf8
-INCBIN "baserom.gbc",$cf8,$d50 - $cf8
+
+INCBIN "baserom.gbc", $cf8, $d50 - $cf8
+
CopyPals: ; d50
; copy c palettes in order b from de to hl
@@ -1079,70 +1028,125 @@ CopyPals: ; d50
ret
; d79
-INCBIN "baserom.gbc",$d79,$e8d - $d79
-; copy bc bytes from a:hl to de
+INCBIN "baserom.gbc", $d79, $e8d - $d79
+
+
FarCopyBytes: ; e8d
+; copy bc bytes from a:hl to de
+
ld [hBuffer], a
- ld a, [hROMBank] ; save old bank
+ ld a, [hROMBank]
push af
ld a, [hBuffer]
rst Bankswitch
+
call CopyBytes
+
pop af
rst Bankswitch
ret
; 0xe9b
-; copy bc*2 source bytes from a:hl to de, doubling each byte in process
+
FarCopyBytesDouble: ; e9b
+; Copy bc bytes from a:hl to bc*2 bytes at de,
+; doubling each byte in the process.
+
ld [hBuffer], a
- ld a, [hROMBank] ; save current bank
+ ld a, [hROMBank]
push af
ld a, [hBuffer]
- rst Bankswitch ; bankswitch
- ld a, h ; switcheroo, de <> hl
+ rst Bankswitch
+
+; switcheroo, de <> hl
+ ld a, h
ld h, d
ld d, a
ld a, l
ld l, e
ld e, a
+
inc b
inc c
- jr .dec ; 0xeab $4
+ jr .dec
+
.loop
ld a, [de]
inc de
- ld [hli], a ; write twice
+ ld [hli], a
ld [hli], a
.dec
dec c
jr nz, .loop
dec b
jr nz, .loop
+
pop af
rst Bankswitch
ret
; 0xeba
-INCBIN "baserom.gbc",$eba,$fc8 - $eba
+INCBIN "baserom.gbc", $eba, $fb6 - $eba
+
+
+ClearBox: ; fb6
+; Fill a c*b box at hl with blank tiles.
+
+ ld a, " "
+.y
+ push bc
+ push hl
+.x
+ ld [hli], a
+ dec c
+ jr nz, .x
+ pop hl
+ ld bc, 20 ; screen width
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .y
+ ret
+; fc8
+
ClearTileMap: ; fc8
-; Fill the tile map with blank tiles
+; Fill TileMap with blank tiles.
+
ld hl, TileMap
- ld a, $7f ; blank tile
- ld bc, 360 ; length of TileMap
+ ld a, " "
+ ld bc, 360 ; screen dimensions 20*18
call ByteFill
-; We aren't done if the LCD is on
+; We aren't done if the LCD is on.
ld a, [rLCDC]
bit 7, a
ret z
jp WaitBGMap
; fdb
-INCBIN "baserom.gbc",$fdb,$ff1 - $fdb
+
+INCBIN "baserom.gbc", $fdb, $fe8 - $fdb
+
+
+TextBox: ; fe8
+; draw a text box of given location/size
+; ? hl
+; size bc
+; ? de
+
+; draw border
+ push bc
+ push hl
+ call TextBoxBorder
+ pop hl
+ pop bc
+; fill textbox area with palette 7
+ jr TextBoxPalette
+; ff1
+
TextBoxBorder: ; ff1
; draw a text box
@@ -1185,9 +1189,10 @@ TextBoxBorder: ; ff1
call NPlaceChar
ld [hl], "┘"
ret
-; 0x101e
+; 101e
-NPlaceChar: ; 0x101e
+
+NPlaceChar: ; 101e
; place a row of width c of identical characters
ld d,c
.loop\@
@@ -1195,13 +1200,64 @@ NPlaceChar: ; 0x101e
dec d
jr nz,.loop\@
ret
-; 0x1024
+; 1024
+
+
+TextBoxPalette: ; 1024
+; fill textbox area with pal 07
+; hl: tile address
+; b: height
+; c: width
+ ld de, AttrMap - TileMap
+ add hl, de
+ inc b
+ inc b
+ inc c
+ inc c
+ ld a, $07 ; palette
+.gotoy
+ push bc
+ push hl
+.gotox
+ ld [hli], a
+ dec c
+ jr nz, .gotox
+ pop hl
+ ld de, $0014 ; screen width in tiles (20)
+ add hl, de
+ pop bc
+ dec b
+ jr nz, .gotoy
+ ret
+; 103e
+
+
+SpeechTextBox: ; 103e
+; Standard textbox.
+ ld hl, $c590 ; tile 0, 12
+ ld b, $4 ; height
+ ld c, $12 ; width ; SCREEN_WIDTH - 2 (border)
+ jp TextBox
+; 1048
+
+
+INCBIN "baserom.gbc", $1048, $1065 - $1048
+
+
+PrintTextBoxText: ; 1065
+ ld bc, $c5b9 ; TileMap(1,14)
+ call $13e5 ; PrintText
+ ret
+; 106c
+
-INCBIN "baserom.gbc",$1024,$1078 - $1024
+INCBIN "baserom.gbc", $106c, $1078 - $106c
-PlaceString: ; $1078
+
+PlaceString: ; 1078
push hl
-PlaceNextChar:
+
+PlaceNextChar: ; 1079
ld a, [de]
cp "@"
jr nz, CheckDict
@@ -1215,7 +1271,7 @@ NextChar: ; 1083
inc de
jp PlaceNextChar
-CheckDict:
+CheckDict: ; 1087
cp $15
jp z, $117b
cp $4f
@@ -1329,7 +1385,9 @@ CheckDict:
jp NextChar
; 0x117b
-INCBIN "baserom.gbc",$117b,$1203 - $117b
+
+INCBIN "baserom.gbc", $117b, $1203 - $117b
+
Char5D:
ld a, [hBattleTurn]
@@ -1400,14 +1458,14 @@ Char5DText: ; 0x1276
Char5BText: ; 0x127e
db "PC@"
-INCBIN "baserom.gbc",$1281,$1293 - $1281
+INCBIN "baserom.gbc", $1281, $1293 - $1281
Char56Text: ; 0x1293
db "…@"
Char5AText: ; 0x1295
db "Enemy @"
-INCBIN "baserom.gbc",$129c,$1356 - $129c
+INCBIN "baserom.gbc", $129c, $1356 - $129c
Char5F: ; 0x1356
; ends a Pokédex entry
@@ -1415,7 +1473,7 @@ Char5F: ; 0x1356
pop hl
ret
-INCBIN "baserom.gbc",$135a,$15d8 - $135a
+INCBIN "baserom.gbc", $135a, $15d8 - $135a
DMATransfer: ; 15d8
; DMA transfer
@@ -2025,7 +2083,7 @@ SafeTileAnimation: ; 17d3
ret
; 17ff
-INCBIN "baserom.gbc",$17ff,$185d - $17ff
+INCBIN "baserom.gbc", $17ff, $185d - $17ff
GetTileType: ; 185d
; checks the properties of a tile
@@ -2050,7 +2108,7 @@ GetTileType: ; 185d
ret
; 1875
-INCBIN "baserom.gbc",$1875,$2063 - $1875
+INCBIN "baserom.gbc", $1875, $2063 - $1875
AskSerial: ; 2063
; send out a handshake while serial int is off
@@ -2090,7 +2148,7 @@ AskSerial: ; 2063
ret
; 208a
-INCBIN "baserom.gbc",$208a,$209e - $208a
+INCBIN "baserom.gbc", $208a, $209e - $208a
GameTimer: ; 209e
; precautionary
@@ -2220,7 +2278,7 @@ UpdateGameTimer: ; 20ad
ret
; 210f
-INCBIN "baserom.gbc",$210f,$261f - $210f
+INCBIN "baserom.gbc", $210f, $261f - $210f
PushScriptPointer: ; 261f
; used to call a script from asm
@@ -2244,7 +2302,7 @@ PushScriptPointer: ; 261f
ret
; 2631
-INCBIN "baserom.gbc",$2631,$26d4 - $2631
+INCBIN "baserom.gbc", $2631, $26d4 - $2631
GetScriptByte: ; 0x26d4
; Return byte at ScriptBank:ScriptPos in a.
@@ -2289,7 +2347,7 @@ ObjectEventText:
db "@"
; 0x26f7
-INCBIN "baserom.gbc",$26f7,$2bed-$26f7
+INCBIN "baserom.gbc", $26f7, $2bed-$26f7
GetMapHeaderPointer: ; 0x2bed
; Prior to calling this function, you must have switched banks so that
@@ -2359,7 +2417,7 @@ GetAnyMapHeaderMember: ; 0x2c0c
ret
; 0x2c1c
-INCBIN "baserom.gbc",$2c1c,$2c7d-$2c1c
+INCBIN "baserom.gbc", $2c1c, $2c7d-$2c1c
GetSecondaryMapHeaderPointer: ; 0x2c7d
; returns the current map's secondary map header pointer in hl.
@@ -2373,7 +2431,7 @@ GetSecondaryMapHeaderPointer: ; 0x2c7d
pop bc
ret
-INCBIN "baserom.gbc",$2c8a,$2caf-$2c8a
+INCBIN "baserom.gbc", $2c8a, $2caf-$2c8a
GetWorldMapLocation: ; 0x2caf
; given a map group/id in bc, return its location on the Pokégear map.
@@ -2389,7 +2447,7 @@ GetWorldMapLocation: ; 0x2caf
ret
; 0x2cbd
-INCBIN "baserom.gbc",$2cbd,$2d63-$2cbd
+INCBIN "baserom.gbc", $2cbd, $2d63-$2cbd
FarJpHl: ; 2d63
; Jump to a:hl.
@@ -2500,7 +2558,7 @@ Predef: ; 2d83
ret
; 2dba
-INCBIN "baserom.gbc",$2dba,$2e6f-$2dba
+INCBIN "baserom.gbc", $2dba, $2e6f-$2dba
BitTable1Func: ; 0x2e6f
ld hl, $da72
@@ -2692,7 +2750,7 @@ JpHl: ; 2fec
jp [hl]
; 2fed
-INCBIN "baserom.gbc",$2fed,$300b-$2fed
+INCBIN "baserom.gbc", $2fed, $300b-$2fed
ClearSprites: ; 300b
ld hl, Sprites
@@ -2813,7 +2871,7 @@ GetFarHalfword: ; 0x305d
ret
; 0x306b
-INCBIN "baserom.gbc",$306b,$30d6-$306b
+INCBIN "baserom.gbc", $306b, $30d6-$306b
CopyName1: ; 30d6
ld hl, StringBuffer2
@@ -2836,7 +2894,7 @@ IsInArray: ; 30e1
ld c,a
.loop\@
ld a,[hl]
- cp a,$FF
+ cp a, $FF
jr z,.NotInArray\@
cp c
jr z,.InArray\@
@@ -2874,33 +2932,48 @@ AddNTimes: ; 0x30fe
ret
; 0x3105
-INCBIN "baserom.gbc",$3105,$3119-$3105
-
-Multiply: ; 0x3119
-; function to do multiplication
-; all values are big endian
-; INPUT
-; ffb4-ffb6 = multiplicand
-; ffb7 = multiplier
-; OUTPUT
-; ffb3-ffb6 = product
- INCBIN "baserom.gbc",$3119,$3124 - $3119
-; 0x3124
-
-Divide: ; 0x3124
-; function to do division
-; all values are big endian
-; INPUT
-; ffb3-ffb6 = dividend
-; ffb7 = divisor
-; b = number of bytes in the dividend (starting from ffb3)
-; OUTPUT
-; ffb4-ffb6 = quotient
-; ffb7 = remainder
- INCBIN "baserom.gbc",$3124,$3136 - $3124
-; 0x3136
-
-INCBIN "baserom.gbc",$3136,$313d - $3136
+
+INCBIN "baserom.gbc", $3105, $3119 - $3105
+
+
+Multiply: ; 3119
+; Multiply hMultiplicand (3 bytes) by hMultiplier. Result in hProduct.
+; All values are big endian.
+ push hl
+ push bc
+
+ callab _Multiply
+
+ pop bc
+ pop hl
+ ret
+; 3124
+
+
+Divide: ; 3124
+; Divide hDividend length b (max 4 bytes) by hDivisor. Result in hQuotient.
+; All values are big endian.
+ push hl
+ push de
+ push bc
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(_Divide)
+ rst Bankswitch
+
+ call _Divide
+
+ pop af
+ rst Bankswitch
+ pop bc
+ pop de
+ pop hl
+ ret
+; 3136
+
+
+INCBIN "baserom.gbc", $3136, $313d - $3136
+
PrintLetterDelay: ; 313d
; wait some frames before printing the next letter
@@ -3004,7 +3077,7 @@ CopyDataUntil: ; 318c
ret
; 0x3198
-INCBIN "baserom.gbc",$3198,$31db - $3198
+INCBIN "baserom.gbc", $3198, $31db - $3198
StringCmp: ; 31db
; Compare strings, c bytes in length, at de and hl.
@@ -3019,7 +3092,7 @@ StringCmp: ; 31db
ret
; 0x31e4
-INCBIN "baserom.gbc",$31e4,$31f3 - $31e4
+INCBIN "baserom.gbc", $31e4, $31f3 - $31e4
WhiteBGMap: ; 31f3
call ClearPalettes
@@ -3033,7 +3106,7 @@ WaitBGMap: ; 31f6
ret
; 3200
-INCBIN "baserom.gbc",$3200,$3317 - $3200
+INCBIN "baserom.gbc", $3200, $3317 - $3200
ClearPalettes: ; 3317
; Make all palettes white
@@ -3052,11 +3125,11 @@ ClearPalettes: ; 3317
.cgb
; Save WRAM bank
- ld a, [$ff70]
+ ld a, [rSVBK]
push af
; WRAM bank 5
ld a, 5
- ld [$ff70], a
+ ld [rSVBK], a
; Fill BGPals and OBPals with $ffff (white)
ld hl, BGPals
ld bc, $0080
@@ -3064,7 +3137,7 @@ ClearPalettes: ; 3317
call ByteFill
; Restore WRAM bank
pop af
- ld [$ff70], a
+ ld [rSVBK], a
; Request palette update
ld a, 1
ld [hCGBPalUpdate], a
@@ -3091,7 +3164,7 @@ GetSGBLayout: ; 3340
jp Predef
; 334e
-INCBIN "baserom.gbc",$334e,$335f - $334e
+INCBIN "baserom.gbc", $334e, $335f - $334e
CountSetBits: ; 0x335f
; function to count how many bits are set in a string of bytes
@@ -3119,7 +3192,7 @@ CountSetBits: ; 0x335f
ret
; 0x3376
-INCBIN "baserom.gbc",$3376,$33ab - $3376
+INCBIN "baserom.gbc", $3376, $33ab - $3376
NamesPointerTable: ; 33ab
dbw BANK(PokemonNames), PokemonNames
@@ -3181,7 +3254,7 @@ GetName: ; 33c3
ret
; 0x3411
-INCBIN "baserom.gbc",$3411,$3411 - $3411
+INCBIN "baserom.gbc", $3411, $3411 - $3411
GetNthString: ; 3411
; Starting at hl, this function returns the start address of the ath string.
@@ -3200,7 +3273,9 @@ GetNthString: ; 3411
ret
; 0x3420
-INCBIN "baserom.gbc",$3420,$3468 - $3420
+
+INCBIN "baserom.gbc", $3420, $3468 - $3420
+
GetItemName: ; 3468
push hl
@@ -3220,9 +3295,30 @@ GetItemName: ; 3468
pop bc
pop hl
ret
-; 0x3487
+; 3487
+
+
+INCBIN "baserom.gbc", $3487, $34f8 - $3487
+
+
+GetMoveName: ; 34f8
+ push hl
+; move name
+ ld a, $2 ; move names
+ ld [$cf61], a
+; move id
+ ld a, [$d265]
+ ld [$cf60], a
+
+ call GetName
+ ld de, StringBuffer1
+ pop hl
+ ret
+; 350c
+
+
+INCBIN "baserom.gbc", $350c, $3856 - $350c
-INCBIN "baserom.gbc",$3487,$3856 - $3487
GetBaseStats: ; 3856
push bc
@@ -3286,7 +3382,7 @@ GetBaseStats: ; 3856
ret
; 389c
-INCBIN "baserom.gbc",$389c,$38a2 - $389c
+INCBIN "baserom.gbc", $389c, $38a2 - $389c
GetNick: ; 38a2
; get the nickname of a partymon
@@ -3407,15 +3503,38 @@ GetPartyParamLocation: ; 3917
; 3927
GetPartyLocation: ; 3927
-; Add the length of a PartyMon struct to hl a times
-; input:
-; a: partymon #
-; hl: partymon struct
- ld bc, $0030 ; PARTYMON_LENGTH
+; Add the length of a PartyMon struct to hl a times.
+ ld bc, PartyMon2 - PartyMon1
jp AddNTimes
; 392d
-INCBIN "baserom.gbc", $392d, $3985 - $392d
+
+INCBIN "baserom.gbc", $392d, $395d - $392d
+
+
+BattlePartyAttr: ; 395d
+; Get attribute a from the active monster's party struct.
+ push bc
+ ld c, a
+ ld b, 0
+ ld hl, PartyMons
+ add hl, bc
+ ld a, [CurBattleMon]
+ call GetPartyLocation
+ pop bc
+ ret
+; 396d
+
+
+INCBIN "baserom.gbc", $396d, $397d - $396d
+
+
+ResetDamage: ; 397d
+ xor a
+ ld [CurDamage], a
+ ld [CurDamage + 1], a
+ ret
+; 3985
SetPlayerTurn: ; 3985
xor a
@@ -3429,7 +3548,216 @@ SetEnemyTurn: ; 3989
ret
; 398e
-INCBIN "baserom.gbc", $398e, $3b86 - $398e
+INCBIN "baserom.gbc", $398e, $39e1 - $398e
+
+CleanGetBattleVarPair: ; 39e1
+; Preserves hl.
+ push hl
+ call GetBattleVarPair
+ pop hl
+ ret
+; 39e7
+
+GetBattleVarPair: ; 39e7
+; Get variable from pair a, depending on whose turn it is.
+; There are 21 variable pairs.
+
+ push bc
+
+; get var pair
+ ld hl, .battlevarpairs
+ ld c, a
+ ld b, 0
+ add hl, bc
+ add hl, bc
+
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+; Enemy turn uses the second byte instead.
+; This lets battle variable calls be side-neutral.
+ ld a, [hBattleTurn]
+ and a
+ jr z, .getvar
+ inc hl
+
+.getvar
+; get var id
+ ld a, [hl]
+ ld c, a
+ ld b, $0
+
+; seek
+ ld hl, .vars
+ add hl, bc
+ add hl, bc
+
+; get var address
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ ld a, [hl]
+
+ pop bc
+ ret
+
+
+.battlevarpairs
+ dw .substatus1 ; 0
+ dw .substatus2 ; 1
+ dw .substatus3 ; 2
+ dw .substatus4 ; 3
+ dw .substatus5 ; 4
+ dw .substatus1opp ; 5
+ dw .substatus2opp ; 6
+ dw .substatus3opp ; 7
+ dw .substatus4opp ; 8
+ dw .substatus5opp ; 9
+ dw .status ; a
+ dw .statusopp ; b
+ dw .animation ; c
+ dw .effect ; d
+ dw .power ; e
+ dw .type ; f
+ dw .curmove ; 10
+ dw .lastcountermove ; 11
+ dw .lastcountermoveopp ; 12
+ dw .lastmove ; 13
+ dw .lastmoveopp ; 14
+
+ ; player enemy
+.substatus1
+ db $00, $01 ; PLAYER_SUBSTATUS1, ENEMY_SUBSTATUS1
+.substatus1opp
+ db $01, $00 ; ENEMY_SUBSTATUS1, PLAYER_SUBSTATUS1
+.substatus2
+ db $02, $03 ; PLAYER_SUBSTATUS2, ENEMY_SUBSTATUS2
+.substatus2opp
+ db $03, $02 ; ENEMY_SUBSTATUS2, PLAYER_SUBSTATUS2
+.substatus3
+ db $04, $05 ; PLAYER_SUBSTATUS3, ENEMY_SUBSTATUS3
+.substatus3opp
+ db $05, $04 ; ENEMY_SUBSTATUS3, PLAYER_SUBSTATUS3
+.substatus4
+ db $06, $07 ; PLAYER_SUBSTATUS4, ENEMY_SUBSTATUS4
+.substatus4opp
+ db $07, $06 ; ENEMY_SUBSTATUS4, PLAYER_SUBSTATUS4
+.substatus5
+ db $08, $09 ; PLAYER_SUBSTATUS5, ENEMY_SUBSTATUS5
+.substatus5opp
+ db $09, $08 ; ENEMY_SUBSTATUS5, PLAYER_SUBSTATUS5
+.status
+ db $0a, $0b ; PLAYER_STATUS, ENEMY_STATUS
+.statusopp
+ db $0b, $0a ; ENEMY_STATUS, PLAYER_STATUS
+.animation
+ db $0c, $0d ; PLAYER_MOVE_ANIMATION, ENEMY_MOVE_ANIMATION
+.effect
+ db $0e, $0f ; PLAYER_MOVE_EFFECT, ENEMY_MOVE_EFFECT
+.power
+ db $10, $11 ; PLAYER_MOVE_POWER, ENEMY_MOVE_POWER
+.type
+ db $12, $13 ; PLAYER_MOVE_TYPE, ENEMY_MOVE_TYPE
+.curmove
+ db $14, $15 ; PLAYER_CUR_MOVE, ENEMY_CUR_MOVE
+.lastcountermove
+ db $16, $17 ; ENEMY_LAST_COUNTER_MOVE, PLAYER_LAST_COUNTER_MOVE
+.lastcountermoveopp
+ db $17, $16 ; PLAYER_LAST_COUNTER_MOVE, ENEMY_LAST_COUNTER_MOVE
+.lastmove
+ db $18, $19 ; PLAYER_LAST_MOVE, ENEMY_LAST_MOVE
+.lastmoveopp
+ db $19, $18 ; ENEMY_LAST_MOVE, PLAYER_LAST_MOVE
+
+.vars
+ dw PlayerSubStatus1
+ dw EnemySubStatus1
+
+ dw PlayerSubStatus2
+ dw EnemySubStatus2
+
+ dw PlayerSubStatus3
+ dw EnemySubStatus3
+
+ dw PlayerSubStatus4
+ dw EnemySubStatus4
+
+ dw PlayerSubStatus5
+ dw EnemySubStatus5
+
+ dw BattleMonStatus
+ dw EnemyMonStatus
+
+ dw PlayerMoveAnimation
+ dw EnemyMoveAnimation
+
+ dw PlayerMoveEffect
+ dw EnemyMoveEffect
+
+ dw PlayerMovePower
+ dw EnemyMovePower
+
+ dw PlayerMoveType
+ dw EnemyMoveType
+
+ dw CurPlayerMove
+ dw CurEnemyMove
+
+ dw LastEnemyCounterMove
+ dw LastPlayerCounterMove
+
+ dw LastPlayerMove
+ dw LastEnemyMove
+; 3a90
+
+INCBIN "baserom.gbc", $3a90, $3ab2 - $3a90
+
+
+MobileTextBorder: ; 3ab2
+; For mobile link battles only.
+ ld a, [InLinkBattle]
+ cp 4
+ ret c
+; Draw a cell phone icon at the top right corner of the border.
+ ld hl, $c5a3 ; TileMap(19,12)
+ ld [hl], $5e ; cell phone top
+ ld hl, $c5b7 ; TileMap(19,13)
+ ld [hl], $5f ; cell phone bottom
+ ret
+; 3ac3
+
+
+BattleTextBox: ; 3ac3
+ push hl
+ call SpeechTextBox
+ call MobileTextBorder
+ call $1ad2 ; UpdateSprites
+ call $321c ; refresh?
+ pop hl
+ call PrintTextBoxText
+ ret
+; 3ad5
+
+
+FarBattleTextBox: ; 3ad5
+; save bank
+ ld a, [$ff9d] ; bank
+ push af
+; bank 20
+ ld a, $20
+ rst $10
+; print text at hl
+ call BattleTextBox
+; restore bank
+ pop af
+ rst $10
+ ret
+; 3ae1
+
+
+INCBIN "baserom.gbc", $3ae1, $3b86 - $3ae1
LoadMusicByte: ; 3b86
; load music data into CurMusicByte
@@ -3476,7 +3804,7 @@ StartMusic: ; 3b97
ret
; 3bbc
-INCBIN "baserom.gbc",$3bbc,$3be3 - $3bbc
+INCBIN "baserom.gbc", $3bbc, $3be3 - $3bbc
PlayCryHeader: ; 3be3
; Play a cry given parameters in header de
@@ -3577,7 +3905,7 @@ StartSFX: ; 3c23
ret
; 3c4e
-INCBIN "baserom.gbc",$3c4e,$3c55-$3c4e
+INCBIN "baserom.gbc", $3c4e, $3c55-$3c4e
WaitSFX: ; 3c55
; infinite loop until sfx is done playing
@@ -3606,7 +3934,7 @@ WaitSFX: ; 3c55
ret
; 3c74
-INCBIN "baserom.gbc",$3c74,$3c97-$3c74
+INCBIN "baserom.gbc", $3c74, $3c97-$3c74
MaxVolume: ; 3c97
ld a, $77 ; max
@@ -3626,7 +3954,7 @@ VolumeOff: ; 3ca3
ret
; 3ca8
-INCBIN "baserom.gbc",$3ca8,$3dde - $3ca8
+INCBIN "baserom.gbc", $3ca8, $3dde - $3ca8
CheckSFX: ; 3dde
; returns carry if sfx channels are active
@@ -3649,7 +3977,7 @@ CheckSFX: ; 3dde
ret
; 3dfe
-INCBIN "baserom.gbc",$3dfe,$3e10 - $3dfe
+INCBIN "baserom.gbc", $3dfe, $3e10 - $3dfe
ChannelsOff: ; 3e10
; Quickly turn off music channels
@@ -3673,12 +4001,12 @@ SFXChannelsOff: ; 3e21
ret
; 3e32
-INCBIN "baserom.gbc",$3e32,$3fb5 - $3e32
+INCBIN "baserom.gbc", $3e32, $3fb5 - $3e32
SECTION "bank1",DATA,BANK[$1]
-INCBIN "baserom.gbc",$4000,$617c - $4000
+INCBIN "baserom.gbc", $4000, $617c - $4000
IntroFadePalettes: ; 0x617c
db %01010100
@@ -3689,14 +4017,14 @@ IntroFadePalettes: ; 0x617c
db %11100100
; 6182
-INCBIN "baserom.gbc",$6182,$6274 - $6182
+INCBIN "baserom.gbc", $6182, $6274 - $6182
FarStartTitleScreen: ; 6274
callba StartTitleScreen
ret
; 627b
-INCBIN "baserom.gbc",$627b,$62bc - $627b
+INCBIN "baserom.gbc", $627b, $62bc - $627b
TitleScreenEntrance: ; 62bc
@@ -3748,7 +4076,7 @@ TitleScreenEntrance: ; 62bc
ret
; 62f6
-INCBIN "baserom.gbc",$62f6,$669f - $62f6
+INCBIN "baserom.gbc", $62f6, $669f - $62f6
CheckNickErrors: ; 669f
; error-check monster nick before use
@@ -3828,7 +4156,207 @@ CheckNickErrors: ; 669f
db $ff ; end
; 66de
-INCBIN "baserom.gbc",$66de,$6eef - $66de
+
+_Multiply: ; 66de
+
+; hMultiplier is one byte.
+ ld a, 8
+ ld b, a
+
+ xor a
+ ld [hMultiplicand - 1], a
+ ld [hMathBuffer + 1], a
+ ld [hMathBuffer + 2], a
+ ld [hMathBuffer + 3], a
+ ld [hMathBuffer + 4], a
+
+
+.loop
+ ld a, [hMultiplier]
+ srl a
+ ld [hMultiplier], a
+ jr nc, .next
+
+ ld a, [hMathBuffer + 4]
+ ld c, a
+ ld a, [hMultiplicand + 2]
+ add c
+ ld [hMathBuffer + 4], a
+
+ ld a, [hMathBuffer + 3]
+ ld c, a
+ ld a, [hMultiplicand + 1]
+ adc c
+ ld [hMathBuffer + 3], a
+
+ ld a, [hMathBuffer + 2]
+ ld c, a
+ ld a, [hMultiplicand + 0]
+ adc c
+ ld [hMathBuffer + 2], a
+
+ ld a, [hMathBuffer + 1]
+ ld c, a
+ ld a, [hMultiplicand - 1]
+ adc c
+ ld [hMathBuffer + 1], a
+
+.next
+ dec b
+ jr z, .done
+
+
+; hMultiplicand <<= 1
+
+ ld a, [hMultiplicand + 2]
+ add a
+ ld [hMultiplicand + 2], a
+
+ ld a, [hMultiplicand + 1]
+ rla
+ ld [hMultiplicand + 1], a
+
+ ld a, [hMultiplicand + 0]
+ rla
+ ld [hMultiplicand + 0], a
+
+ ld a, [hMultiplicand - 1]
+ rla
+ ld [hMultiplicand - 1], a
+
+ jr .loop
+
+
+.done
+ ld a, [hMathBuffer + 4]
+ ld [hProduct + 3], a
+
+ ld a, [hMathBuffer + 3]
+ ld [hProduct + 2], a
+
+ ld a, [hMathBuffer + 2]
+ ld [hProduct + 1], a
+
+ ld a, [hMathBuffer + 1]
+ ld [hProduct + 0], a
+
+ ret
+; 673e
+
+
+_Divide: ; 673e
+ xor a
+ ld [hMathBuffer + 0], a
+ ld [hMathBuffer + 1], a
+ ld [hMathBuffer + 2], a
+ ld [hMathBuffer + 3], a
+ ld [hMathBuffer + 4], a
+
+ ld a, 9
+ ld e, a
+
+.loop
+ ld a, [hMathBuffer + 0]
+ ld c, a
+ ld a, [hDividend + 1]
+ sub c
+ ld d, a
+
+ ld a, [hDivisor]
+ ld c, a
+ ld a, [hDividend + 0]
+ sbc c
+ jr c, .asm_6767
+
+ ld [hDividend + 0], a
+
+ ld a, d
+ ld [hDividend + 1], a
+
+ ld a, [hMathBuffer + 4]
+ inc a
+ ld [hMathBuffer + 4], a
+
+ jr .loop
+
+.asm_6767
+ ld a, b
+ cp 1
+ jr z, .done
+
+ ld a, [hMathBuffer + 4]
+ add a
+ ld [hMathBuffer + 4], a
+
+ ld a, [hMathBuffer + 3]
+ rla
+ ld [hMathBuffer + 3], a
+
+ ld a, [hMathBuffer + 2]
+ rla
+ ld [hMathBuffer + 2], a
+
+ ld a, [hMathBuffer + 1]
+ rla
+ ld [hMathBuffer + 1], a
+
+ dec e
+ jr nz, .asm_6798
+
+ ld e, 8
+ ld a, [hMathBuffer + 0]
+ ld [hDivisor], a
+ xor a
+ ld [hMathBuffer + 0], a
+
+ ld a, [hDividend + 1]
+ ld [hDividend + 0], a
+
+ ld a, [hDividend + 2]
+ ld [hDividend + 1], a
+
+ ld a, [hDividend + 3]
+ ld [hDividend + 2], a
+
+.asm_6798
+ ld a, e
+ cp 1
+ jr nz, .asm_679e
+ dec b
+
+.asm_679e
+ ld a, [hDivisor]
+ srl a
+ ld [hDivisor], a
+
+ ld a, [hMathBuffer + 0]
+ rr a
+ ld [hMathBuffer + 0], a
+
+ jr .loop
+
+.done
+ ld a, [hDividend + 1]
+ ld [hDivisor], a
+
+ ld a, [hMathBuffer + 4]
+ ld [hDividend + 3], a
+
+ ld a, [hMathBuffer + 3]
+ ld [hDividend + 2], a
+
+ ld a, [hMathBuffer + 2]
+ ld [hDividend + 1], a
+
+ ld a, [hMathBuffer + 1]
+ ld [hDividend + 0], a
+
+ ret
+; 67c1
+
+
+INCBIN "baserom.gbc", $67c1, $6eef - $67c1
+
DrawGraphic: ; 6eef
; input:
@@ -3856,12 +4384,93 @@ DrawGraphic: ; 6eef
ret
; 6f07
-INCBIN "baserom.gbc",$6f07,$747b - $6f07
+
+INCBIN "baserom.gbc", $6f07, $7305 - $6f07
+
+
+SpecialGiveShuckle: ; 7305
+
+; Adding to the party.
+ xor a
+ ld [MonType], a
+
+; Level 15 Shuckle.
+ ld a, SHUCKLE
+ ld [CurPartySpecies], a
+ ld a, 15
+ ld [CurPartyLevel], a
+
+ ld a, PREDEF_ADDPARTYMON
+ call Predef
+ jr nc, .NotGiven
+
+; Caught data.
+ ld b, 0
+ ld a, $13
+ ld hl, $5ba3
+ rst $8
+
+; Holding a Berry.
+ ld bc, PartyMon2 - PartyMon1
+ ld a, [PartyCount]
+ dec a
+ push af
+ push bc
+ ld hl, PartyMon1Item
+ call AddNTimes
+ ld [hl], BERRY
+ pop bc
+ pop af
+
+; OT ID.
+ ld hl, PartyMon1ID
+ call AddNTimes
+ ld a, $2
+ ld [hli], a
+ ld [hl], $6
+
+; Nickname.
+ ld a, [PartyCount]
+ dec a
+ ld hl, PartyMon1Nickname
+ call SkipNames
+ ld de, .Shuckie
+ call CopyName2
+
+; OT.
+ ld a, [PartyCount]
+ dec a
+ ld hl, PartyMon1OT
+ call SkipNames
+ ld de, .Mania
+ call CopyName2
+
+; Bittable2 flag for this event.
+ ld hl, $dc1e
+ set 5, [hl]
+
+ ld a, 1
+ ld [ScriptVar], a
+ ret
+
+.NotGiven
+ xor a
+ ld [ScriptVar], a
+ ret
+
+.Mania
+ db "MANIA@"
+.Shuckie
+ db "SHUCKIE@"
+; 737e
+
+
+INCBIN "baserom.gbc", $737e, $747b - $737e
SECTION "bank2",DATA,BANK[$2]
-INCBIN "baserom.gbc",$8000,$854b - $8000
+INCBIN "baserom.gbc", $8000, $854b - $8000
GetPredefFn: ; 854b
; input:
@@ -3979,7 +4588,7 @@ PredefPointers: ; 856b
dwb $43ff, $2d
; 864c
-INCBIN "baserom.gbc",$864c,$8a68 - $864c
+INCBIN "baserom.gbc", $864c, $8a68 - $864c
CheckShininess: ; 0x8a68
; given a pointer to Attack/Defense DV in bc, determine if monster is shiny.
@@ -4007,7 +4616,7 @@ CheckShininess: ; 0x8a68
and a ; clear carry flag
ret
-INCBIN "baserom.gbc",$8a88,$9a52-$8a88
+INCBIN "baserom.gbc", $8a88, $9a52-$8a88
CopyData: ; 0x9a52
; copy bc bytes of data from hl to de
@@ -4053,22 +4662,22 @@ DrawDefaultTiles: ; 0x9a64
ret
; 0x9a7a
-INCBIN "baserom.gbc",$9a7a,$a51e - $9a7a
+INCBIN "baserom.gbc", $9a7a, $a51e - $9a7a
SGBBorder:
INCBIN "gfx/misc/sgb_border.2bpp"
-INCBIN "baserom.gbc",$a8be,$a8d6 - $a8be
+INCBIN "baserom.gbc", $a8be, $a8d6 - $a8be
PokemonPalettes:
INCLUDE "gfx/pics/palette_pointers.asm"
-INCBIN "baserom.gbc",$b0ae,$b0d2 - $b0ae
+INCBIN "baserom.gbc", $b0ae, $b0d2 - $b0ae
TrainerPalettes:
INCLUDE "gfx/trainers/palette_pointers.asm"
-INCBIN "baserom.gbc",$b1de,$b319 - $b1de
+INCBIN "baserom.gbc", $b1de, $b319 - $b1de
MornPal: ; 0xb319
INCBIN "tilesets/morn.pal"
@@ -4086,185 +4695,185 @@ DarkPal: ; 0xb3d9
INCBIN "tilesets/dark.pal"
; 0xb419
-INCBIN "baserom.gbc",$b419,$b825 - $b419
+INCBIN "baserom.gbc", $b419, $b825 - $b419
SECTION "bank3",DATA,BANK[$3]
-INCBIN "baserom.gbc",$c000,$29
+INCBIN "baserom.gbc", $c000, $29
SpecialsPointers: ; 0xc029
- dbw $25,$7c28
- dbw $0a,$5ce8
- dbw $0a,$5d11
- dbw $0a,$5d92
- dbw $0a,$5e66
- dbw $0a,$5e82
- dbw $0a,$5efa
- dbw $0a,$5eee
- dbw $0a,$5c92
- dbw $0a,$5cf1
- dbw $0a,$5cfa
- dbw $0a,$5bfb
- dbw $0a,$5c7b
- dbw $0a,$5ec4
- dbw $0a,$5ed9
- dbw $0a,$5eaf
- dbw $0a,$5f47
- dbw $03,$42f6
- dbw $03,$4309
- dbw $41,$50b9
- dbw $03,$434a
- dbw $13,$59e5
- dbw $04,$7a12
- dbw $04,$7a31
- dbw $04,$75db
- dbw $3e,$7b32
- dbw $3e,$7cd2
- dbw $03,$4658
- dbw $05,$559a
- dbw $03,$42e7
- dbw $05,$66d6
- dbw $05,$672a
- dbw $05,$6936
- dbw $0b,$4547
- dbw $05,$6218
- dbw $23,$4c04
- dbw $03,$429d
- dbw $24,$4913
- dbw $03,$42c0
- dbw $03,$42cd
- dbw $03,$4355
- dbw $03,$4360
- dbw $03,$4373
- dbw $03,$4380
- dbw $03,$438d
- dbw $03,$43db
- dbw $23,$4084
- dbw $23,$4092
- dbw $23,$40b6
- dbw $23,$4079
- dbw $23,$40ab
- dbw $00,$0d91
- dbw $00,$31f3
- dbw $00,$0485
- dbw $00,$0fc8
- dbw $00,$1ad2
- dbw $00,$0e4a
- dbw $03,$4230
- dbw $03,$4252
+ dbw $25, $7c28
+ dbw $0a, $5ce8
+ dbw $0a, $5d11
+ dbw $0a, $5d92
+ dbw $0a, $5e66
+ dbw $0a, $5e82
+ dbw $0a, $5efa
+ dbw $0a, $5eee
+ dbw $0a, $5c92
+ dbw $0a, $5cf1
+ dbw $0a, $5cfa
+ dbw $0a, $5bfb
+ dbw $0a, $5c7b
+ dbw $0a, $5ec4
+ dbw $0a, $5ed9
+ dbw $0a, $5eaf
+ dbw $0a, $5f47
+ dbw $03, $42f6
+ dbw $03, $4309
+ dbw $41, $50b9
+ dbw $03, $434a
+ dbw $13, $59e5
+ dbw $04, $7a12
+ dbw $04, $7a31
+ dbw $04, $75db
+ dbw $3e, $7b32
+ dbw $3e, $7cd2
+ dbw $03, $4658
+ dbw $05, $559a
+ dbw $03, $42e7
+ dbw $05, $66d6
+ dbw $05, $672a
+ dbw $05, $6936
+ dbw $0b, $4547
+ dbw $05, $6218
+ dbw $23, $4c04
+ dbw $03, $429d
+ dbw $24, $4913
+ dbw $03, $42c0
+ dbw $03, $42cd
+ dbw $03, $4355
+ dbw $03, $4360
+ dbw $03, $4373
+ dbw $03, $4380
+ dbw $03, $438d
+ dbw $03, $43db
+ dbw $23, $4084
+ dbw $23, $4092
+ dbw $23, $40b6
+ dbw $23, $4079
+ dbw $23, $40ab
+ dbw $00, $0d91
+ dbw $00, $31f3
+ dbw $00, $0485
+ dbw $00, $0fc8
+ dbw $00, $1ad2
+ dbw $00, $0e4a
+ dbw $03, $4230
+ dbw $03, $4252
dbw BANK(WaitSFX),WaitSFX
- dbw $00,$3cdf
- dbw $00,$3d47
- dbw $04,$6324
- dbw $02,$4379
- dbw $03,$425a
- dbw $03,$4268
- dbw $03,$4276
- dbw $03,$4284
- dbw $03,$43ef
- dbw $05,$7421
- dbw $05,$7440
- dbw $04,$79a8
- dbw $03,$43fc
- dbw $09,$6feb
- dbw $09,$7043
- dbw $01,$7305
- dbw $01,$737e
- dbw $01,$73f7
+ dbw $00, $3cdf
+ dbw $00, $3d47
+ dbw $04, $6324
+ dbw $02, $4379
+ dbw $03, $425a
+ dbw $03, $4268
+ dbw $03, $4276
+ dbw $03, $4284
+ dbw $03, $43ef
+ dbw $05, $7421
+ dbw $05, $7440
+ dbw $04, $79a8
+ dbw $03, $43fc
+ dbw $09, $6feb
+ dbw $09, $7043
+ dbw BANK(SpecialGiveShuckle), SpecialGiveShuckle
+ dbw $01, $737e
+ dbw $01, $73f7
dbw BANK(SpecialCheckPokerus),SpecialCheckPokerus
- dbw $09,$4b25
- dbw $09,$4b4e
- dbw $09,$4ae8
- dbw $13,$587a
- dbw $03,$4434
- dbw $03,$4422
- dbw $13,$59d3
- dbw $22,$4018
- dbw $03,$42b9
- dbw $03,$42da
- dbw $01,$718d
- dbw $01,$71ac
- dbw $0a,$64ab
- dbw $0a,$651f
- dbw $0a,$6567
- dbw $05,$4209
- dbw $3e,$7841
+ dbw $09, $4b25
+ dbw $09, $4b4e
+ dbw $09, $4ae8
+ dbw $13, $587a
+ dbw $03, $4434
+ dbw $03, $4422
+ dbw $13, $59d3
+ dbw $22, $4018
+ dbw $03, $42b9
+ dbw $03, $42da
+ dbw $01, $718d
+ dbw $01, $71ac
+ dbw $0a, $64ab
+ dbw $0a, $651f
+ dbw $0a, $6567
+ dbw $05, $4209
+ dbw $3e, $7841
dbw BANK(SpecialSnorlaxAwake),SpecialSnorlaxAwake
- dbw $01,$7413
- dbw $01,$7418
- dbw $01,$741d
- dbw $03,$4472
- dbw $09,$65ee
+ dbw $01, $7413
+ dbw $01, $7418
+ dbw $01, $741d
+ dbw $03, $4472
+ dbw $09, $65ee
dbw BANK(SpecialGameboyCheck),SpecialGameboyCheck
dbw BANK(SpecialTrainerHouse),SpecialTrainerHouse
- dbw $05,$6dc7
+ dbw $05, $6dc7
dbw BANK(SpecialRoamMons), SpecialRoamMons
- dbw $03,$448f
- dbw $03,$449f
- dbw $03,$44ac
- dbw $46,$6c3e
- dbw $46,$7444
- dbw $46,$75e8
- dbw $46,$77e5
- dbw $46,$7879
- dbw $46,$7920
- dbw $46,$793b
- dbw $5c,$40b0
- dbw $5c,$40ba
- dbw $5c,$4114
- dbw $5c,$4215
- dbw $5c,$44e1
- dbw $5c,$421d
- dbw $5c,$4b44
- dbw $46,$7a38
- dbw $5c,$4bd3
- dbw $45,$7656
- dbw $00,$0150
- dbw $40,$51f1
- dbw $40,$5220
- dbw $40,$5225
- dbw $40,$5231
- dbw $12,$525b
- dbw $22,$6def
- dbw $47,$41ab
- dbw $5c,$4687
- dbw $22,$6e68
- dbw $5f,$5224
- dbw $5f,$52b6
- dbw $5f,$52ce
- dbw $5f,$753d
- dbw $40,$7612
+ dbw $03, $448f
+ dbw $03, $449f
+ dbw $03, $44ac
+ dbw $46, $6c3e
+ dbw $46, $7444
+ dbw $46, $75e8
+ dbw $46, $77e5
+ dbw $46, $7879
+ dbw $46, $7920
+ dbw $46, $793b
+ dbw $5c, $40b0
+ dbw $5c, $40ba
+ dbw $5c, $4114
+ dbw $5c, $4215
+ dbw $5c, $44e1
+ dbw $5c, $421d
+ dbw $5c, $4b44
+ dbw $46, $7a38
+ dbw $5c, $4bd3
+ dbw $45, $7656
+ dbw $00, $0150
+ dbw $40, $51f1
+ dbw $40, $5220
+ dbw $40, $5225
+ dbw $40, $5231
+ dbw $12, $525b
+ dbw $22, $6def
+ dbw $47, $41ab
+ dbw $5c, $4687
+ dbw $22, $6e68
+ dbw $5f, $5224
+ dbw $5f, $52b6
+ dbw $5f, $52ce
+ dbw $5f, $753d
+ dbw $40, $7612
dbw BANK(SpecialHoOhChamber),SpecialHoOhChamber
- dbw $40,$6142
- dbw $12,$589a
- dbw $12,$5bf9
- dbw $13,$70bc
- dbw $22,$6f6b
- dbw $22,$6fd4
+ dbw $40, $6142
+ dbw $12, $589a
+ dbw $12, $5bf9
+ dbw $13, $70bc
+ dbw $22, $6f6b
+ dbw $22, $6fd4
dbw BANK(SpecialDratini),SpecialDratini
- dbw $04,$5485
+ dbw $04, $5485
dbw BANK(SpecialBeastsCheck),SpecialBeastsCheck
dbw BANK(SpecialMonCheck),SpecialMonCheck
- dbw $03,$4225
- dbw $5c,$4bd2
- dbw $40,$766e
- dbw $40,$77eb
- dbw $40,$783c
- dbw $41,$60a2
- dbw $05,$4168
- dbw $40,$77c2
- dbw $41,$630f
- dbw $40,$7780
- dbw $40,$787b
- dbw $12,$6e12
- dbw $41,$47eb
- dbw $12,$6927
- dbw $24,$4a54
- dbw $24,$4a88
- dbw $03,$4224
-
-INCBIN "baserom.gbc",$c224,$c3e2 - $c224
+ dbw $03, $4225
+ dbw $5c, $4bd2
+ dbw $40, $766e
+ dbw $40, $77eb
+ dbw $40, $783c
+ dbw $41, $60a2
+ dbw $05, $4168
+ dbw $40, $77c2
+ dbw $41, $630f
+ dbw $40, $7780
+ dbw $40, $787b
+ dbw $12, $6e12
+ dbw $41, $47eb
+ dbw $12, $6927
+ dbw $24, $4a54
+ dbw $24, $4a88
+ dbw $03, $4224
+
+INCBIN "baserom.gbc", $c224, $c3e2 - $c224
ScriptReturnCarry: ; c3e2
jr c, .carry
@@ -4277,7 +4886,7 @@ ScriptReturnCarry: ; c3e2
ret
; c3ef
-INCBIN "baserom.gbc",$c3ef,$c419 - $c3ef
+INCBIN "baserom.gbc", $c3ef, $c419 - $c3ef
SpecialCheckPokerus: ; c419
; Check if a monster in your party has Pokerus
@@ -4285,7 +4894,7 @@ SpecialCheckPokerus: ; c419
jp ScriptReturnCarry
; c422
-INCBIN "baserom.gbc",$c422,$c43d - $c422
+INCBIN "baserom.gbc", $c422, $c43d - $c422
SpecialSnorlaxAwake: ; 0xc43d
; Check if the Poké Flute channel is playing, and if the player is standing
@@ -4329,14 +4938,14 @@ SpecialSnorlaxAwake: ; 0xc43d
ret
.ProximityCoords
- db $21,$08
- db $22,$0a
- db $23,$0a
- db $24,$08
- db $24,$09
+ db $21, $08
+ db $22, $0a
+ db $23, $0a
+ db $24, $08
+ db $24, $09
db $ff
-INCBIN "baserom.gbc",$c472,$c478 - $c472
+INCBIN "baserom.gbc", $c472, $c478 - $c472
SpecialGameboyCheck: ; c478
; check cgb
@@ -4362,7 +4971,7 @@ SpecialGameboyCheck: ; c478
ld [ScriptVar], a
ret
-INCBIN "baserom.gbc",$c48f,$c4b9 - $c48f
+INCBIN "baserom.gbc", $c48f, $c4b9 - $c48f
SpecialTrainerHouse: ; 0xc4b9
ld a, 0
@@ -4371,10 +4980,10 @@ SpecialTrainerHouse: ; 0xc4b9
ld [ScriptVar], a
jp CloseSRAM
-INCBIN "baserom.gbc",$c4c7,$c5d2 - $c4c7
+INCBIN "baserom.gbc", $c4c7, $c5d2 - $c4c7
PrintNumber_PrintDigit: ; c5d2
-INCBIN "baserom.gbc",$c5d2,$c644 - $c5d2
+INCBIN "baserom.gbc", $c5d2, $c644 - $c5d2
PrintNumber_PrintLeadingZero: ; c644
; prints a leading zero unless they are turned off in the flags
@@ -4398,7 +5007,7 @@ PrintNumber_AdvancePointer: ; c64a
ret
; 0xc658
-INCBIN "baserom.gbc",$c658,$c706 - $c658
+INCBIN "baserom.gbc", $c658, $c706 - $c658
GetPartyNick: ; c706
; write CurPartyMon nickname to StringBuffer1-3
@@ -4492,7 +5101,7 @@ CheckPartyMove: ; c742
ret
; c779
-INCBIN "baserom.gbc",$c779,$c986 - $c779
+INCBIN "baserom.gbc", $c779, $c986 - $c779
UsedSurfScript: ; c986
; print "[MON] used SURF!"
@@ -4650,17 +5259,17 @@ AskSurfText: ; ca36
db "@" ; Want to SURF?
; ca3b
-INCBIN "baserom.gbc",$ca3b,$fa0b - $ca3b
+INCBIN "baserom.gbc", $ca3b, $fa0b - $ca3b
SECTION "bank4",DATA,BANK[$4]
-INCBIN "baserom.gbc",$10000,$10b16 - $10000
+INCBIN "baserom.gbc", $10000, $10b16 - $10000
PackGFX:
INCBIN "gfx/misc/pack.2bpp"
-INCBIN "baserom.gbc",$113d6,$1167a - $113d6
+INCBIN "baserom.gbc", $113d6, $1167a - $113d6
TechnicalMachines: ; 0x1167a
db DYNAMICPUNCH
@@ -4721,7 +5330,7 @@ TechnicalMachines: ; 0x1167a
db WHIRLPOOL
db WATERFALL
-INCBIN "baserom.gbc",$116b3,$11ce7 - $116b3
+INCBIN "baserom.gbc", $116b3, $11ce7 - $116b3
NameInputLower:
db "a b c d e f g h i"
@@ -4750,7 +5359,7 @@ BoxNameInputUpper:
db "- ? ! ♂ ♀ / . , &"
db "lower DEL END "
-INCBIN "baserom.gbc",$11e5d,$12976 - $11e5d
+INCBIN "baserom.gbc", $11e5d, $12976 - $11e5d
OpenPartyMenu: ; $12976
ld a, [PartyCount]
@@ -4806,7 +5415,7 @@ OpenPartyMenu: ; $12976
ret
; 0x129d5
-INCBIN "baserom.gbc",$129d5,$12a88 - $129d5
+INCBIN "baserom.gbc", $129d5, $12a88 - $129d5
PokemonActionSubmenu ; 0x12a88
ld hl, $c5cd ; coord
@@ -4855,7 +5464,7 @@ PokemonSubmenuActionPointerTable: ; 0x12ab0
; no terminator?
; 0x12aec
-INCBIN "baserom.gbc",$12aec,$12e00 - $12aec
+INCBIN "baserom.gbc", $12aec, $12e00 - $12aec
OpenPartyStats: ; 12e00
call $1d6e
@@ -4871,7 +5480,7 @@ OpenPartyStats: ; 12e00
ret
; 0x12e1b
-INCBIN "baserom.gbc",$12e1b,$13b87 - $12e1b
+INCBIN "baserom.gbc", $12e1b, $13b87 - $12e1b
GetSquareRoot: ; 13b87
; Return the square root of de in b.
@@ -4908,7 +5517,7 @@ root set root+1
SECTION "bank5",DATA,BANK[$5]
-INCBIN "baserom.gbc",$14000,$14032 - $14000
+INCBIN "baserom.gbc", $14000, $14032 - $14000
GetTimeOfDay: ; 14032
; get time of day based on the current hour
@@ -4944,7 +5553,7 @@ TimeOfDayTable: ; 14044
db 24, $02 ; NITE
; 1404c
-INCBIN "baserom.gbc",$1404c,$152ab - $1404c
+INCBIN "baserom.gbc", $1404c, $152ab - $1404c
BlackoutPoints: ; 0x152ab
db GROUP_KRISS_HOUSE_2F, MAP_KRISS_HOUSE_2F, 3, 3
@@ -4977,7 +5586,7 @@ BlackoutPoints: ; 0x152ab
db GROUP_FAST_SHIP_CABINS_SW_SSW_NW, MAP_FAST_SHIP_CABINS_SW_SSW_NW, 6, 2
db $ff, $ff, $ff, $ff
-INCBIN "baserom.gbc",$1531f,$174ba - $1531f
+INCBIN "baserom.gbc", $1531f, $174ba - $1531f
SECTION "bank6",DATA,BANK[$6]
@@ -5287,7 +5896,7 @@ INCLUDE "stats/egg_moves.asm"
SECTION "bank9",DATA,BANK[$9]
-INCBIN "baserom.gbc",$24000,$270c4 - $24000
+INCBIN "baserom.gbc", $24000, $270c4 - $24000
GetTrainerDVs: ; 270c4
; get dvs based on trainer class
@@ -5382,12 +5991,20 @@ TrainerClassDVs ; 270d6
db $98, $88 ; mysticalman
; 2715c
-INCBIN "baserom.gbc",$2715c,$27a2d - $2715c
+INCBIN "baserom.gbc", $2715c, $271f4 - $2715c
+
+MoveEffectsPointers: ; 271f4
+INCLUDE "battle/moves/move_effects_pointers.asm"
+
+MoveEffects: ; 2732e
+INCLUDE "battle/moves/move_effects.asm"
+
+INCBIN "baserom.gbc", $27a28, $27a2d - $27a28
SECTION "bankA",DATA,BANK[$A]
-INCBIN "baserom.gbc",$28000,$2a2a0 - $28000
+INCBIN "baserom.gbc", $28000, $2a2a0 - $28000
SpecialRoamMons: ; 2a2a0
; initialize RoamMon structs
@@ -5434,7 +6051,7 @@ SpecialRoamMons: ; 2a2a0
ret
; 2a2ce
-INCBIN "baserom.gbc",$2a2ce,$2a5e9 - $2a2ce
+INCBIN "baserom.gbc", $2a2ce, $2a5e9 - $2a2ce
WildMons1: ; 0x2a5e9
@@ -5471,7 +6088,7 @@ INCBIN "gfx/misc/dude.lz"
SECTION "bankB",DATA,BANK[$B]
-INCBIN "baserom.gbc",$2C000,$2c1ef - $2C000
+INCBIN "baserom.gbc", $2C000, $2c1ef - $2C000
TrainerClassNames: ; 2c1ef
db "LEADER@"
@@ -5542,7 +6159,7 @@ TrainerClassNames: ; 2c1ef
db "ROCKET@"
db "MYSTICALMAN@"
-INCBIN "baserom.gbc",$2C41a,$2ee8f - $2C41a
+INCBIN "baserom.gbc", $2C41a, $2ee8f - $2C41a
; XXX this is not the start of the routine
; determine what music plays in battle
@@ -5625,7 +6242,7 @@ INCBIN "baserom.gbc",$2C41a,$2ee8f - $2C41a
pop hl
ret
-INCBIN "baserom.gbc",$2ef18,$2ef9f - $2ef18
+INCBIN "baserom.gbc", $2ef18, $2ef9f - $2ef18
SECTION "bankC",DATA,BANK[$C]
@@ -5717,23 +6334,17 @@ Tileset30GFX: ; 0x326b0
INCBIN "gfx/tilesets/30.lz"
; 0x329ed
-INCBIN "baserom.gbc",$329ed,$333f0 - $329ed
+INCBIN "baserom.gbc", $329ed, $333f0 - $329ed
SECTION "bankD",DATA,BANK[$D]
-INCBIN "baserom.gbc",$34000,$34bb1 - $34000
-
-TypeMatchup: ; 34bb1
-INCLUDE "battle/type_matchup.asm"
-; 34cfd
-
-INCBIN "baserom.gbc",$34cfd,$37ee2 - $34cfd
+INCLUDE "battle/effect_commands.asm"
SECTION "bankE",DATA,BANK[$E]
-INCBIN "baserom.gbc",$38000,$39999 - $38000
+INCBIN "baserom.gbc", $38000, $39999 - $38000
TrainerGroups: ; 0x39999
INCLUDE "trainers/trainer_pointers.asm"
@@ -5743,7 +6354,91 @@ INCLUDE "trainers/trainers.asm"
SECTION "bankF",DATA,BANK[$F]
-INCBIN "baserom.gbc",$3C000,$3d123 - $3C000
+INCBIN "baserom.gbc", $3c000, $3cc83 - $3c000
+
+GetEighthMaxHP: ; 3cc83
+; output: bc
+ call GetQuarterMaxHP
+; assumes nothing can have 1024 or more hp
+; halve result
+ srl c
+; round up
+ ld a, c
+ and a
+ jr nz, .end
+ inc c
+.end
+ ret
+; 3cc8e
+
+
+GetQuarterMaxHP: ; 3cc8e
+; output: bc
+ call GetMaxHP
+
+; quarter result
+ srl b
+ rr c
+ srl b
+ rr c
+
+; assumes nothing can have 1024 or more hp
+; round up
+ ld a, c
+ and a
+ jr nz, .end
+ inc c
+.end
+ ret
+; 3cc9f
+
+
+GetHalfMaxHP: ; 3cc9f
+; output: bc
+ call GetMaxHP
+
+; halve reslut
+ srl b
+ rr c
+
+; floor = 1
+ ld a, c
+ or b
+ jr nz, .end
+ inc c
+.end
+ ret
+; 3ccac
+
+
+GetMaxHP: ; 3ccac
+; output: bc, $d1ea-b
+
+; player
+ ld hl, BattleMonMaxHP
+
+; whose turn?
+ ld a, [hBattleTurn]
+ and a
+ jr z, .gethp
+
+; enemy
+ ld hl, EnemyMonMaxHP
+
+.gethp
+ ld a, [hli]
+ ld [$d1eb], a
+ ld b, a
+
+ ld a, [hl]
+ ld [$d1ea], a
+ ld c, a
+ ret
+; 3ccc2
+
+
+INCBIN "baserom.gbc", $3ccc2, $3d123 - $3ccc2
+
; These functions check if the current opponent is a gym leader or one of a
; few other special trainers.
@@ -5798,13 +6493,13 @@ KantoGymLeaders:
db BLUE
db $ff
-INCBIN "baserom.gbc",$3d14e,$3ddc2 - $3d14e
+INCBIN "baserom.gbc", $3d14e, $3ddc2 - $3d14e
ld hl, RecoveredUsingText
jp $3ad5
; 0x3ddc8
-INCBIN "baserom.gbc",$3ddc8,$3e8eb - $3ddc8
+INCBIN "baserom.gbc", $3ddc8, $3e8eb - $3ddc8
LoadEnemyMon: ; 3e8eb
; Initialize enemy monster parameters
@@ -6610,12 +7305,19 @@ BattleStartMessage:
ret
; 0x3fd26
-INCBIN "baserom.gbc",$3fd26,$3fe86 - $3fd26
+
+ dw $0000 ; padding
+
+
+BattleCommandPointers: ; 3fd28
+
+INCLUDE "battle/effect_command_pointers.asm"
+
SECTION "bank10",DATA,BANK[$10]
-INCBIN "baserom.gbc",$40000,$40c65-$40000
+INCBIN "baserom.gbc", $40000, $40c65-$40000
AlphabeticalPokedexOrder: ; 0x40c65
INCLUDE "stats/pokedex/order_alpha.asm"
@@ -6623,12 +7325,12 @@ INCLUDE "stats/pokedex/order_alpha.asm"
NewPokedexOrder: ; 0x40d60
INCLUDE "stats/pokedex/order_new.asm"
-INCBIN "baserom.gbc",$40e5b,$41afb-$40e5b
+INCBIN "baserom.gbc", $40e5b, $41afb-$40e5b
Moves: ; 0x41afb
INCLUDE "battle/moves/moves.asm"
-INCBIN "baserom.gbc",$421d8,$425b1-$421d8
+INCBIN "baserom.gbc", $421d8, $425b1-$421d8
EvosAttacksPointers: ; 0x425b1
INCLUDE "stats/evos_attacks_pointers.asm"
@@ -6638,22 +7340,22 @@ INCLUDE "stats/evos_attacks.asm"
SECTION "bank11",DATA,BANK[$11]
-INCBIN "baserom.gbc",$44000,$44378 - $44000
+INCBIN "baserom.gbc", $44000, $44378 - $44000
PokedexDataPointerTable: ; 0x44378
INCLUDE "stats/pokedex/entry_pointers.asm"
-INCBIN "baserom.gbc",$4456e,$44997 - $4456e
+INCBIN "baserom.gbc", $4456e, $44997 - $4456e
SECTION "bank12",DATA,BANK[$12]
-INCBIN "baserom.gbc",$48000,$48e9b - $48000
+INCBIN "baserom.gbc", $48000, $48e9b - $48000
PackFGFX:
INCBIN "gfx/misc/pack_f.2bpp"
-INCBIN "baserom.gbc",$4925b,$49962 - $4925b
+INCBIN "baserom.gbc", $4925b, $49962 - $4925b
SpecialCelebiGFX:
INCBIN "gfx/special/celebi/leaf.2bpp"
@@ -6662,7 +7364,7 @@ INCBIN "gfx/special/celebi/2.2bpp"
INCBIN "gfx/special/celebi/3.2bpp"
INCBIN "gfx/special/celebi/4.2bpp"
-INCBIN "baserom.gbc",$49aa2,$49d24 - $49aa2
+INCBIN "baserom.gbc", $49aa2, $49d24 - $49aa2
ContinueText: ; 0x49d24
db "CONTINUE@"
@@ -6759,7 +7461,7 @@ StudiumMenu: ; 0x49d9e
db MOBILE_STUDIUM
db $ff
-INCBIN "baserom.gbc",$49da4,$4a6e8 - $49da4
+INCBIN "baserom.gbc", $49da4, $4a6e8 - $49da4
SpecialBeastsCheck: ; 0x4a6e8
; Check if the player owns all three legendary beasts.
@@ -7019,7 +7721,7 @@ UpdateOTPointer: ; 0x4a83a
ret
; 0x4a843
-INCBIN "baserom.gbc",$4a843,$4ae78 - $4a843
+INCBIN "baserom.gbc", $4a843, $4ae78 - $4a843
SECTION "bank13",DATA,BANK[$13]
@@ -7133,7 +7835,7 @@ Tileset20PalMap: ; 0x4caf5
INCBIN "tilesets/20_palette_map.bin"
; 0x4cb65
-INCBIN "baserom.gbc",$4cb65,$4cbd5-$4cb65
+INCBIN "baserom.gbc", $4cb65, $4cbd5-$4cb65
Tileset29PalMap: ; 0x4cbd5
INCBIN "tilesets/29_palette_map.bin"
@@ -7528,7 +8230,7 @@ CheckPokerus: ; 4d860
ret
; 4d87a
-INCBIN "baserom.gbc",$4d87a,$4dc8a - $4d87a
+INCBIN "baserom.gbc", $4d87a, $4dc8a - $4d87a
StatsScreenInit: ; 4dc8a
ld hl, StatsScreenMain
@@ -7591,7 +8293,7 @@ StatsScreenMain: ; 0x4dcd2
ret
; 0x4dcf7
-INCBIN "baserom.gbc",$4dcf7,$4dd2a - $4dcf7
+INCBIN "baserom.gbc", $4dcf7, $4dd2a - $4dcf7
StatsScreenPointerTable: ; 4dd2a
dw $5d72 ; regular pokémon
@@ -7605,7 +8307,7 @@ StatsScreenPointerTable: ; 4dd2a
; 4dd3a
-INCBIN "baserom.gbc",$4dd3a,$4dda1 - $4dd3a
+INCBIN "baserom.gbc", $4dd3a, $4dda1 - $4dd3a
EggStatsInit: ; 4dda1
call EggStatsScreen
@@ -7615,7 +8317,7 @@ EggStatsInit: ; 4dda1
ret
; 0x4ddac
-INCBIN "baserom.gbc",$4ddac,$4e21e - $4ddac
+INCBIN "baserom.gbc", $4ddac, $4e21e - $4ddac
IDNoString: ; 4e21e
db $73, "№.@"
@@ -7624,7 +8326,7 @@ OTString: ; 4e222
db "OT/@"
; 4e226
-INCBIN "baserom.gbc",$4e226,$4e33a - $4e226
+INCBIN "baserom.gbc", $4e226, $4e33a - $4e226
EggStatsScreen: ; 4e33a
xor a
@@ -7701,18 +8403,18 @@ EggALotMoreTimeString: ; 0x4e46e
; 0x4e497
-INCBIN "baserom.gbc",$4e497,$4e831 - $4e497
+INCBIN "baserom.gbc", $4e497, $4e831 - $4e497
EvolutionGFX:
INCBIN "gfx/evo/bubble_large.2bpp"
INCBIN "gfx/evo/bubble.2bpp"
-INCBIN "baserom.gbc",$4e881,$4f31c - $4e881
+INCBIN "baserom.gbc", $4e881, $4f31c - $4e881
SECTION "bank14",DATA,BANK[$14]
-INCBIN "baserom.gbc",$50000,$5005f-$50000
+INCBIN "baserom.gbc", $50000, $5005f-$50000
WritePartyMenuTilemap: ; 0x5005f
ld hl, Options
@@ -7741,7 +8443,7 @@ WritePartyMenuTilemap: ; 0x5005f
ret
; 0x50089
-INCBIN "baserom.gbc",$50089,$50457-$50089
+INCBIN "baserom.gbc", $50089, $50457-$50089
PartyMenuSelect: ; 0x50457
; sets carry if exitted menu.
@@ -7844,11 +8546,93 @@ ToWhichPKMNString: ; 0x50549
YouHaveNoPKMNString: ; 0x50556
db "You have no ", $e1, $e2, "!@"
-INCBIN "baserom.gbc",$50566,$5097B-$50566
-dw Normal, Fighting, Flying, Poison, Ground, Rock, Bird, Bug, Ghost, Steel
-dw Normal, Normal, Normal, Normal, Normal, Normal, Normal, Normal, Normal
-dw UnknownType, Fire, Water, Grass, Electric, Psychic, Ice, Dragon, Dark
+INCBIN "baserom.gbc", $50566, $5093a - $50566
+
+
+PrintMoveType: ; 5093a
+; Print the type of move b at hl.
+
+ push hl
+ ld a, b
+ dec a
+ ld bc, Move2 - Move1
+ ld hl, Moves
+ call AddNTimes
+ ld de, StringBuffer1
+ ld a, BANK(Moves)
+ call FarCopyBytes
+ ld a, [StringBuffer1 + PlayerMoveType - PlayerMoveStruct]
+ pop hl
+
+ ld b, a
+; 50953
+
+PrintType: ; 50953
+; Print type b at hl.
+ ld a, b
+
+ push hl
+ add a
+ ld hl, TypeNames
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld a, [hli]
+ ld e, a
+ ld d, [hl]
+ pop hl
+
+ jp PlaceString
+; 50964
+
+
+LoadTypeName: ; 50964
+; Copy the name of type $d265 to StringBuffer1.
+ ld a, [$d265]
+ ld hl, TypeNames
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, StringBuffer1
+ ld bc, $000d
+ jp CopyBytes
+; 5097b
+
+
+TypeNames: ; 5097b
+ dw Normal
+ dw Fighting
+ dw Flying
+ dw Poison
+ dw Ground
+ dw Rock
+ dw Bird
+ dw Bug
+ dw Ghost
+ dw Steel
+ dw Normal
+ dw Normal
+ dw Normal
+ dw Normal
+ dw Normal
+ dw Normal
+ dw Normal
+ dw Normal
+ dw Normal
+ dw UnknownType
+ dw Fire
+ dw Water
+ dw Grass
+ dw Electric
+ dw Psychic
+ dw Ice
+ dw Dragon
+ dw Dark
Normal:
db "NORMAL@"
@@ -7888,6 +8672,8 @@ Dragon:
db "DRAGON@"
Dark:
db "DARK@"
+; 50a28
+
INCBIN "baserom.gbc", $50a28, $50bdd - $50a28
@@ -8018,7 +8804,7 @@ INCLUDE "stats/base_stats.asm"
PokemonNames:
INCLUDE "stats/pokemon_names.asm"
-INCBIN "baserom.gbc",$53D84,$53e2e - $53D84
+INCBIN "baserom.gbc", $53D84, $53e2e - $53D84
SECTION "bank15",DATA,BANK[$15]
@@ -8239,7 +9025,7 @@ INCLUDE "maps/Route12SuperRodHouse.asm"
SECTION "bank20",DATA,BANK[$20]
-INCBIN "baserom.gbc",$80000,$80430-$80000
+INCBIN "baserom.gbc", $80000, $80430-$80000
GetFlag2: ; 80430
; Do action b on flag de from BitTable2
@@ -8331,7 +9117,7 @@ INCLUDE "bittable2.asm"
; 80648
-INCBIN "baserom.gbc",$80648,$80730-$80648
+INCBIN "baserom.gbc", $80648, $80730-$80648
BattleText_0x80730: ; 0x80730
db $0, $52, " picked up", $4f
@@ -8700,52 +9486,52 @@ BattleText_0x80cd1: ; 0x80cd1
db "is angry!", $58
; 0x80ce7
-BattleText_0x80ce7: ; 0x80ce7
+FastAsleepText: ; 0x80ce7
db $0, $5a, $4f
db "is fast asleep!", $58
; 0x80cfa
-BattleText_0x80cfa: ; 0x80cfa
+WokeUpText: ; 0x80cfa
db $0, $5a, $4f
db "woke up!", $58
; 0x80d06
-BattleText_0x80d06: ; 0x80d06
+FrozenSolidText: ; 0x80d06
db $0, $5a, $4f
db "is frozen solid!", $58
; 0x80d1a
-BattleText_0x80d1a: ; 0x80d1a
+FlinchedText: ; 0x80d1a
db $0, $5a, $4f
db "flinched!", $58
; 0x80d27
-BattleText_0x80d27: ; 0x80d27
+MustRechargeText: ; 0x80d27
db $0, $5a, $4f
db "must recharge!", $58
; 0x80d39
-BattleText_0x80d39: ; 0x80d39
+DisabledNoMoreText: ; 0x80d39
db $0, $5a, "'s", $4f
db "disabled no more!", $58
; 0x80d4f
-BattleText_0x80d4f: ; 0x80d4f
+IsConfusedText: ; 0x80d4f
db $0, $5a, $4f
db "is confused!", $58
; 0x80d5f
-BattleText_0x80d5f: ; 0x80d5f
+HurtItselfText: ; 0x80d5f
db $0, "It hurt itself in", $4f
db "its confusion!", $58
; 0x80d81
-BattleText_0x80d81: ; 0x80d81
+ConfusedNoMoreText: ; 0x80d81
db $0, $5a, "'s", $4f
db "confused no more!", $58
; 0x80d97
-BattleText_0x80d97: ; 0x80d97
+BecameConfusedText: ; 0x80d97
db $0, $59, $4f
db "became confused!", $58
; 0x80dab
@@ -8758,7 +9544,7 @@ BattleText_0x80dab: ; 0x80dab
db "of its confusion.", $58
; 0x80dcc
-BattleText_0x80dcc: ; 0x80dcc
+AlreadyConfusedText: ; 0x80dcc
db $0, $59, "'s", $4f
db "already confused!", $58
; 0x80de2
@@ -8779,45 +9565,45 @@ BattleText_0x80df5: ; 0x80df5
db $0, "!", $58
; 0x80e11
-BattleText_0x80e11: ; 0x80e11
+UsedBindText: ; 0x80e11
db $0, $5a, $4f
db "used BIND on", $55
db $59, "!", $58
; 0x80e24
-BattleText_0x80e24: ; 0x80e24
+WhirlpoolTrapText: ; 0x80e24
db $0, $59, $4f
db "was trapped!", $58
; 0x80e34
-BattleText_0x80e34: ; 0x80e34
+FireSpinTrapText: ; 0x80e34
db $0, $59, $4f
db "was trapped!", $58
; 0x80e44
-BattleText_0x80e44: ; 0x80e44
+WrappedByText: ; 0x80e44
db $0, $59, $4f
db "was WRAPPED by", $55
db $5a, "!", $58
; 0x80e59
-BattleText_0x80e59: ; 0x80e59
+ClampedByText: ; 0x80e59
db $0, $59, $4f
db "was CLAMPED by", $55
db $5a, "!", $58
; 0x80e6e
-BattleText_0x80e6e: ; 0x80e6e
+StoringEnergyText: ; 0x80e6e
db $0, $5a, $4f
db "is storing energy!", $58
; 0x80e84
-BattleText_0x80e84: ; 0x80e84
+UnleashedEnergyText: ; 0x80e84
db $0, $5a, $4f
db "unleashed energy!", $58
; 0x80e99
-BattleText_0x80e99: ; 0x80e99
+HungOnText: ; 0x80e99
db $0, $59, $4f
db "hung on with", $55
db "@"
@@ -8825,24 +9611,24 @@ BattleText_0x80e99: ; 0x80e99
db $0, "!", $58
; 0x80eb0
-BattleText_0x80eb0: ; 0x80eb0
+EnduredText: ; 0x80eb0
db $0, $59, $4f
db "ENDURED the hit!", $58
; 0x80ec4
-BattleText_0x80ec4: ; 0x80ec4
+InLoveWithText: ; 0x80ec4
db $0, $5a, $4f
db "is in love with", $55
db $59, "!", $58
; 0x80eda
-BattleText_0x80eda: ; 0x80eda
+InfatuationText: ; 0x80eda
db $0, $5a, "'s", $4f
db "infatuation kept", $55
db "it from attacking!", $58
; 0x80f02
-BattleText_0x80f02: ; 0x80f02
+DisabledMoveText: ; 0x80f02
db $0, $5a, "'s", $4f
db "@"
text_from_ram $d073
@@ -8850,48 +9636,48 @@ BattleText_0x80f02: ; 0x80f02
db "DISABLED!", $58
; 0x80f19
-BattleText_0x80f19: ; 0x80f19
+LoafingAroundText: ; 0x80f19
text_from_ram $c621
db $0, " is", $4f
db "loafing around.", $58
; 0x80f31
-BattleText_0x80f31: ; 0x80f31
+BeganToNapText: ; 0x80f31
text_from_ram $c621
db $0, " began", $4f
db "to nap!", $58
; 0x80f44
-BattleText_0x80f44: ; 0x80f44
+WontObeyText: ; 0x80f44
text_from_ram $c621
db $0, " won't", $4f
db "obey!", $58
; 0x80f54
-BattleText_0x80f54: ; 0x80f54
+TurnedAwayText: ; 0x80f54
text_from_ram $c621
db $0, " turned", $4f
db "away!", $58
; 0x80f66
-BattleText_0x80f66: ; 0x80f66
+IgnoredOrdersText: ; 0x80f66
text_from_ram $c621
db $0, " ignored", $4f
db "orders!", $58
; 0x80f7b
-BattleText_0x80f7b: ; 0x80f7b
+IgnoredSleepingText: ; 0x80f7b
text_from_ram $c621
db $0, " ignored", $4f
db "orders…sleeping!", $58
; 0x80f99
-BattleText_0x80f99: ; 0x80f99
+NoPPLeftText: ; 0x80f99
db $0, "But no PP is left", $4f
db "for the move!", $58
; 0x80fba
-BattleText_0x80fba: ; 0x80fba
+HasNoPPLeftText: ; 0x80fba
db $0, $5a, $4f
db "has no PP left for", $55
db "@"
@@ -8899,93 +9685,93 @@ BattleText_0x80fba: ; 0x80fba
db $0, "!", $58
; 0x80fd7
-BattleText_0x80fd7: ; 0x80fd7
+WentToSleepText: ; 0x80fd7
db $0, $5a, $4f
db "went to sleep!", $57
; 0x80fe9
-BattleText_0x80fe9: ; 0x80fe9
+RestedText: ; 0x80fe9
db $0, $5a, $4f
db "fell asleep and", $55
db "became healthy!", $57
; 0x8100c
-BattleText_0x8100c: ; 0x8100c
+RegainedHealthText: ; 0x8100c
db $0, $5a, $4f
db "regained health!", $58
; 0x81020
-BattleText_0x81020: ; 0x81020
+AttackMissedText: ; 0x81020
db $0, $5a, "'s", $4f
db "attack missed!", $58
; 0x81033
-BattleText_0x81033: ; 0x81033
+AttackMissed2Text: ; 0x81033
db $0, $5a, "'s", $4f
db "attack missed!", $58
; 0x81046
-BattleText_0x81046: ; 0x81046
+CrashedText: ; 0x81046
db $0, $5a, $4f
db "kept going and", $55
db "crashed!", $58
; 0x81061
-BattleText_0x81061: ; 0x81061
+UnaffectedText: ; 0x81061
db $0, $59, "'s", $4f
db "unaffected!", $58
; 0x81071
-BattleText_0x81071: ; 0x81071
+DoesntAffectText: ; 0x81071
db $0, "It doesn't affect", $4f
db $59, "!", $58
; 0x81086
-BattleText_0x81086: ; 0x81086
+CriticalHitText: ; 0x81086
db $0, "A critical hit!", $58
; 0x81097
-BattleText_0x81097: ; 0x81097
+OneHitKOText: ; 0x81097
db $0, "It's a one-hit KO!", $58
; 0x810aa
-BattleText_0x810aa: ; 0x810aa
+SuperEffectiveText: ; 0x810aa
db $0, "It's super-", $4f
db "effective!", $58
; 0x810c1
-BattleText_0x810c1: ; 0x810c1
+NotVeryEffectiveText: ; 0x810c1
db $0, "It's not very", $4f
db "effective…", $58
; 0x810da
-BattleText_0x810da: ; 0x810da
+TookDownWithItText: ; 0x810da
db $0, $59, $4f
db "took down with it,", $55
db $5a, "!", $58
; 0x810f3
-BattleText_0x810f3: ; 0x810f3
+RageBuildingText: ; 0x810f3
db $0, $5a, "'s", $4f
db "RAGE is building!", $58
; 0x81109
-BattleText_0x81109: ; 0x81109
+GotAnEncoreText: ; 0x81109
db $0, $59, $4f
db "got an ENCORE!", $58
; 0x8111b
-BattleText_0x8111b: ; 0x8111b
+SharedPainText: ; 0x8111b
db $0, "The battlers", $4f
db "shared pain!", $58
; 0x81136
-BattleText_0x81136: ; 0x81136
+TookAimText: ; 0x81136
db $0, $5a, $4f
db "took aim!", $58
; 0x81143
-BattleText_0x81143: ; 0x81143
+SketchedText: ; 0x81143
db $0, $5a, $4f
db "SKETCHED", $55
db "@"
@@ -8993,13 +9779,13 @@ BattleText_0x81143: ; 0x81143
db $0, "!", $58
; 0x81156
-BattleText_0x81156: ; 0x81156
+DestinyBondEffectText: ; 0x81156
db $0, $5a, "'s", $4f
db "trying to take its", $55
db "opponent with it!", $58
; 0x8117f
-BattleText_0x8117f: ; 0x8117f
+SpiteEffectText: ; 0x8117f
db $0, $59, "'s", $4f
db "@"
text_from_ram $d073
@@ -9009,62 +9795,62 @@ BattleText_0x8117f: ; 0x8117f
db $0, "!", $58
; 0x811a0
-BattleText_0x811a0: ; 0x811a0
+BellChimedText: ; 0x811a0
db $0, "A bell chimed!", $4f
db $58
; 0x811b1
-BattleText_0x811b1: ; 0x811b1
+FellAsleepText: ; 0x811b1
db $0, $59, $4f
db "fell asleep!", $58
; 0x811c1
-BattleText_0x811c1: ; 0x811c1
+AlreadyAsleepText: ; 0x811c1
db $0, $59, "'s", $4f
db "already asleep!", $58
; 0x811d5
-BattleText_0x811d5: ; 0x811d5
+WasPoisonedText: ; 0x811d5
db $0, $59, $4f
db "was poisoned!", $58
; 0x811e6
-BattleText_0x811e6: ; 0x811e6
+BadlyPoisonedText: ; 0x811e6
db $0, $59, "'s", $4f
db "badly poisoned!", $58
; 0x811fa
-BattleText_0x811fa: ; 0x811fa
+AlreadyPoisonedText: ; 0x811fa
db $0, $59, "'s", $4f
db "already poisoned!", $58
; 0x81210
-BattleText_0x81210: ; 0x81210
+SuckedHealthText: ; 0x81210
db $0, "Sucked health from", $4f
db $59, "!", $58
; 0x81227
-BattleText_0x81227: ; 0x81227
+DreamEatenText: ; 0x81227
db $0, $59, "'s", $4f
db "dream was eaten!", $58
; 0x8123c
-BattleText_0x8123c: ; 0x8123c
+WasBurnedText: ; 0x8123c
db $0, $59, $4f
db "was burned!", $58
; 0x8124b
-BattleText_0x8124b: ; 0x8124b
+DefrostedOpponentText: ; 0x8124b
db $0, $59, $4f
db "was defrosted!", $58
; 0x8125d
-BattleText_0x8125d: ; 0x8125d
+WasFrozenText: ; 0x8125d
db $0, $59, $4f
db "was frozen solid!", $58
; 0x81272
-BattleText_0x81272: ; 0x81272
+WontRiseAnymoreText: ; 0x81272
db $0, $5a, "'s", $4f
db "@"
text_from_ram $d086
@@ -9072,7 +9858,7 @@ BattleText_0x81272: ; 0x81272
db "rise anymore!", $58
; 0x8128f
-BattleText_0x8128f: ; 0x8128f
+WontDropAnymoreText: ; 0x8128f
db $0, $59, "'s", $4f
db "@"
text_from_ram $d086
@@ -9080,81 +9866,81 @@ BattleText_0x8128f: ; 0x8128f
db "drop anymore!", $58
; 0x812ac
-BattleText_0x812ac: ; 0x812ac
+FledFromBattleText: ; 0x812ac
db $0, $5a, $4f
db "fled from battle!", $58
; 0x812c1
-BattleText_0x812c1: ; 0x812c1
+FledInFearText: ; 0x812c1
db $0, $59, $4f
db "fled in fear!", $58
; 0x812d2
-BattleText_0x812d2: ; 0x812d2
+BlownAwayText: ; 0x812d2
db $0, $59, $4f
db "was blown away!", $58
; 0x812e5
-BattleText_0x812e5: ; 0x812e5
+PlayerHitTimesText: ; 0x812e5
db $0, "Hit @"
deciram $c682, $11
db $0, " times!", $58
; 0x812f8
-BattleText_0x812f8: ; 0x812f8
+EnemyHitTimesText: ; 0x812f8
db $0, "Hit @"
deciram $c684, $11
db $0, " times!", $58
; 0x8130b
-BattleText_0x8130b: ; 0x8130b
+MistText: ; 0x8130b
db $0, $5a, "'s", $4f
db "shrouded in MIST!", $58
; 0x81321
-BattleText_0x81321: ; 0x81321
+ProtectedByMistText: ; 0x81321
db $0, $59, "'s", $4f
db "protected by MIST.", $58
; 0x81338
-BattleText_0x81338: ; 0x81338
+GettingPumpedText: ; 0x81338
interpret_data
db $0, $5a, "'s", $4f
db "getting pumped!", $58
; 0x8134d
-BattleText_0x8134d: ; 0x8134d
+RecoilText: ; 0x8134d
db $0, $5a, "'s", $4f
db "hit with recoil!", $58
; 0x81362
-BattleText_0x81362: ; 0x81362
+MadeSubstituteText: ; 0x81362
db $0, $5a, $4f
db "made a SUBSTITUTE!", $58
; 0x81378
-BattleText_0x81378: ; 0x81378
+HasSubstituteText: ; 0x81378
db $0, $5a, $4f
db "has a SUBSTITUTE!", $58
; 0x8138d
-BattleText_0x8138d: ; 0x8138d
+TooWeakSubText: ; 0x8138d
db $0, "Too weak to make", $4f
db "a SUBSTITUTE!", $58
; 0x813ad
-BattleText_0x813ad: ; 0x813ad
+SubTookDamageText: ; 0x813ad
db $0, "The SUBSTITUTE", $4f
db "took damage for", $55
db $59, "!", $58
; 0x813d0
-BattleText_0x813d0: ; 0x813d0
+SubFadedText: ; 0x813d0
db $0, $59, "'s", $4f
db "SUBSTITUTE faded!", $58
; 0x813e6
-BattleText_0x813e6: ; 0x813e6
+LearnedMoveText: ; 0x813e6
db $0, $5a, $4f
db "learned", $55
db "@"
@@ -9162,17 +9948,17 @@ BattleText_0x813e6: ; 0x813e6
db $0, "!", $58
; 0x813f8
-BattleText_0x813f8: ; 0x813f8
+WasSeededText: ; 0x813f8
db $0, $59, $4f
db "was seeded!", $58
; 0x81407
-BattleText_0x81407: ; 0x81407
+EvadedText: ; 0x81407
db $0, $59, $4f
db "evaded the attack!", $58
; 0x8141d
-BattleText_0x8141d: ; 0x8141d
+WasDisabledText: ; 0x8141d
db $0, $59, "'s", $4f
db "@"
text_from_ram $d073
@@ -9180,12 +9966,12 @@ BattleText_0x8141d: ; 0x8141d
db "DISABLED!", $58
; 0x81435
-BattleText_0x81435: ; 0x81435
+CoinsScatteredText: ; 0x81435
db $0, "Coins scattered", $4f
db "everywhere!", $58
; 0x81452
-BattleText_0x81452: ; 0x81452
+TransformedTypeText: ; 0x81452
db $0, $5a, $4f
db "transformed into", $55
db "the @"
@@ -9193,12 +9979,12 @@ BattleText_0x81452: ; 0x81452
db $0, "-type!", $58
; 0x81476
-BattleText_0x81476: ; 0x81476
+EliminatedStatsText: ; 0x81476
db $0, "All stat changes", $4f
db "were eliminated!", $58
; 0x81499
-BattleText_0x81499: ; 0x81499
+TransformedText: ; 0x81499
db $0, $5a, $4f
db "TRANSFORMED into", $55
db "@"
@@ -9206,66 +9992,66 @@ BattleText_0x81499: ; 0x81499
db $0, "!", $58
; 0x814b4
-BattleText_0x814b4: ; 0x814b4
+LightScreenEffectText: ; 0x814b4
db $0, $5a, "'s", $4f
db "SPCL.DEF rose!", $58
; 0x814c7
-BattleText_0x814c7: ; 0x814c7
+ReflectEffectText: ; 0x814c7
db $0, $5a, "'s", $4f
db "DEFENSE rose!", $58
; 0x814d9
-BattleText_0x814d9: ; 0x814d9
+NothingHappenedText: ; 0x814d9
db $0, "But nothing", $4f
db "happened.", $58
; 0x814f0
-BattleText_0x814f0: ; 0x814f0
+ButItFailedText: ; 0x814f0
db $0, "But it failed!", $58
; 0x81500
-BattleText_0x81500: ; 0x81500
+ItFailedText: ; 0x81500
db $0, "It failed!", $58
; 0x8150c
-BattleText_0x8150c: ; 0x8150c
+DidntAffect1Text: ; 0x8150c
db $0, "It didn't affect", $4f
db $59, "!", $58
; 0x81520
-BattleText_0x81520: ; 0x81520
+DidntAffect2Text: ; 0x81520
db $0, "It didn't affect", $4f
db $59, "!", $58
; 0x81534
-BattleText_0x81534: ; 0x81534
+HPIsFullText: ; 0x81534
db $0, $5a, "'s", $4f
db "HP is full!", $58
; 0x81544
-BattleText_0x81544: ; 0x81544
+DraggedOutText: ; 0x81544
db $0, $5a, $4f
db "was dragged out!", $58
; 0x81558
-BattleText_0x81558: ; 0x81558
+ParalyzedText: ; 0x81558
db $0, $59, "'s", $4f
db "paralyzed! Maybe", $55
db "it can't attack!", $58
; 0x8157d
-BattleText_0x8157d: ; 0x8157d
+FullyParalyzedText: ; 0x8157d
db $0, $5a, "'s", $4f
db "fully paralyzed!", $58
; 0x81592
-BattleText_0x81592: ; 0x81592
+AlreadyParalyzedText: ; 0x81592
db $0, $59, "'s", $4f
db "already paralyzed!", $58
; 0x815a9
-BattleText_0x815a9: ; 0x815a9
+ProtectedByText: ; 0x815a9
db $0, $59, "'s", $4f
db "protected by", $55
db "@"
@@ -9273,11 +10059,11 @@ BattleText_0x815a9: ; 0x815a9
db $0, "!", $58
; 0x815c1
-BattleText_0x815c1: ; 0x815c1
+MirrorMoveFailedText: ; 0x815c1
db $0, "The MIRROR MOVE", $4e, "failed!", $58
; 0x815da
-BattleText_0x815da: ; 0x815da
+StoleText: ; 0x815da
db $0, $5a, $4f
db "stole @"
text_from_ram $d073
@@ -9285,144 +10071,144 @@ BattleText_0x815da: ; 0x815da
db "from its foe!", $58
; 0x815f7
-BattleText_0x815f7: ; 0x815f7
+CantEscapeNowText: ; 0x815f7
db $0, $59, $4f
db "can't escape now!", $58
; 0x8160b
-BattleText_0x8160b: ; 0x8160b
+StartedNightmareText: ; 0x8160b
db $0, $59, $4f
db "started to have a", $55
db "NIGHTMARE!", $58
; 0x8162b
-BattleText_0x8162b: ; 0x8162b
+WasDefrostedText: ; 0x8162b
db $0, $5a, $4f
db "was defrosted!", $58
; 0x8163d
-BattleText_0x8163d: ; 0x8163d
+PutACurseText: ; 0x8163d
db $0, $5a, $4f
db "cut its own HP and", $51
db "put a CURSE on", $4f
db $59, "!", $58
; 0x81665
-BattleText_0x81665: ; 0x81665
+ProtectedItselfText: ; 0x81665
db $0, $5a, $4f
db "PROTECTED itself!", $58
; 0x8167a
-BattleText_0x8167a: ; 0x8167a
+ProtectingItselfText: ; 0x8167a
db $0, $59, "'s", $4f
db "PROTECTING itself!", $57
; 0x81691
-BattleText_0x81691: ; 0x81691
+SpikesText: ; 0x81691
db $0, "SPIKES scattered", $4f
db "all around", $55
db $59, "!", $58
; 0x816b1
-BattleText_0x816b1: ; 0x816b1
+IdentifiedText: ; 0x816b1
db $0, $5a, $4f
db "identified", $55
db $59, "!", $58
; 0x816c2
-BattleText_0x816c2: ; 0x816c2
+StartPerishText: ; 0x816c2
db $0, "Both #MON will", $4f
db "faint in 3 turns!", $58
; 0x816e4
-BattleText_0x816e4: ; 0x816e4
+SandstormBrewedText: ; 0x816e4
db $0, "A SANDSTORM", $4f
db "brewed!", $58
; 0x816f9
-BattleText_0x816f9: ; 0x816f9
+BracedItselfText: ; 0x816f9
db $0, $5a, $4f
db "braced itself!", $58
; 0x8170b
-BattleText_0x8170b: ; 0x8170b
+FellInLoveText: ; 0x8170b
db $0, $59, $4f
db "fell in love!", $58
; 0x8171c
-BattleText_0x8171c: ; 0x8171c
+CoveredByVeilText: ; 0x8171c
db $0, $5a, "'s", $4f
db "covered by a veil!", $58
; 0x81733
-BattleText_0x81733: ; 0x81733
+SafeguardProtectText: ; 0x81733
db $0, $59, $4f
db "is protected by", $55
db "SAFEGUARD!", $58
; 0x81751
-BattleText_0x81751: ; 0x81751
+MagnitudeText: ; 0x81751
db $0, "Magnitude @"
deciram $d265, $11
db $0, "!", $58
; 0x81764
-BattleText_0x81764: ; 0x81764
+ReleasedByText: ; 0x81764
db $0, $5a, $4f
db "was released by", $55
db $59, "!", $58
; 0x8177a
-BattleText_0x8177a: ; 0x8177a
+ShedLeechSeedText: ; 0x8177a
db $0, $5a, $4f
db "shed LEECH SEED!", $58
; 0x8178e
-BattleText_0x8178e: ; 0x8178e
+BlewSpikesText: ; 0x8178e
db $0, $5a, $4f
db "blew away SPIKES!", $58
; 0x817a3
-BattleText_0x817a3: ; 0x817a3
+DownpourText: ; 0x817a3
db $0, "A downpour", $4f
db "started!", $58
; 0x817b8
-BattleText_0x817b8: ; 0x817b8
+SunGotBrightText: ; 0x817b8
db $0, "The sunlight got", $4f
db "bright!", $58
; 0x817d2
-BattleText_0x817d2: ; 0x817d2
+BellyDrumText: ; 0x817d2
db $0, $5a, $4f
db "cut its HP and", $55
db "maximized ATTACK!", $58
; 0x817f6
-BattleText_0x817f6: ; 0x817f6
+CopiedStatsText: ; 0x817f6
db $0, $5a, $4f
db "copied the stat", $51
db "changes of", $4f
db $59, "!", $58
; 0x81817
-BattleText_0x81817: ; 0x81817
+ForesawAttackText: ; 0x81817
db $0, $5a, $4f
db "foresaw an attack!", $58
; 0x8182d
-BattleText_0x8182d: ; 0x8182d
+BeatUpAttackText: ; 0x8182d
text_from_ram $d073
db $0, "'s", $4f
db "attack!", $57
; 0x8183b
-BattleText_0x8183b: ; 0x8183b
+RefusedGiftText: ; 0x8183b
db $0, $59, $4f
db "refused the gift!", $58
; 0x81850
-BattleText_0x81850: ; 0x81850
+IgnoredOrders2Text: ; 0x81850
db $0, $5a, $4f
db "ignored orders!", $58
; 0x81863
@@ -9438,12 +10224,12 @@ BattleText_0x8188e: ; 0x8188e
db "left today!", $57
; 0x818ac
-INCBIN "baserom.gbc",$818ac,$81fe3-$818ac
+INCBIN "baserom.gbc", $818ac, $81fe3-$818ac
DebugColorTestGFX:
INCBIN "gfx/debug/color_test.2bpp"
-INCBIN "baserom.gbc",$82153,$823c8-$82153
+INCBIN "baserom.gbc", $82153, $823c8-$82153
SECTION "bank21",DATA,BANK[$21]
@@ -9730,7 +10516,7 @@ INCBIN "baserom.gbc", $86455, $88000 - $86455
SECTION "bank22",DATA,BANK[$22]
-INCBIN "baserom.gbc",$88000,$8832c - $88000
+INCBIN "baserom.gbc", $88000, $8832c - $88000
GetPlayerIcon: ; 8832c
; Get the player icon corresponding to gender
@@ -9751,7 +10537,7 @@ GetPlayerIcon: ; 8832c
ret
; 8833e
-INCBIN "baserom.gbc",$8833e,$896ff - $8833e
+INCBIN "baserom.gbc", $8833e, $896ff - $8833e
ClearScreenArea: ; 0x896ff
; clears an area of the screen
@@ -9788,7 +10574,7 @@ ClearScreenArea: ; 0x896ff
ret
; 0x8971f
-INCBIN "baserom.gbc",$8971f,$8addb - $8971f
+INCBIN "baserom.gbc", $8971f, $8addb - $8971f
SpecialHoOhChamber: ; 0x8addb
ld hl, PartySpecies
@@ -9803,7 +10589,7 @@ SpecialHoOhChamber: ; 0x8addb
ret
; 0x8adef
-INCBIN "baserom.gbc",$8adef,$8b170 - $8adef
+INCBIN "baserom.gbc", $8adef, $8b170 - $8adef
SpecialDratini: ; 0x8b170
; if ScriptVar is 0 or 1, change the moveset of the last Dratini in the party.
@@ -9858,8 +10644,8 @@ SpecialDratini: ; 0x8b170
; get the PP of the new move
dec a
- ld hl, Moves + 5
- ld bc, Move1 - Move0
+ ld hl, Moves + PlayerMovePP - PlayerMoveStruct
+ ld bc, Move2 - Move1
call AddNTimes
ld a, BANK(Moves)
call GetFarByte
@@ -9916,12 +10702,12 @@ GetNthPartyMon: ; 0x8b1ce
scf
ret
-INCBIN "baserom.gbc",$8b1e1,$8ba24-$8b1e1
+INCBIN "baserom.gbc", $8b1e1, $8ba24-$8b1e1
SECTION "bank23",DATA,BANK[$23]
-INCBIN "baserom.gbc",$8c000,$8c011 - $8c000
+INCBIN "baserom.gbc", $8c000, $8c011 - $8c000
TimeOfDayPals: ; 8c011
; return carry if pals are changed
@@ -10031,7 +10817,7 @@ UpdateTimePals: ; 8c070
ret
; 8c079
-INCBIN "baserom.gbc",$8c079,$8c117 - $8c079
+INCBIN "baserom.gbc", $8c079, $8c117 - $8c079
GetTimePalette: ; 8c117
; get time of day
@@ -10100,7 +10886,7 @@ DmgToCgbTimePals: ; 8c14e
ret
; 8c15e
-INCBIN "baserom.gbc",$8c15e,$8c17c - $8c15e
+INCBIN "baserom.gbc", $8c15e, $8c17c - $8c15e
GetTimePalFade: ; 8c17c
; check cgb
@@ -10295,7 +11081,7 @@ GetTimePalFade: ; 8c17c
db %00000000
; 8c20f
-INCBIN "baserom.gbc",$8c20f,$8e9ac - $8c20f
+INCBIN "baserom.gbc", $8c20f, $8e9ac - $8c20f
GetSpeciesIcon: ; 8e9ac
; Load species icon into VRAM at tile a
@@ -10309,7 +11095,7 @@ GetSpeciesIcon: ; 8e9ac
ret
; 8e9bc
-INCBIN "baserom.gbc",$8e9bc,$8e9de - $8e9bc
+INCBIN "baserom.gbc", $8e9bc, $8e9de - $8e9bc
GetIconGFX: ; 8e9de
call GetIcon_a
@@ -10379,7 +11165,7 @@ GetGFXUnlessMobile: ; 8ea3f
jp $dc9
; 8ea4a
-INCBIN "baserom.gbc",$8ea4a,$8eab3 - $8ea4a
+INCBIN "baserom.gbc", $8ea4a, $8eab3 - $8ea4a
ReadMonMenuIcon: ; 8eab3
cp EGG
@@ -10733,7 +11519,7 @@ BigmonIcon: INCBIN "gfx/icon/bigmon.2bpp" ; 0x8fe8d
SECTION "bank24",DATA,BANK[$24]
-INCBIN "baserom.gbc",$90000,$909F2-$90000
+INCBIN "baserom.gbc", $90000, $909F2-$90000
dw Sunday
dw Monday
@@ -11260,11 +12046,11 @@ INCLUDE "maps/map_headers.asm"
INCLUDE "maps/second_map_headers.asm"
-INCBIN "baserom.gbc",$966b0,$96cb1 - $966b0
+INCBIN "baserom.gbc", $966b0, $96cb1 - $966b0
INCLUDE "scripting.asm"
-INCBIN "baserom.gbc",$97c20,$35e
+INCBIN "baserom.gbc", $97c20, $35e
SECTION "bank26",DATA,BANK[$26]
@@ -11322,12 +12108,12 @@ INCLUDE "maps/BattleTowerOutside.asm"
SECTION "bank28",DATA,BANK[$28]
-INCBIN "baserom.gbc",$a0000,$a1eca - $a0000
+INCBIN "baserom.gbc", $a0000, $a1eca - $a0000
SECTION "bank29",DATA,BANK[$29]
-INCBIN "baserom.gbc",$a4000,$a64ad - $a4000
+INCBIN "baserom.gbc", $a4000, $a64ad - $a4000
SECTION "bank2A",DATA,BANK[$2A]
@@ -11352,7 +12138,9 @@ Route28_BlockData: ; 0xa8492
INCBIN "maps/Route28.blk"
; 0xa8546
-INCBIN "baserom.gbc",$a8546,$a8552 - $a8546
+BetaHerosHouse_BlockData: ; 0xa8546
+ INCBIN "maps/BetaHerosHouse.blk"
+; 0xa8552
CeladonCity_BlockData: ; 0xa8552
INCBIN "maps/CeladonCity.blk"
@@ -11370,25 +12158,33 @@ ElmsHouse_BlockData: ; 0xa8930
INCBIN "maps/ElmsHouse.blk"
; 0xa8940
-INCBIN "baserom.gbc",$a8940,$5a
+BetaSproutTower1_BlockData: ; 0xa8940
+ INCBIN "maps/BetaSproutTower1.blk"
+; 0xa899a
Route11_BlockData: ; 0xa899a
INCBIN "maps/Route11.blk"
; 0xa8a4e
-INCBIN "baserom.gbc",$a8a4e,$a8aa8 - $a8a4e
+BetaSproutTower5_BlockData: ; 0xa8a4e
+ INCBIN "maps/BetaSproutTower5.blk"
+; 0xa8aa8
Route15_BlockData: ; 0xa8aa8
INCBIN "maps/Route15.blk"
; 0xa8b5c
-INCBIN "baserom.gbc",$a8b5c,$24
+BetaSproutTower9_BlockData: ; 0xa8b5c
+ INCBIN "maps/BetaSproutTower9.blk"
+; 0xa8b80
Route19_BlockData: ; 0xa8b80
INCBIN "maps/Route19.blk"
; 0xa8c34
-INCBIN "baserom.gbc",$a8c34,$a8d9c - $a8c34
+BetaBlackthornCity_BlockData: ; 0xa8c34
+ INCBIN "maps/BetaBlackthornCity.blk"
+; 0xa8d9c
Route10South_BlockData: ; 0xa8d9c
INCBIN "maps/Route10South.blk"
@@ -11434,7 +12230,9 @@ Route24_BlockData: ; 0xa95ff
INCBIN "maps/Route24.blk"
; 0xa9659
-INCBIN "baserom.gbc",$a9659,$a97c1 - $a9659
+BetaVioletCity_BlockData: ; 0xa9659
+ INCBIN "maps/BetaVioletCity.blk"
+; 0xa97c1
Route3_BlockData: ; 0xa97c1
INCBIN "maps/Route3.blk"
@@ -11444,19 +12242,33 @@ PewterCity_BlockData: ; 0xa98cf
INCBIN "maps/PewterCity.blk"
; 0xa9a37
-INCBIN "baserom.gbc",$a9a37,$a9bf9 - $a9a37
+BetaIlexForest_BlockData: ; 0xa9a37
+ INCBIN "maps/BetaIlexForest.blk"
+; 0xa9b9f
+
+BetaSproutTower2_BlockData: ; 0xa9b9f
+ INCBIN "maps/BetaSproutTower2.blk"
+; 0xa9bf9
Route12_BlockData: ; 0xa9bf9
INCBIN "maps/Route12.blk"
; 0xa9d07
-INCBIN "baserom.gbc",$a9d07,$168
+BetaGoldenrodCity_BlockData: ; 0xa9d07
+ INCBIN "maps/BetaGoldenrodCity.blk"
+; 0xa9e6f
Route20_BlockData: ; 0xa9e6f
INCBIN "maps/Route20.blk"
; 0xa9f7d
-INCBIN "baserom.gbc",$a9f7d,$a9ff7 - $a9f7d
+BetaSproutTower6_BlockData: ; 0xa9f7d
+ INCBIN "maps/BetaSproutTower6.blk"
+; 0xa9fd7
+
+BetaPokecenterMainHouse_BlockData: ; 0xa9fd7
+ INCBIN "maps/BetaPokecenterMainHouse.blk"
+; 0xa9ff7
Route30_BlockData: ; 0xa9ff7
INCBIN "maps/Route30.blk"
@@ -11486,7 +12298,9 @@ Route38_BlockData: ; 0xaa759
INCBIN "maps/Route38.blk"
; 0xaa80d
-INCBIN "baserom.gbc",$aa80d,$5a
+BetaCianwoodCity_BlockData: ; 0xaa80d
+ INCBIN "maps/BetaCianwoodCity.blk"
+; 0xaa867
OlivineVoltorbHouse_BlockData: ; 0xaa867
INCBIN "maps/OlivineVoltorbHouse.blk"
@@ -11496,7 +12310,13 @@ SafariZoneFuchsiaGateBeta_BlockData: ; 0xaa877
INCBIN "maps/SafariZoneFuchsiaGateBeta.blk"
; 0xaa88b
-INCBIN "baserom.gbc",$aa88b,$aaa4d - $aa88b
+BetaTeakCity_BlockData: ; 0xaa88b
+ INCBIN "maps/BetaTeakCity.blk"
+; 0xaa9f3
+
+BetaCherrygroveCity_BlockData: ; 0xaa9f3
+ INCBIN "maps/BetaCherrygroveCity.blk"
+; 0xaaa4d
CinnabarIsland_BlockData: ; 0xaaa4d
INCBIN "maps/CinnabarIsland.blk"
@@ -11510,7 +12330,9 @@ Route8_BlockData: ; 0xaab5b
INCBIN "maps/Route8.blk"
; 0xaac0f
-INCBIN "baserom.gbc",$aac0f,$aac69 - $aac0f
+BetaSproutTower3_BlockData: ; 0xaac0f
+ INCBIN "maps/BetaSproutTower3.blk"
+; 0xaac69
ViridianCity_BlockData: ; 0xaac69
INCBIN "maps/ViridianCity.blk"
@@ -11524,13 +12346,17 @@ Route21_BlockData: ; 0xaaedf
INCBIN "maps/Route21.blk"
; 0xaaf93
-INCBIN "baserom.gbc",$aaf93,$aafed - $aaf93
+BetaSproutTower7_BlockData: ; 0xaaf93
+ INCBIN "maps/BetaSproutTower7.blk"
+; 0xaafed
Route17_BlockData: ; 0xaafed
INCBIN "maps/Route17.blk"
; 0xab1af
-INCBIN "baserom.gbc",$ab1af,$ab209 - $ab1af
+BetaMahoganyTown_BlockData: ; 0xab1af
+ INCBIN "maps/BetaMahoganyTown.blk"
+; 0xab209
Route31_BlockData: ; 0xab209
INCBIN "maps/Route31.blk"
@@ -11560,13 +12386,21 @@ Route38EcruteakGate_BlockData: ; 0xab6af
INCBIN "maps/Route38EcruteakGate.blk"
; 0xab6c3
-INCBIN "baserom.gbc",$ab6c3,$ab82b - $ab6c3
+BetaAzaleaTown_BlockData: ; 0xab6c3
+ INCBIN "maps/BetaAzaleaTown.blk"
+; 0xab82b
VermilionCity_BlockData: ; 0xab82b
INCBIN "maps/VermilionCity.blk"
; 0xab993
-INCBIN "baserom.gbc",$ab993,$abb55 - $ab993
+BetaOlivineCity_BlockData: ; 0xab993
+ INCBIN "maps/BetaOlivineCity.blk"
+; 0xabafb
+
+BetaNewBarkTown_BlockData: ; 0xabafb
+ INCBIN "maps/BetaNewBarkTown.blk"
+; 0xabb55
ElmsLab_BlockData: ; 0xabb55
INCBIN "maps/ElmsLab.blk"
@@ -11599,7 +12433,9 @@ Route14_BlockData: ; 0xac000
INCBIN "maps/Route14.blk"
; 0xac0b4
-INCBIN "baserom.gbc",$ac0b4,$5a
+BetaSproutTower8_BlockData: ; 0xac0b4
+ INCBIN "maps/BetaSproutTower8.blk"
+; 0xac10e
OlivineMart_BlockData: ; 0xac10e
INCBIN "maps/OlivineMart.blk"
@@ -11609,19 +12445,41 @@ Route10North_BlockData: ; 0xac126
INCBIN "maps/Route10North.blk"
; 0xac180
-INCBIN "baserom.gbc",$ac180,$168
+BetaLakeOfRage_BlockData: ; 0xac180
+ INCBIN "maps/BetaLakeOfRage.blk"
+; 0xac2e8
OlivinePokeCenter1F_BlockData: ; 0xac2e8
INCBIN "maps/OlivinePokeCenter1F.blk"
; 0xac2fc
-INCBIN "baserom.gbc",$ac2fc,$ac340 - $ac2fc
+BetaPewterMuseumOfScience1F_BlockData: ; 0xac2fc
+ INCBIN "maps/BetaPewterMuseumOfScience1F.blk"
+; 0xac324
+
+BetaPewterMuseumOfScience2F_BlockData: ; 0xac324
+ INCBIN "maps/BetaPewterMuseumOfScience2F.blk"
+; 0xac340
EarlsPokemonAcademy_BlockData: ; 0xac340
INCBIN "maps/EarlsPokemonAcademy.blk"
; 0xac360
-INCBIN "baserom.gbc",$ac360,$ac3b4 - $ac360
+BetaCinnabarIslandPokemonLabHallway_BlockData: ; 0xac360
+ INCBIN "maps/BetaCinnabarIslandPokemonLabHallway.blk"
+; 0xac384
+
+BetaCinnabarIslandPokemonLabRoom1_BlockData: ; 0xac384
+ INCBIN "maps/BetaCinnabarIslandPokemonLabRoom1.blk"
+; 0xac394
+
+BetaCinnabarIslandPokemonLabRoom2_BlockData: ; 0xac394
+ INCBIN "maps/BetaCinnabarIslandPokemonLabRoom2.blk"
+; 0xac3a4
+
+BetaCinnabarIslandPokemonLabRoom3_BlockData: ; 0xac3a4
+ INCBIN "maps/BetaCinnabarIslandPokemonLabRoom3.blk"
+; 0xac3b4
GoldenrodDeptStore1F_BlockData: ; 0xac3b4
INCBIN "maps/GoldenrodDeptStore1F.blk"
@@ -11667,7 +12525,9 @@ CeladonMansionRoof_BlockData: ; 0xac4b4
INCBIN "maps/CeladonMansionRoof.blk"
; 0xac4c8
-INCBIN "baserom.gbc",$ac4c8,$ac4d8 - $ac4c8
+BetaHouse_BlockData: ; 0xac4c8
+ INCBIN "maps/BetaHouse.blk"
+; 0xac4d8
CeladonGameCorner_BlockData: ; 0xac4d8
INCBIN "maps/CeladonGameCorner.blk"
@@ -11689,7 +12549,9 @@ EcruteakLugiaSpeechHouse_BlockData: ; 0xac54f
INCBIN "maps/EcruteakLugiaSpeechHouse.blk"
; 0xac55f
-INCBIN "baserom.gbc",$ac55f,$5a
+BetaCave_BlockData: ; 0xac55f
+ INCBIN "maps/BetaCave.blk"
+; 0xac5b9
UnionCaveB1F_BlockData: ; 0xac5b9
INCBIN "maps/UnionCaveB1F.blk"
@@ -11711,7 +12573,9 @@ Route6UndergroundEntrance_BlockData: ; 0xac9f1
INCBIN "maps/Route6UndergroundEntrance.blk"
; 0xaca01
-INCBIN "baserom.gbc",$aca01,$10
+BetaPokecenterTradeStation_BlockData: ; 0xaca01
+ INCBIN "maps/BetaPokecenterTradeStation.blk"
+; 0xaca11
KurtsHouse_BlockData: ; 0xaca11
INCBIN "maps/KurtsHouse.blk"
@@ -11725,7 +12589,9 @@ RuinsofAlphOutside_BlockData: ; 0xaca8b
INCBIN "maps/RuinsofAlphOutside.blk"
; 0xacb3f
-INCBIN "baserom.gbc",$acb3f,$acb53 - $acb3f
+BetaAlphRuinUnsolvedPuzzleRoom_BlockData: ; 0xacb3f
+ INCBIN "maps/BetaAlphRuinUnsolvedPuzzleRoom.blk"
+; 0xacb53
RuinsofAlphInnerChamber_BlockData: ; 0xacb53
INCBIN "maps/RuinsofAlphInnerChamber.blk"
@@ -11739,19 +12605,25 @@ SproutTower1F_BlockData: ; 0xacbf3
INCBIN "maps/SproutTower1F.blk"
; 0xacc43
-INCBIN "baserom.gbc",$acc43,$acc4d - $acc43
+BetaSproutTowerCutOut1_BlockData: ; 0xacc43
+ INCBIN "maps/BetaSproutTowerCutOut1.blk"
+; 0xacc4d
SproutTower2F_BlockData: ; 0xacc4d
INCBIN "maps/SproutTower2F.blk"
; 0xacc9d
-INCBIN "baserom.gbc",$acc9d,$acca7 - $acc9d
+BetaSproutTowerCutOut2_BlockData: ; 0xacc9d
+ INCBIN "maps/BetaSproutTowerCutOut2.blk"
+; 0xacca7
SproutTower3F_BlockData: ; 0xacca7
INCBIN "maps/SproutTower3F.blk"
; 0xaccf7
-INCBIN "baserom.gbc",$accf7,$acd01 - $accf7
+BetaSproutTowerCutOut3_BlockData: ; 0xaccf7
+ INCBIN "maps/BetaSproutTowerCutOut3.blk"
+; 0xacd01
RadioTower1F_BlockData: ; 0xacd01
INCBIN "maps/RadioTower1F.blk"
@@ -11853,7 +12725,9 @@ UndergroundWarehouse_BlockData: ; 0xadf1c
INCBIN "maps/UndergroundWarehouse.blk"
; 0xadf76
-INCBIN "baserom.gbc",$adf76,$19
+BetaElevator_BlockData: ; 0xadf76
+ INCBIN "maps/BetaElevator.blk"
+; 0xadf8f
TinTower1F_BlockData: ; 0xadf8f
INCBIN "maps/TinTower1F.blk"
@@ -11903,7 +12777,9 @@ BurnedTowerB1F_BlockData: ; 0xae36d
INCBIN "maps/BurnedTowerB1F.blk"
; 0xae3c7
-INCBIN "baserom.gbc",$ae3c7,$ae4d5 - $ae3c7
+BetaCaveTestMap_BlockData: ; 0xae3c7
+ INCBIN "maps/BetaCaveTestMap.blk"
+; 0xae4d5
MountMortar1FOutside_BlockData: ; 0xae4d5
INCBIN "maps/MountMortar1FOutside.blk"
@@ -11985,7 +12861,21 @@ SilverCaveRoom3_BlockData: ; 0xaf399
INCBIN "maps/SilverCaveRoom3.blk"
; 0xaf44d
-INCBIN "baserom.gbc",$af44d,$438
+BetaRocketHideout1_BlockData: ; 0xaf44d
+ INCBIN "maps/BetaRocketHideout1.blk"
+; 0xaf55b
+
+BetaRocketHideout2_BlockData: ; 0xaf55b
+ INCBIN "maps/BetaRocketHideout2.blk"
+; 0xaf669
+
+BetaEmptyHouse_BlockData: ; 0xaf669
+ INCBIN "maps/BetaEmptyHouse.blk"
+; 0xaf777
+
+BetaRocketHideout3_BlockData: ; 0xaf777
+ INCBIN "maps/BetaRocketHideout3.blk"
+; 0xaf885
MahoganyMart1F_BlockData: ; 0xaf885
INCBIN "maps/MahoganyMart1F.blk"
@@ -12003,7 +12893,9 @@ TeamRocketBaseB3F_BlockData: ; 0xaf9a3
INCBIN "maps/TeamRocketBaseB3F.blk"
; 0xafa2a
-INCBIN "baserom.gbc",$afa2a,$afa84 - $afa2a
+BetaRoute23EarlyVersion_BlockData: ; 0xafa2a
+ INCBIN "maps/BetaRoute23EarlyVersion.blk"
+; 0xafa84
IndigoPlateauPokeCenter1F_BlockData: ; 0xafa84
INCBIN "maps/IndigoPlateauPokeCenter1F.blk"
@@ -12049,7 +12941,9 @@ OlivineGym_BlockData: ; 0xafc7b
INCBIN "maps/OlivineGym.blk"
; 0xafca3
-INCBIN "baserom.gbc",$afca3,$afcb7 - $afca3
+BetaUnknown_BlockData: ; 0xafca3
+ INCBIN "maps/BetaUnknown.blk"
+; 0xafcb7
CianwoodGym_BlockData: ; 0xafcb7
INCBIN "maps/CianwoodGym.blk"
@@ -12090,7 +12984,9 @@ OlivineLighthouse6F_BlockData: ; 0xaff00
SECTION "bank2C",DATA,BANK[$2C]
-INCBIN "baserom.gbc",$b0000,$b0023 - $b0000
+BetaCave2_BlockData: ; 0xb0000
+ INCBIN "maps/BetaCave2.blk"
+; 0xb0023
SlowpokeWellB1F_BlockData: ; 0xb0023
INCBIN "maps/SlowpokeWellB1F.blk"
@@ -12148,7 +13044,9 @@ FastShipB1F_BlockData: ; 0xb0680
INCBIN "maps/FastShipB1F.blk"
; 0xb0700
-INCBIN "baserom.gbc",$b0700,$10
+BetaSsAquaInsideCutOut_BlockData: ; 0xb0700
+ INCBIN "maps/BetaSsAquaInsideCutOut.blk"
+; 0xb0710
FastShipCabins_NNW_NNE_NE_BlockData: ; 0xb0710
INCBIN "maps/FastShipCabins_NNW_NNE_NE.blk"
@@ -12262,13 +13160,17 @@ CeladonGym_BlockData: ; 0xb0cb5
INCBIN "maps/CeladonGym.blk"
; 0xb0ce2
-INCBIN "baserom.gbc",$b0ce2,$b0cf6 - $b0ce2
+BetaHouse2_BlockData: ; 0xb0ce2
+ INCBIN "maps/BetaHouse2.blk"
+; 0xb0cf6
CeladonCafe_BlockData: ; 0xb0cf6
INCBIN "maps/CeladonCafe.blk"
; 0xb0d0e
-INCBIN "baserom.gbc",$b0d0e,$18
+BetaCeladonMansion_BlockData: ; 0xb0d0e
+ INCBIN "maps/BetaCeladonMansion.blk"
+; 0xb0d26
RockTunnel1F_BlockData: ; 0xb0d26
INCBIN "maps/RockTunnel1F.blk"
@@ -12422,7 +13324,9 @@ BattleTowerOutside_BlockData: ; 0xb1a6e
INCBIN "maps/BattleTowerOutside.blk"
; 0xb1afa
-INCBIN "baserom.gbc",$b1afa,$28
+BetaBlank_BlockData: ; 0xb1afa
+ INCBIN "maps/BetaBlank.blk"
+; 0xb1b22
GoldenrodDeptStoreRoof_BlockData: ; 0xb1b22
INCBIN "maps/GoldenrodDeptStoreRoof.blk"
@@ -12548,7 +13452,7 @@ INCBIN "tilesets/16_collision.bin"
SECTION "bank2E",DATA,BANK[$2E]
-INCBIN "baserom.gbc",$B8000,$b8219 - $b8000
+INCBIN "baserom.gbc", $B8000, $b8219 - $b8000
Functionb8219: ; b8219
; deals strictly with rockmon encounter
@@ -12606,7 +13510,7 @@ GetTreeMonEncounterTable: ; b823f
ret
; b825e
-INCBIN "baserom.gbc",$B825E,$b82c5 - $b825e
+INCBIN "baserom.gbc", $B825E, $b82c5 - $b825e
WildRockMonMapTable: ; b82c5
db GROUP_CIANWOOD_CITY, MAP_CIANWOOD_CITY, $07
@@ -12788,12 +13692,12 @@ WildRockMonTable: ; b83de
db $ff ; end
; b83e5
-INCBIN "baserom.gbc",$b83e5,$b9e8b - $b83e5
+INCBIN "baserom.gbc", $b83e5, $b9e8b - $b83e5
SECTION "bank2F",DATA,BANK[$2F]
-INCBIN "baserom.gbc",$bc000,$bc09c - $bc000
+INCBIN "baserom.gbc", $bc000, $bc09c - $bc000
PokeCenterNurseScript: ; bc09c
; Talking to a nurse in a Pokemon Center
@@ -12926,7 +13830,7 @@ PokeCenterNurseScript: ; bc09c
end
; bc162
-INCBIN "baserom.gbc",$bc162,$bcea5-$bc162
+INCBIN "baserom.gbc", $bc162, $bcea5-$bc162
UnusedPhoneScript: ; 0xbcea5
3writetext BANK(UnusedPhoneText), UnusedPhoneText
@@ -12982,13 +13886,13 @@ UnknownScript_0xbcee7: ; 0xbcee7
.violet ; 0xbcf15
displaylocation $7 ; sprout tower
- 3call $3,$4edf
+ 3call $3, $4edf
.azalea ; 0xbcf1b
displaylocation $d ; slowpoke well
- 3call $3,$4edf
+ 3call $3, $4edf
.goldenrod ; 0xbcf21
displaylocation $11 ; radio tower
- 3call $3,$4edf
+ 3call $3, $4edf
3writetext $6d, $411c
keeptextopen
2jump UnknownScript_0xbcf37
@@ -13217,27 +14121,27 @@ ElmPhoneScript2: ; 0xbd081
specialphonecall $0000
end
-INCBIN "baserom.gbc",$bd0d0,$be699-$bd0d0
+INCBIN "baserom.gbc", $bd0d0, $be699-$bd0d0
SECTION "bank30",DATA,BANK[$30]
-INCBIN "baserom.gbc",$c0000,$c3fc0 - $c0000
+INCBIN "baserom.gbc", $c0000, $c3fc0 - $c0000
SECTION "bank31",DATA,BANK[$31]
-INCBIN "baserom.gbc",$c4000,$c7f80 - $c4000
+INCBIN "baserom.gbc", $c4000, $c7f80 - $c4000
SECTION "bank32",DATA,BANK[$32]
-INCBIN "baserom.gbc",$c8000,$cbe2b - $c8000
+INCBIN "baserom.gbc", $c8000, $cbe2b - $c8000
SECTION "bank33",DATA,BANK[$33]
-INCBIN "baserom.gbc",$cc000, $cfd9e - $cc000
+INCBIN "baserom.gbc", $cc000, $cfd9e - $cc000
; Songs iii
@@ -13429,7 +14333,7 @@ INCBIN "tilesets/36_collision.bin"
SECTION "bank38",DATA,BANK[$38]
-INCBIN "baserom.gbc",$e0000,$e37f9 - $e0000
+INCBIN "baserom.gbc", $e0000, $e37f9 - $e0000
SECTION "bank39",DATA,BANK[$39]
@@ -13737,13 +14641,13 @@ Music_BugCatchingContest: INCLUDE "audio/music/bugcatchingcontest.asm"
SECTION "bank3E",DATA,BANK[$3E]
FontExtra:
-INCBIN "gfx/misc/font_extra.2bpp",$0,$200
+INCBIN "gfx/misc/font_extra.2bpp", $0, $200
Font:
-INCBIN "gfx/misc/font.1bpp",$0,$400
+INCBIN "gfx/misc/font.1bpp", $0, $400
FontBattleExtra:
-INCBIN "gfx/misc/font_battle_extra.2bpp",$0,$200
+INCBIN "gfx/misc/font_battle_extra.2bpp", $0, $200
INCBIN "baserom.gbc", $f8800, $f8ba0 - $f8800
@@ -13755,7 +14659,214 @@ INCBIN "baserom.gbc", $f8ea3, $fbbfc - $f8ea3
INCLUDE "battle/magikarp_length.asm"
-INCBIN "baserom.gbc",$fbccf,$fbe91 - $fbccf
+INCBIN "baserom.gbc", $fbccf, $fbda4 - $fbccf
+
+
+DoWeatherModifiers: ; fbda4
+
+ ld de, .WeatherTypeModifiers
+ ld a, [Weather]
+ ld b, a
+ ld a, [$d265] ; move type
+ ld c, a
+
+.CheckWeatherType
+ ld a, [de]
+ inc de
+ cp $ff
+ jr z, .asm_fbdc0
+
+ cp b
+ jr nz, .NextWeatherType
+
+ ld a, [de]
+ cp c
+ jr z, .ApplyModifier
+
+.NextWeatherType
+ inc de
+ inc de
+ jr .CheckWeatherType
+
+
+.asm_fbdc0
+ ld de, .WeatherMoveModifiers
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ ld c, a
+
+.CheckWeatherMove
+ ld a, [de]
+ inc de
+ cp $ff
+ jr z, .done
+
+ cp b
+ jr nz, .NextWeatherMove
+
+ ld a, [de]
+ cp c
+ jr z, .ApplyModifier
+
+.NextWeatherMove
+ inc de
+ inc de
+ jr .CheckWeatherMove
+
+.ApplyModifier
+ xor a
+ ld [$ffb4], a
+ ld hl, CurDamage
+ ld a, [hli]
+ ld [$ffb5], a
+ ld a, [hl]
+ ld [$ffb6], a
+
+ inc de
+ ld a, [de]
+ ld [$ffb7], a
+
+ call Multiply
+
+ ld a, 10
+ ld [$ffb7], a
+ ld b, $4
+ call Divide
+
+ ld a, [$ffb4]
+ and a
+ ld bc, $ffff
+ jr nz, .Update
+
+ ld a, [$ffb5]
+ ld b, a
+ ld a, [$ffb6]
+ ld c, a
+ or b
+ jr nz, .Update
+
+ ld bc, 1
+
+.Update
+ ld a, b
+ ld [CurDamage], a
+ ld a, c
+ ld [CurDamage + 1], a
+
+.done
+ ret
+
+.WeatherTypeModifiers
+ db WEATHER_RAIN, WATER, 15
+ db WEATHER_RAIN, FIRE, 05
+ db WEATHER_SUN, FIRE, 15
+ db WEATHER_SUN, WATER, 05
+ db $ff
+
+.WeatherMoveModifiers
+ db WEATHER_RAIN, EFFECT_SOLARBEAM, 05
+ db $ff
+; fbe24
+
+
+DoBadgeTypeBoosts: ; fbe24
+ ld a, [InLinkBattle]
+ and a
+ ret nz
+
+ ld a, [$cfc0]
+ and a
+ ret nz
+
+ ld a, [hBattleTurn]
+ and a
+ ret nz
+
+ push de
+ push bc
+
+ ld hl, .BadgeTypes
+
+ ld a, [KantoBadges]
+ ld b, a
+ ld a, [JohtoBadges]
+ ld c, a
+
+.CheckBadge
+ ld a, [hl]
+ cp $ff
+ jr z, .done
+
+ srl b
+ rr c
+ jr nc, .NextBadge
+
+ ld a, [$d265] ; move type
+ cp [hl]
+ jr z, .ApplyBoost
+
+.NextBadge
+ inc hl
+ jr .CheckBadge
+
+.ApplyBoost
+ ld a, [CurDamage]
+ ld h, a
+ ld d, a
+ ld a, [CurDamage + 1]
+ ld l, a
+ ld e, a
+
+ srl d
+ rr e
+ srl d
+ rr e
+ srl d
+ rr e
+
+ ld a, e
+ or d
+ jr nz, .asm_fbe6f
+ ld e, 1
+
+.asm_fbe6f
+ add hl, de
+ jr nc, .Update
+
+ ld hl, $ffff
+
+.Update
+ ld a, h
+ ld [CurDamage], a
+ ld a, l
+ ld [$d257], a
+
+.done
+ pop bc
+ pop de
+ ret
+
+.BadgeTypes
+ db FLYING ; zephyrbadge
+ db BUG ; hivebadge
+ db NORMAL ; plainbadge
+ db GHOST ; fogbadge
+ db STEEL ; mineralbadge
+ db FIGHTING ; stormbadge
+ db ICE ; glacierbadge
+ db DRAGON ; risingbadge
+
+ db ROCK ; boulderbadge
+ db WATER ; cascadebadge
+ db ELECTRIC ; thunderbadge
+ db GRASS ; rainbowbadge
+ db POISON ; soulbadge
+ db PSYCHIC ; marshbadge
+ db FIRE ; volcanobadge
+ db GROUND ; earthbadge
+ db $ff
+; fbe91
SECTION "bank3F",DATA,BANK[$3F]
@@ -13862,7 +14973,7 @@ Tileset01Anim: ; 0xfc0a3
dw $0000, DoneTileAnimation
; 0xfc0d7
-INCBIN "baserom.gbc",$fc0d7,$fc12f-$fc0d7
+INCBIN "baserom.gbc", $fc0d7, $fc12f-$fc0d7
Tileset09Anim: ; 0xfc12f
; param, function
@@ -13892,7 +15003,7 @@ Tileset15Anim: ; 0xfc15f
dw $0000, DoneTileAnimation
; 0xfc17f
-INCBIN "baserom.gbc",$fc17f,$fc1e7-$fc17f
+INCBIN "baserom.gbc", $fc17f, $fc1e7-$fc17f
Tileset24Anim: ; 0xfc1e7
Tileset30Anim: ; 0xfc1e7
@@ -13961,7 +15072,7 @@ Tileset23Anim: ; 0xfc27f
dw $0000, DoneTileAnimation
; 0xfc2bf
-INCBIN "baserom.gbc",$fc2bf,$fc2e7-$fc2bf
+INCBIN "baserom.gbc", $fc2bf, $fc2e7-$fc2bf
Tileset04Anim: ; 0xfc2e7
Tileset05Anim: ; 0xfc2e7
@@ -14296,7 +15407,7 @@ LoadTradesPointer: ; 0xfcdc2
ret
; 0xfcdd7
-INCBIN "baserom.gbc",$fcdd7,$fce58-$fcdd7
+INCBIN "baserom.gbc", $fcdd7, $fce58-$fcdd7
Trades: ; 0xfce58
; byte 1: dialog
@@ -14310,56 +15421,415 @@ Trades: ; 0xfce58
; byte 31 gender
; byte 32 XXX always zero?
- db 0,ABRA,MACHOP,"MUSCLE@@@@@",$37,$66,GOLD_BERRY,$54,$92,"MIKE@@@@@@@",0,0
- db 0,BELLSPROUT,ONIX,"ROCKY@@@@@@",$96,$66,BITTER_BERRY,$1e,$bf,"KYLE@@@@@@@",0,0
- db 1,KRABBY,VOLTORB,"VOLTY@@@@@@",$98,$88,PRZCUREBERRY,$05,$72,"TIM@@@@@@@@",0,0
- db 3,DRAGONAIR,DODRIO,"DORIS@@@@@@",$77,$66,SMOKE_BALL,$1b,$01,"EMY@@@@@@@@",2,0
- db 2,HAUNTER,XATU,"PAUL@@@@@@@",$96,$86,MYSTERYBERRY,$00,$3d,"CHRIS@@@@@@",0,0
- db 3,CHANSEY,AERODACTYL,"AEROY@@@@@@",$96,$66,GOLD_BERRY,$7b,$67,"KIM@@@@@@@@",0,0
- db 0,DUGTRIO,MAGNETON,"MAGGIE@@@@@",$96,$66,METAL_COAT,$a2,$c3,"FOREST@@@@@",0,0
+ db 0,ABRA,MACHOP,"MUSCLE@@@@@", $37, $66,GOLD_BERRY, $54, $92,"MIKE@@@@@@@",0,0
+ db 0,BELLSPROUT,ONIX,"ROCKY@@@@@@", $96, $66,BITTER_BERRY, $1e, $bf,"KYLE@@@@@@@",0,0
+ db 1,KRABBY,VOLTORB,"VOLTY@@@@@@", $98, $88,PRZCUREBERRY, $05, $72,"TIM@@@@@@@@",0,0
+ db 3,DRAGONAIR,DODRIO,"DORIS@@@@@@", $77, $66,SMOKE_BALL, $1b, $01,"EMY@@@@@@@@",2,0
+ db 2,HAUNTER,XATU,"PAUL@@@@@@@", $96, $86,MYSTERYBERRY, $00, $3d,"CHRIS@@@@@@",0,0
+ db 3,CHANSEY,AERODACTYL,"AEROY@@@@@@", $96, $66,GOLD_BERRY, $7b, $67,"KIM@@@@@@@@",0,0
+ db 0,DUGTRIO,MAGNETON,"MAGGIE@@@@@", $96, $66,METAL_COAT, $a2, $c3,"FOREST@@@@@",0,0
-INCBIN "baserom.gbc",$fcf38,$fd1d2-$fcf38
+INCBIN "baserom.gbc", $fcf38, $fd1d2-$fcf38
SECTION "bank40",DATA,BANK[$40]
-INCBIN "baserom.gbc",$100000,$10389d - $100000
+INCBIN "baserom.gbc", $100000, $10389d - $100000
SECTION "bank41",DATA,BANK[$41]
-INCBIN "baserom.gbc",$104000,$104350 - $104000
+INCBIN "baserom.gbc", $104000, $104350 - $104000
INCBIN "gfx/ow/misc.2bpp"
-INCBIN "baserom.gbc",$1045b0,$105258 - $1045b0
+INCBIN "baserom.gbc", $1045b0, $105258 - $1045b0
MysteryGiftGFX:
INCBIN "gfx/misc/mystery_gift.2bpp"
-INCBIN "baserom.gbc",$105688,$105930 - $105688
+INCBIN "baserom.gbc", $105688, $105930 - $105688
; japanese mystery gift gfx
INCBIN "gfx/misc/mystery_gift_jp.2bpp"
-INCBIN "baserom.gbc",$105db0,$105ef6 - $105db0
+
+DisplayUsedMoveText: ; 105db0
+; battle command 03
+ ld hl, UsedMoveText
+ call BattleTextBox
+ jp WaitBGMap
+; 105db9
+
+
+UsedMoveText: ; 105db9
+
+; this is a stream of text and asm from 105db9 to 105ef6
+
+; print actor name
+ text_jump _ActorNameText, BANK(_ActorNameText)
+ start_asm
+
+; ????
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .start
+
+; append used move list
+ ld a, [PlayerMoveAnimation]
+ call UpdateUsedMoves
+
+.start
+; get address for last move
+ ld a, $13 ; last move
+ call GetBattleVarPair
+ ld d, h
+ ld e, l
+
+; get address for last counter move
+ ld a, $11
+ call GetBattleVarPair
+
+; get move animation (id)
+ ld a, $c ; move animation
+ call CleanGetBattleVarPair
+ ld [$d265], a
+
+; check actor ????
+ push hl
+ callba Function0x34548
+ pop hl
+ jr nz, .grammar
+
+; update last move
+ ld a, [$d265]
+ ld [hl], a
+ ld [de], a
+
+.grammar
+ call GetMoveGrammar
+; $d265 now contains MoveGrammar
+
+
+; everything except 'instead' made redundant in localization
+
+; check obedience
+ ld a, [$c6f4]
+ and a
+ ld hl, UsedMove2Text
+ ret nz
+
+; check move grammar
+ ld a, [$d265]
+ cp $3
+ ld hl, UsedMove2Text
+ ret c
+ ld hl, UsedMove1Text
+ ret
+; 105e04
+
+UsedMove1Text: ; 105e04
+ text_jump _UsedMove1Text, BANK(_UsedMove1Text)
+ start_asm
+ jr Function105e10
+; 105e0b
+
+UsedMove2Text: ; 105e0b
+ text_jump _UsedMove2Text, BANK(_UsedMove2Text)
+ start_asm
+; 105e10
+
+Function105e10: ; 105e10
+; check obedience
+ ld a, [$c6f4]
+ and a
+ jr z, GetMoveNameText
+; print "instead,"
+ ld hl, UsedInsteadText
+ ret
+; 105e1a
+
+UsedInsteadText: ; 105e1a
+ text_jump _UsedInsteadText, BANK(_UsedInsteadText)
+ start_asm
+; 105e1f
+
+GetMoveNameText: ; 105e1f
+ ld hl, MoveNameText
+ ret
+; 105e23
+
+MoveNameText: ; 105e23
+ text_jump _MoveNameText, BANK(_MoveNameText)
+ start_asm
+; 105e28
+
+GetUsedMoveTextEnder: ; 105e28
+; get start address
+ ld hl, .endusedmovetexts
+
+; get move id
+ ld a, [$d265]
+
+; 2-byte pointer
+ add a
+
+; seek
+ push bc
+ ld b, $0
+ ld c, a
+ add hl, bc
+ pop bc
+
+; get pointer to usedmovetext ender
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+; 105e39
+
+.endusedmovetexts ; 105e39
+ dw EndUsedMove1Text
+ dw EndUsedMove2Text
+ dw EndUsedMove3Text
+ dw EndUsedMove4Text
+ dw EndUsedMove5Text
+; 105e43
+
+EndUsedMove1Text: ; 105e43
+ text_jump _EndUsedMove1Text, BANK(_EndUsedMove1Text)
+ db "@"
+; 105e48
+EndUsedMove2Text: ; 105e48
+ text_jump _EndUsedMove2Text, BANK(_EndUsedMove2Text)
+ db "@"
+; 105e4d
+EndUsedMove3Text: ; 105e4d
+ text_jump _EndUsedMove3Text, BANK(_EndUsedMove3Text)
+ db "@"
+; 105e52
+EndUsedMove4Text: ; 105e52
+ text_jump _EndUsedMove4Text, BANK(_EndUsedMove4Text)
+ db "@"
+; 105e57
+EndUsedMove5Text: ; 105e57
+ text_jump _EndUsedMove5Text, BANK(_EndUsedMove5Text)
+ db "@"
+; 105e5c
+
+
+GetMoveGrammar: ; 105e5c
+; store move grammar type in $d265
+
+ push bc
+; c = move id
+ ld a, [$d265]
+ ld c, a
+ ld b, $0
+
+; read grammar table
+ ld hl, MoveGrammar
+.loop
+ ld a, [hli]
+; end of table?
+ cp $ff
+ jr z, .end
+; match?
+ cp c
+ jr z, .end
+; advance grammar type at $00
+ and a
+ jr nz, .loop
+; next grammar type
+ inc b
+ jr .loop
+
+.end
+; $d265 now contains move grammar
+ ld a, b
+ ld [$d265], a
+
+; we're done
+ pop bc
+ ret
+; 105e7a
+
+MoveGrammar: ; 105e7a
+; made redundant in localization
+; each move is given an identifier for what usedmovetext to use (0-4):
+
+; 0
+ db SWORDS_DANCE
+ db GROWTH
+ db STRENGTH
+ db HARDEN
+ db MINIMIZE
+ db SMOKESCREEN
+ db WITHDRAW
+ db DEFENSE_CURL
+ db EGG_BOMB
+ db SMOG
+ db BONE_CLUB
+ db FLASH
+ db SPLASH
+ db ACID_ARMOR
+ db BONEMERANG
+ db REST
+ db SHARPEN
+ db SUBSTITUTE
+ db MIND_READER
+ db SNORE
+ db PROTECT
+ db SPIKES
+ db ENDURE
+ db ROLLOUT
+ db SWAGGER
+ db SLEEP_TALK
+ db HIDDEN_POWER
+ db PSYCH_UP
+ db EXTREMESPEED
+ db 0 ; end set
+
+; 1
+ db RECOVER
+ db TELEPORT
+ db BIDE
+ db SELFDESTRUCT
+ db AMNESIA
+ db FLAIL
+ db 0 ; end set
+
+; 2
+ db MEDITATE
+ db AGILITY
+ db MIMIC
+ db DOUBLE_TEAM
+ db BARRAGE
+ db TRANSFORM
+ db STRUGGLE
+ db SCARY_FACE
+ db 0 ; end set
+
+; 3
+ db POUND
+ db SCRATCH
+ db VICEGRIP
+ db WING_ATTACK
+ db FLY
+ db BIND
+ db SLAM
+ db HORN_ATTACK
+ db WRAP
+ db THRASH
+ db TAIL_WHIP
+ db LEER
+ db BITE
+ db GROWL
+ db ROAR
+ db SING
+ db PECK
+ db ABSORB
+ db STRING_SHOT
+ db EARTHQUAKE
+ db FISSURE
+ db DIG
+ db TOXIC
+ db SCREECH
+ db METRONOME
+ db LICK
+ db CLAMP
+ db CONSTRICT
+ db POISON_GAS
+ db BUBBLE
+ db SLASH
+ db SPIDER_WEB
+ db NIGHTMARE
+ db CURSE
+ db FORESIGHT
+ db CHARM
+ db ATTRACT
+ db ROCK_SMASH
+ db 0 ; end set
+
+; all other moves = 4
+ db $ff ; end
+; 105ed0
+
+
+UpdateUsedMoves: ; 105ed0
+; append move a to PlayerUsedMoves unless it has already been used
+
+ push bc
+; start of list
+ ld hl, PlayerUsedMoves
+; get move id
+ ld b, a
+; loop count
+ ld c, NUM_MOVES
+
+.loop
+; get move from the list
+ ld a, [hli]
+; not used yet?
+ and a
+ jr z, .add
+; already used?
+ cp b
+ jr z, .quit
+; next byte
+ dec c
+ jr nz, .loop
+
+; if the list is full and the move hasn't already been used
+; shift the list back one byte, deleting the first move used
+; this can occur with struggle or a new learned move
+ ld hl, PlayerUsedMoves + 1
+; 1 = 2
+ ld a, [hld]
+ ld [hli], a
+; 2 = 3
+ inc hl
+ ld a, [hld]
+ ld [hli], a
+; 3 = 4
+ inc hl
+ ld a, [hld]
+ ld [hl], a
+; 4 = new move
+ ld a, b
+ ld [PlayerUsedMoves + 3], a
+ jr .quit
+
+.add
+; go back to the byte we just inced from
+ dec hl
+; add the new move
+ ld [hl], b
+
+.quit
+; list updated
+ pop bc
+ ret
+; 105ef6
+
+
HallOfFame2: ; 0x105ef6
ret
-INCBIN "baserom.gbc",$105ef7,$106078 - $105ef7
+INCBIN "baserom.gbc", $105ef7, $106078 - $105ef7
HallOfFame1: ; 0x106078
ret
-INCBIN "baserom.gbc",$106079,$1060bb - $106079
+INCBIN "baserom.gbc", $106079, $1060bb - $106079
Function1060bb: ; 1060bb
; commented out
ret
; 1060bc
-INCBIN "baserom.gbc",$1060bc,$106dbc - $1060bc
+INCBIN "baserom.gbc", $1060bc, $106dbc - $1060bc
SECTION "bank42",DATA,BANK[$42]
@@ -14518,11 +15988,11 @@ StartTitleScreen: ; 10ed67
call $6f06
; Save WRAM bank
- ld a, [$ff70]
+ ld a, [rSVBK]
push af
; WRAM bank 5
ld a, 5
- ld [$ff70], a
+ ld [rSVBK], a
; Update palette colors
ld hl, TitleScreenPalettes
@@ -14537,17 +16007,17 @@ StartTitleScreen: ; 10ed67
; Restore WRAM bank
pop af
- ld [$ff70], a
+ ld [rSVBK], a
; LY/SCX trickery starts here
; Save WRAM bank
- ld a, [$ff70]
+ ld a, [rSVBK]
push af
; WRAM bank 5
ld a, 5
- ld [$ff70], a
+ ld [rSVBK], a
; Make alternating lines come in from opposite sides
@@ -14577,7 +16047,7 @@ StartTitleScreen: ; 10ed67
; Restore WRAM bank
pop af
- ld [$ff70], a
+ ld [rSVBK], a
; Reset audio
@@ -14746,7 +16216,7 @@ TitleScreenPalettes:
SECTION "bank44",DATA,BANK[$44]
-INCBIN "baserom.gbc",$110000,$110fad - $110000
+INCBIN "baserom.gbc", $110000, $110fad - $110000
URIPrefix: ; 0x110fad
ascii "http://"
@@ -14759,11 +16229,11 @@ HTTPUtilityURL: ; 0x110ffc
HTTPRankingURL: ; 0x111020
ascii "gameboy.datacenter.ne.jp/cgb/ranking"
-INCBIN "baserom.gbc",$111044,$113f84 - $111044
+INCBIN "baserom.gbc", $111044, $113f84 - $111044
SECTION "bank45",DATA,BANK[$45]
-INCBIN "baserom.gbc",$114000,$117a7f - $114000
+INCBIN "baserom.gbc", $114000, $117a7f - $114000
; everything from here to the end of the bank is related to the
; Mobile Stadium option from the continue/newgame menu.
@@ -14972,10 +16442,10 @@ Function117bb6:
ld [$cf63], a
ret
.asm_117be7
- ld a, [$ff70]
+ ld a, [rSVBK]
push af
ld a, $3
- ld [$ff70], a
+ ld [rSVBK], a
ld a, [$cd89]
and $1
jr nz, .asm_117c16 ; 0x117bf3 $21
@@ -14999,20 +16469,20 @@ Function117bb6:
jr .asm_117c20 ; 0x117c14 $a
.asm_117c16
pop af
- ld [$ff70], a
+ ld [rSVBK], a
ld a, $d3
ld [$c300], a
jr .asm_117bd0 ; 0x117c1e $b0
.asm_117c20
pop af
- ld [$ff70], a
+ ld [rSVBK], a
ld a, $5c
ld hl, $6eb9
rst FarCall
- ld a, [$ff70]
+ ld a, [rSVBK]
push af
ld a, $3
- ld [$ff70], a
+ ld [rSVBK], a
ld a, $7
call GetSRAMBank
ld hl, $d002
@@ -15021,7 +16491,7 @@ Function117bb6:
call CopyBytes
call CloseSRAM
pop af
- ld [$ff70], a
+ ld [rSVBK], a
jp Function117cdd
Function117c4a:
@@ -15034,10 +16504,10 @@ Function117c4a:
rst FarCall
ld hl, MobileStadiumSuccessText
call $1057
- ld a, [$ff70]
+ ld a, [rSVBK]
push af
ld a, $5
- ld [$ff70], a
+ ld [rSVBK], a
ld hl, $d000
ld de, $0008
ld c, $8
@@ -15053,7 +16523,7 @@ Function117c4a:
jr nz, .asm_117c71 ; 0x117c7b $f4
call $04b6
pop af
- ld [$ff70], a
+ ld [rSVBK], a
ld a, $80
ld [$cf63], a
ret
@@ -15089,10 +16559,10 @@ Function117c89:
ret
Data117cbc: ; 0x117cbc
- db $40,$0c,$00,$11,$13,$00,$00,$00
+ db $40, $0c, $00, $11, $13, $00, $00, $00
Data117cc4: ; 0x117cc4
- db $40,$07,$0e,$0b,$13,$00,$00,$00 ; XXX what is this
+ db $40, $07, $0e, $0b, $13, $00, $00, $00 ; XXX what is this
YesNo117ccc: ; 0x117ccc
db "はい", $4e ; Yes
@@ -15107,14 +16577,14 @@ MobileStadiumSuccessText: ; 0x117cd8
db "@"
Function117cdd: ; 0x117cdd
- ld hl,$cf63
+ ld hl, $cf63
inc [hl]
ret
SECTION "bank46",DATA,BANK[$46]
-INCBIN "baserom.gbc",$118000,$118ba5 - $118000
+INCBIN "baserom.gbc", $118000, $118ba5 - $118000
ExchangeDownloadURL: ; 0x118ba5
ascii "http://gameboy.datacenter.ne.jp/cgb/download?name=/01/CGB-BXTJ/exchange/index.txt"
@@ -15141,11 +16611,11 @@ IndexDownloadURL: ; 0x118ce4
db $0
-INCBIN "baserom.gbc",$118d35,$11bc9e - $118d35
+INCBIN "baserom.gbc", $118d35, $11bc9e - $118d35
SECTION "bank47",DATA,BANK[$47]
-INCBIN "baserom.gbc",$11c000,$11f686 - $11c000
+INCBIN "baserom.gbc", $11c000, $11f686 - $11c000
SECTION "bank48",DATA,BANK[$48]
@@ -15972,17 +17442,17 @@ INCBIN "gfx/pics/201r/back.lz"
SECTION "bank5B",DATA,BANK[$5B]
-INCBIN "baserom.gbc",$16c000,$16d7fe - $16c000
+INCBIN "baserom.gbc", $16c000, $16d7fe - $16c000
SECTION "bank5C",DATA,BANK[$5C]
-INCBIN "baserom.gbc",$170000,$17367f - $170000
+INCBIN "baserom.gbc", $170000, $17367f - $170000
SECTION "bank5D",DATA,BANK[$5D]
-INCBIN "baserom.gbc",$174000,$177561 - $174000
+INCBIN "baserom.gbc", $174000, $177561 - $174000
SECTION "bank5E",DATA,BANK[$5E]
@@ -16000,17 +17470,17 @@ Music_SuicuneBattle: INCLUDE "audio/music/suicunebattle.asm"
Music_BattleTowerLobby: INCLUDE "audio/music/battletowerlobby.asm"
Music_MobileCenter: INCLUDE "audio/music/mobilecenter.asm"
-INCBIN "baserom.gbc",$17982d, $1799ef - $17982d
+INCBIN "baserom.gbc", $17982d, $1799ef - $17982d
MobileAdapterGFX:
INCBIN "gfx/misc/mobile_adapter.2bpp"
-INCBIN "baserom.gbc",$17a68f, $17b629 - $17a68f
+INCBIN "baserom.gbc", $17a68f, $17b629 - $17a68f
SECTION "bank5F",DATA,BANK[$5F]
-INCBIN "baserom.gbc",$17c000,$17ff6c - $17c000
+INCBIN "baserom.gbc", $17c000, $17ff6c - $17c000
SECTION "bank60",DATA,BANK[$60]
@@ -16026,6 +17496,12 @@ INCLUDE "maps/LancesRoom.asm"
INCLUDE "maps/HallOfFame.asm"
+; Pokedex entries I
+; 001-064
+
+INCLUDE "stats/pokedex/entries_1.asm"
+
+
SECTION "bank61",DATA,BANK[$61]
; Map Scripts XIV
@@ -16308,7 +17784,7 @@ INCLUDE "stats/pokedex/entries_2.asm"
SECTION "bank6F",DATA,BANK[$6F]
-INCBIN "baserom.gbc",$1bc000,$1be08d - $1bc000
+INCBIN "baserom.gbc", $1bc000, $1be08d - $1bc000
SECTION "bank70",DATA,BANK[$70]
@@ -16452,13 +17928,13 @@ DudeAutoInput_DownA: ; 1de2af
; 1de2c5
-INCBIN "baserom.gbc",$1de2c5,$1de2e4 - $1de2c5
+INCBIN "baserom.gbc", $1de2c5, $1de2e4 - $1de2c5
PokegearGFX: ; 1de2e4
INCBIN "gfx/misc/pokegear.lz"
; 1de5c7
-INCBIN "baserom.gbc",$1de5c7,$1df238 - $1de5c7
+INCBIN "baserom.gbc", $1de5c7, $1df238 - $1de5c7
SECTION "bank78",DATA,BANK[$78]
@@ -16488,26 +17964,26 @@ SECTION "bank7A",DATA,BANK[$7A]
SECTION "bank7B",DATA,BANK[$7B]
-INCBIN "baserom.gbc",$1ec000,$1ecf02 - $1ec000
+INCBIN "baserom.gbc", $1ec000, $1ecf02 - $1ec000
SECTION "bank7C",DATA,BANK[$7C]
-INCBIN "baserom.gbc",$1f0000,$1f09d8 - $1f0000
+INCBIN "baserom.gbc", $1f0000, $1f09d8 - $1f0000
SECTION "bank7D",DATA,BANK[$7D]
-INCBIN "baserom.gbc",$1f4000,$1f636a - $1f4000
+INCBIN "baserom.gbc", $1f4000, $1f636a - $1f4000
SECTION "bank7E",DATA,BANK[$7E]
-INCBIN "baserom.gbc",$1f8000,$1fb8a8 - $1f8000
+INCBIN "baserom.gbc", $1f8000, $1fb8a8 - $1f8000
SECTION "bank7F",DATA,BANK[$7F]
SECTION "stadium2",DATA[$8000-$220],BANK[$7F]
-INCBIN "baserom.gbc",$1ffde0,$220
+INCBIN "baserom.gbc", $1ffde0, $220
diff --git a/maps/BetaAlphRuinUnsolvedPuzzleRoom.blk b/maps/BetaAlphRuinUnsolvedPuzzleRoom.blk
new file mode 100644
index 000000000..a3aa06bd6
--- /dev/null
+++ b/maps/BetaAlphRuinUnsolvedPuzzleRoom.blk
@@ -0,0 +1 @@
+ ,+ \ No newline at end of file
diff --git a/maps/BetaAzaleaTown.blk b/maps/BetaAzaleaTown.blk
new file mode 100644
index 000000000..8faa18369
--- /dev/null
+++ b/maps/BetaAzaleaTown.blk
@@ -0,0 +1,10 @@
+aaaaaaaaFDaaaaaaaaaaaaaaaaaFDaaaaaaaaaaaaaaaaaFHIIaaaaaaBaaaFaaaaaaFaFaaaHJGFee>aacaaaFaaaadeefaaaaFGbaaaaaaaaFDaaaaaaaFaaDaU
+aaaaaaaHIY
+aaaaaaa~zU
+aaaaaaa5Y
+aaaaa@AAAA5z
+vvvUaaaaaaaaaaa552955zvvvvvvvvvv
+aa55551111111111111
+
+a555555555555555552
+a \ No newline at end of file
diff --git a/maps/BetaBlackthornCity.blk b/maps/BetaBlackthornCity.blk
new file mode 100644
index 000000000..c6fc4f210
--- /dev/null
+++ b/maps/BetaBlackthornCity.blk
@@ -0,0 +1 @@
+hqqqqqqqqqqqqqqqqqqqhqorrrrrrrrrnqqqqqqqhqiaKeWaKeWahqqqqqqqhqieKaWWWaeWhqorrnqqhqiaWWKWeaWehqi !hqqhqiKWWeeaWWahqi$%hqqhqieKeaWWeeehqi$%hqqhqiaKaWeeWaahqi$%hqqlrmKeWWaWeWahqi()hqqKaWKaWaeWlrmtuhqqWWWWWWKaWWWWWWhqqhqqlrrG \ No newline at end of file
diff --git a/maps/BetaBlank.blk b/maps/BetaBlank.blk
new file mode 100644
index 000000000..e53405655
--- /dev/null
+++ b/maps/BetaBlank.blk
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/maps/BetaCave.blk b/maps/BetaCave.blk
new file mode 100644
index 000000000..b103c2532
--- /dev/null
+++ b/maps/BetaCave.blk
@@ -0,0 +1,8 @@
+ 
+
+
+
+
+
+
+  \ No newline at end of file
diff --git a/maps/BetaCave2.blk b/maps/BetaCave2.blk
new file mode 100644
index 000000000..a2722d010
--- /dev/null
+++ b/maps/BetaCave2.blk
@@ -0,0 +1,5 @@
+ 
+(+
+)*
+
+   \ No newline at end of file
diff --git a/maps/BetaCaveTestMap.blk b/maps/BetaCaveTestMap.blk
new file mode 100644
index 000000000..eba6c84c8
--- /dev/null
+++ b/maps/BetaCaveTestMap.blk
@@ -0,0 +1,18 @@
+  
+;<  ; 6<
+
+ 589:
+
+
+
+
+  5 
+
+   
+
+ 5  
+
+   
+ 
+ 5 6
+    \ No newline at end of file
diff --git a/maps/BetaCeladonMansion.blk b/maps/BetaCeladonMansion.blk
new file mode 100644
index 000000000..8d3e219df
--- /dev/null
+++ b/maps/BetaCeladonMansion.blk
@@ -0,0 +1 @@
+? +,/ \ No newline at end of file
diff --git a/maps/BetaCherrygroveCity.blk b/maps/BetaCherrygroveCity.blk
new file mode 100644
index 000000000..440952f6f
--- /dev/null
+++ b/maps/BetaCherrygroveCity.blk
@@ -0,0 +1,9 @@
+
+aaaaaaaa
+
+a6
+a6YEa6Y,-6YG./a52vUa551
+
+aaaaa5555
+
+aaaa \ No newline at end of file
diff --git a/maps/BetaCianwoodCity.blk b/maps/BetaCianwoodCity.blk
new file mode 100644
index 000000000..d946e1de7
--- /dev/null
+++ b/maps/BetaCianwoodCity.blk
@@ -0,0 +1 @@
+aaaaXaaTyaaX5ETy5Tv455aTvvyfaXYaaXYEaaeaaa \ No newline at end of file
diff --git a/maps/BetaCinnabarIslandPokemonLabHallway.blk b/maps/BetaCinnabarIslandPokemonLabHallway.blk
new file mode 100644
index 000000000..7a6502a26
--- /dev/null
+++ b/maps/BetaCinnabarIslandPokemonLabHallway.blk
@@ -0,0 +1,2 @@
+ 
+  \ No newline at end of file
diff --git a/maps/BetaCinnabarIslandPokemonLabRoom1.blk b/maps/BetaCinnabarIslandPokemonLabRoom1.blk
new file mode 100644
index 000000000..ef77b6561
--- /dev/null
+++ b/maps/BetaCinnabarIslandPokemonLabRoom1.blk
@@ -0,0 +1,2 @@
+ 
+  \ No newline at end of file
diff --git a/maps/BetaCinnabarIslandPokemonLabRoom2.blk b/maps/BetaCinnabarIslandPokemonLabRoom2.blk
new file mode 100644
index 000000000..822db175b
--- /dev/null
+++ b/maps/BetaCinnabarIslandPokemonLabRoom2.blk
@@ -0,0 +1 @@
+  \ No newline at end of file
diff --git a/maps/BetaCinnabarIslandPokemonLabRoom3.blk b/maps/BetaCinnabarIslandPokemonLabRoom3.blk
new file mode 100644
index 000000000..d9a64a5da
--- /dev/null
+++ b/maps/BetaCinnabarIslandPokemonLabRoom3.blk
@@ -0,0 +1 @@
+   \ No newline at end of file
diff --git a/maps/BetaElevator.blk b/maps/BetaElevator.blk
new file mode 100644
index 000000000..32fb22697
--- /dev/null
+++ b/maps/BetaElevator.blk
@@ -0,0 +1 @@
+&$$$%$$$$$$$$$$$$$$$$$$ \ No newline at end of file
diff --git a/maps/BetaEmptyHouse.blk b/maps/BetaEmptyHouse.blk
new file mode 100644
index 000000000..dcec62794
--- /dev/null
+++ b/maps/BetaEmptyHouse.blk
@@ -0,0 +1,15 @@
+ 
+  
+ 
+
+
+
+  
+ 
+  
+  
+  
+
+ %
+
+   \ No newline at end of file
diff --git a/maps/BetaGoldenrodCity.blk b/maps/BetaGoldenrodCity.blk
new file mode 100644
index 000000000..1a156122d
--- /dev/null
+++ b/maps/BetaGoldenrodCity.blk
@@ -0,0 +1,10 @@
+
+
+
+FD
+
+JHU !Y$#Y"HEzv%&IIIIIIIIJII55)* @-.EAAAAAAAAAA FIHIJEEvvU55YY@AEYDFYHFzU5
+
+B @55
+
+F~D \ No newline at end of file
diff --git a/maps/BetaHerosHouse.blk b/maps/BetaHerosHouse.blk
new file mode 100644
index 000000000..b5b53b4bd
--- /dev/null
+++ b/maps/BetaHerosHouse.blk
@@ -0,0 +1 @@
+ ! " \ No newline at end of file
diff --git a/maps/BetaHouse.blk b/maps/BetaHouse.blk
new file mode 100644
index 000000000..187a3cd32
--- /dev/null
+++ b/maps/BetaHouse.blk
@@ -0,0 +1 @@
+*+,*-.12/0/ \ No newline at end of file
diff --git a/maps/BetaHouse2.blk b/maps/BetaHouse2.blk
new file mode 100644
index 000000000..993ea3a8d
--- /dev/null
+++ b/maps/BetaHouse2.blk
@@ -0,0 +1 @@
+?',9..',9 \ No newline at end of file
diff --git a/maps/BetaIlexForest.blk b/maps/BetaIlexForest.blk
new file mode 100644
index 000000000..3cde14007
--- /dev/null
+++ b/maps/BetaIlexForest.blk
@@ -0,0 +1 @@
+hqqqqqihqqqqqilrrsm \ No newline at end of file
diff --git a/maps/BetaLakeOfRage.blk b/maps/BetaLakeOfRage.blk
new file mode 100644
index 000000000..d1d63a0d4
--- /dev/null
+++ b/maps/BetaLakeOfRage.blk
@@ -0,0 +1 @@
+\^af\a\^afG^f\\f>^fTU^abfd?fdTvyY>dG\fd\X55Ya^d?f^Tvy55Y<d`f\\Ty555Y`f]\?\aX555Y\\^?Tvvy555Y^<fTvy555555Y^bd\bf^X5555555Ydf\ffTy5555555Y\b\af\fX55555Ya^d<d\daX555Yfd\\G`f^^\<G^\<bad>>e\adfa \ No newline at end of file
diff --git a/maps/BetaMahoganyTown.blk b/maps/BetaMahoganyTown.blk
new file mode 100644
index 000000000..6b4c62e10
--- /dev/null
+++ b/maps/BetaMahoganyTown.blk
@@ -0,0 +1 @@
+`N=`RZW,-G./WEZWWG? \ No newline at end of file
diff --git a/maps/BetaNewBarkTown.blk b/maps/BetaNewBarkTown.blk
new file mode 100644
index 000000000..395c91f1b
--- /dev/null
+++ b/maps/BetaNewBarkTown.blk
@@ -0,0 +1 @@
+^]?II~IDGaaHTvEX5@~~{XDGGXHIIIIIIIaXvvvvvvvvv1 \ No newline at end of file
diff --git a/maps/BetaOlivineCity.blk b/maps/BetaOlivineCity.blk
new file mode 100644
index 000000000..749f05a5c
--- /dev/null
+++ b/maps/BetaOlivineCity.blk
@@ -0,0 +1,4 @@
+FDIJHIIIFDFZFDFDFFZFFZFFDFFZFAABFZFFDF|}FTvvvvvvvvvUDF|}FXYX55YDF|}FXYX55YHIIIJ|}FXYX556vvv
+
+JXYX5545552
+Xzvvvvy55255552vvvy555 555550555552995555~5555:5555 \ No newline at end of file
diff --git a/maps/BetaPewterMuseumOfScience1F.blk b/maps/BetaPewterMuseumOfScience1F.blk
new file mode 100644
index 000000000..1eec02a37
--- /dev/null
+++ b/maps/BetaPewterMuseumOfScience1F.blk
@@ -0,0 +1,2 @@
+
+  ! &! & \ No newline at end of file
diff --git a/maps/BetaPewterMuseumOfScience2F.blk b/maps/BetaPewterMuseumOfScience2F.blk
new file mode 100644
index 000000000..ac5622246
--- /dev/null
+++ b/maps/BetaPewterMuseumOfScience2F.blk
@@ -0,0 +1 @@
+012! \ No newline at end of file
diff --git a/maps/BetaPokecenterMainHouse.blk b/maps/BetaPokecenterMainHouse.blk
new file mode 100644
index 000000000..261350738
--- /dev/null
+++ b/maps/BetaPokecenterMainHouse.blk
@@ -0,0 +1 @@
+  ' \ No newline at end of file
diff --git a/maps/BetaPokecenterTradeStation.blk b/maps/BetaPokecenterTradeStation.blk
new file mode 100644
index 000000000..555abfa07
--- /dev/null
+++ b/maps/BetaPokecenterTradeStation.blk
@@ -0,0 +1 @@
+' \ No newline at end of file
diff --git a/maps/BetaRocketHideout1.blk b/maps/BetaRocketHideout1.blk
new file mode 100644
index 000000000..988208073
--- /dev/null
+++ b/maps/BetaRocketHideout1.blk
@@ -0,0 +1,5 @@
+
+ :?  <? )
+
+  ? )  ==   >> "! 89  *> *   89 :?:? )  ;?;? )  ? <?<? )  ? )   ? 
+  ) * ,-.,//////////- \ No newline at end of file
diff --git a/maps/BetaRocketHideout2.blk b/maps/BetaRocketHideout2.blk
new file mode 100644
index 000000000..b17106cca
--- /dev/null
+++ b/maps/BetaRocketHideout2.blk
@@ -0,0 +1,4 @@
+
+  
+ 
+  >:)   ><) >>    )89      >>   8: ::?   ?< <<?  * ? )     * ),/////////////- \ No newline at end of file
diff --git a/maps/BetaRocketHideout3.blk b/maps/BetaRocketHideout3.blk
new file mode 100644
index 000000000..b73d3afeb
--- /dev/null
+++ b/maps/BetaRocketHideout3.blk
@@ -0,0 +1,5 @@
+ +=1,////? 
+=== :?5////4 ??? <?10 5// )==   >>:) 5//////>89<) 
+,/////- >>>> 1 8899///=
+ 5///->:?  1 =
+ ><?  >? ? ,/////-,////- \ No newline at end of file
diff --git a/maps/BetaRoute23EarlyVersion.blk b/maps/BetaRoute23EarlyVersion.blk
new file mode 100644
index 000000000..a62533dd4
--- /dev/null
+++ b/maps/BetaRoute23EarlyVersion.blk
@@ -0,0 +1,7 @@
+
+ !
+
+ohi
+omhi!nm7:~nm'nm'nm'nm'nm'nm'nm'nm
+^
+noo !hihi \ No newline at end of file
diff --git a/maps/BetaSproutTower1.blk b/maps/BetaSproutTower1.blk
new file mode 100644
index 000000000..6c0b2ea41
--- /dev/null
+++ b/maps/BetaSproutTower1.blk
@@ -0,0 +1,3 @@
+     
+  
+    \ No newline at end of file
diff --git a/maps/BetaSproutTower2.blk b/maps/BetaSproutTower2.blk
new file mode 100644
index 000000000..a13cec16b
--- /dev/null
+++ b/maps/BetaSproutTower2.blk
@@ -0,0 +1,9 @@
+ 
+ 
+  
+ 
+  
+  
+  
+ 
+ \ No newline at end of file
diff --git a/maps/BetaSproutTower3.blk b/maps/BetaSproutTower3.blk
new file mode 100644
index 000000000..846bb9016
--- /dev/null
+++ b/maps/BetaSproutTower3.blk
@@ -0,0 +1,7 @@
+ 
+   
+ 
+   
+ 
+  
+ \ No newline at end of file
diff --git a/maps/BetaSproutTower5.blk b/maps/BetaSproutTower5.blk
new file mode 100644
index 000000000..baaeaa926
--- /dev/null
+++ b/maps/BetaSproutTower5.blk
@@ -0,0 +1,9 @@
+ 
+ 
+ 
+ 
+ 
+    
+ 
+
+         \ No newline at end of file
diff --git a/maps/BetaSproutTower6.blk b/maps/BetaSproutTower6.blk
new file mode 100644
index 000000000..ea9395657
--- /dev/null
+++ b/maps/BetaSproutTower6.blk
@@ -0,0 +1,4 @@
+ 
+             
+  
+   \ No newline at end of file
diff --git a/maps/BetaSproutTower7.blk b/maps/BetaSproutTower7.blk
new file mode 100644
index 000000000..bfa5da286
--- /dev/null
+++ b/maps/BetaSproutTower7.blk
@@ -0,0 +1,8 @@
+ 
+
+  
+ 
+     
+   
+  
+  \ No newline at end of file
diff --git a/maps/BetaSproutTower8.blk b/maps/BetaSproutTower8.blk
new file mode 100644
index 000000000..254c0c565
--- /dev/null
+++ b/maps/BetaSproutTower8.blk
@@ -0,0 +1,5 @@
+  
+    
+  
+    
+     \ No newline at end of file
diff --git a/maps/BetaSproutTower9.blk b/maps/BetaSproutTower9.blk
new file mode 100644
index 000000000..f5737b226
--- /dev/null
+++ b/maps/BetaSproutTower9.blk
@@ -0,0 +1 @@
+     \ No newline at end of file
diff --git a/maps/BetaSproutTowerCutOut1.blk b/maps/BetaSproutTowerCutOut1.blk
new file mode 100644
index 000000000..21808bb71
--- /dev/null
+++ b/maps/BetaSproutTowerCutOut1.blk
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/maps/BetaSproutTowerCutOut2.blk b/maps/BetaSproutTowerCutOut2.blk
new file mode 100644
index 000000000..21808bb71
--- /dev/null
+++ b/maps/BetaSproutTowerCutOut2.blk
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/maps/BetaSproutTowerCutOut3.blk b/maps/BetaSproutTowerCutOut3.blk
new file mode 100644
index 000000000..21808bb71
--- /dev/null
+++ b/maps/BetaSproutTowerCutOut3.blk
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/maps/BetaSsAquaInsideCutOut.blk b/maps/BetaSsAquaInsideCutOut.blk
new file mode 100644
index 000000000..b385b0198
--- /dev/null
+++ b/maps/BetaSsAquaInsideCutOut.blk
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/maps/BetaTeakCity.blk b/maps/BetaTeakCity.blk
new file mode 100644
index 000000000..ce448c2ef
--- /dev/null
+++ b/maps/BetaTeakCity.blk
@@ -0,0 +1 @@
+?eeeeeeeeeeeb !bb$%b>$%`&;',-&'`$%`*"+#/*+aE$%dg,-b()#/tuWZWVWVWVWZ@AABGTU !FXY$%&'XYa$%*+VVZVVVVVVZaa()EatuIIJ~{@AAAAA HII \ No newline at end of file
diff --git a/maps/BetaUnknown.blk b/maps/BetaUnknown.blk
new file mode 100644
index 000000000..c3063adc7
--- /dev/null
+++ b/maps/BetaUnknown.blk
@@ -0,0 +1 @@
+( \ No newline at end of file
diff --git a/maps/BetaVioletCity.blk b/maps/BetaVioletCity.blk
new file mode 100644
index 000000000..963dbb2ed
--- /dev/null
+++ b/maps/BetaVioletCity.blk
@@ -0,0 +1,7 @@
+??&;'TU&;'b?*"+XY*"+?=G^bXYTU]]]]]]]]]]]]]XYXYXYb`b !`GbD$%F`
+&;'
+bD()F`G*"+
+eeebDtuF`
+
+AEA
+bpk`bsm`=]E`G`G?e`b`?eeeeeeeeeef`b \ No newline at end of file
diff --git a/maps/HallOfFame.asm b/maps/HallOfFame.asm
index 26d531e0e..591963f1a 100644
--- a/maps/HallOfFame.asm
+++ b/maps/HallOfFame.asm
@@ -123,10 +123,6 @@ HallOfFame_MapEventHeader: ; 0x181678
; 0x181695
-; Pokedex entries I
-; 001-064
-
-INCLUDE "stats/pokedex/entries_1.asm"
diff --git a/maps/ManiasHouse.asm b/maps/ManiasHouse.asm
index a3847e4fc..ce4d58b8e 100644
--- a/maps/ManiasHouse.asm
+++ b/maps/ManiasHouse.asm
@@ -16,7 +16,7 @@ UnknownScript_0x9d278: ; 0x9d278
2writetext UnknownText_0x9d303
yesorno
iffalse UnknownScript_0x9d2b6
- special $004b
+ special SPECIAL_GIVESHUCKLE
iffalse UnknownScript_0x9d2b0
2writetext UnknownText_0x9d3ed
keeptextopen
diff --git a/pokecrystal.bat b/pokecrystal.bat
new file mode 100644
index 000000000..211c33b1f
--- /dev/null
+++ b/pokecrystal.bat
@@ -0,0 +1,3 @@
+@set PATH=%PATH%;C:\Program Files (x86)\GnuWin32\bin\;C:\Python27\
+@make winclean && make win
+@pause
diff --git a/preprocessor.py b/preprocessor.py
index a2c0000e9..10447295f 100644
--- a/preprocessor.py
+++ b/preprocessor.py
@@ -18,6 +18,7 @@ from extras.crystal import (
text_command_classes,
movement_command_classes,
music_classes,
+ effect_classes,
)
even_more_macros = [
@@ -34,6 +35,7 @@ macros += even_more_macros
macros += [each[1] for each in text_command_classes]
macros += movement_command_classes
macros += music_classes
+macros += effect_classes
# show lines before preprocessing in stdout
show_original_lines = False
diff --git a/wram.asm b/wram.asm
index 444856409..cbe51a7b4 100644
--- a/wram.asm
+++ b/wram.asm
@@ -476,12 +476,33 @@ BattleMonSpclAtk: ; c646
BattleMonSpclDef: ; c648
ds 2
- ds 25
+BattleMonType1: ; c64a
+ ds 1
+BattleMonType2: ; c64b
+ ds 1
+
+ ds 23
CurOTMon: ; c663
ds 1
- ds 4
+ ds 1
+
+TypeModifier: ; c665
+; >10: super-effective
+; 10: normal
+; <10: not very effective
+
+; bit 7: stab
+ ds 1
+
+CriticalHit: ; c666
+; nonzero for a critical hit
+ ds 1
+
+AttackMissed: ; c667
+; nonzero for a miss
+ ds 1
PlayerSubStatus1: ; c668
; bit
@@ -495,15 +516,23 @@ PlayerSubStatus1: ; c668
; 0 nightmare
ds 1
PlayerSubStatus2: ; c669
-; unknown
+; bit
+; 7
+; 6
+; 5
+; 4
+; 3
+; 2
+; 1
+; 0 curled
ds 1
PlayerSubStatus3: ; c66a
; bit
; 7 confusion
-; 6
-; 5
+; 6 flying
+; 5 underground
; 4 charged
-; 3
+; 3 flinch
; 2
; 1 rollout
; 0 bide
@@ -511,22 +540,30 @@ PlayerSubStatus3: ; c66a
PlayerSubStatus4: ; c66b
; bit
; 7 leech seed
-; 6
+; 6 rage
; 5 recharge
; 4 substitute
; 3
-; 2
+; 2 focus energy
; 1
-; 0
+; 0 bide: unleashed energy
ds 1
PlayerSubStatus5: ; c66c
-; unknown
+; bit
+; 7
+; 6 destiny bond
+; 5 lock-on
+; 4
+; 3
+; 2
+; 1
+; 0
ds 1
EnemySubStatus1: ; c66d
; see PlayerSubStatus1
ds 1
-EnemySubstatus2: ; c66e
+EnemySubStatus2: ; c66e
; see PlayerSubStatus2
ds 1
EnemySubStatus3: ; c66f
@@ -539,28 +576,42 @@ EnemySubStatus5: ; c671
; see PlayerSubStatus5
ds 1
- ds 4
-
+PlayerRolloutCount: ; c672
+ ds 1
+PlayerConfuseCount: ; c673
+ ds 1
+ ds 1
+PlayerDisableCount: ; c675
+ ds 1
PlayerEncoreCount: ; c676
ds 1
PlayerPerishCount: ; c677
ds 1
-
- ds 5
-
-EnemyEncoreCount: ; c67e
+PlayerFuryCutterCount: ; c678
ds 1
-EnemyPerishCount: ; c67f
ds 1
- ds 2
+EnemyRolloutCount: ; c67a
+ ds 1
+EnemyConfuseCount: ; c67b
+ ds 1
+ ds 1
+EnemyEncoreCount: ; c67d
+ ds 1
+EnemyPerishCount: ; c67e
+ ds 1
+ ds 1
+EnemyFuryCutterCount: ; c680
+ ds 1
-PlayerDamageTaken: ; c682
+PlayerDamageTaken: ; c681
ds 2
-EnemyDamageTaken: ; c684
+EnemyDamageTaken: ; c683
ds 2
ds 4
+
+ ds 1
BattleScriptBuffer: ; c68a
ds 40
@@ -568,14 +619,46 @@ BattleScriptBuffer: ; c68a
BattleScriptBufferLoc: ; c6b2
ds 2
- ds 25
+ ds 24
PlayerStatLevels: ; c6cc
; 07 neutral
- ds 8
+PlayerAtkLevel: ; c6cc
+ ds 1
+PlayerDefLevel: ; c6cd
+ ds 1
+PlayerSpdLevel: ; c6ce
+ ds 1
+PlayerSAtkLevel: ; c6cf
+ ds 1
+PlayerSDefLevel: ; c6d0
+ ds 1
+PlayerAccLevel: ; c6d1
+ ds 1
+PlayerEvaLevel: ; c6d2
+ ds 1
+; c6d3
+ ds 1
+PlayerStatLevelsEnd:
+
EnemyStatLevels: ; c6d4
; 07 neutral
- ds 8
+EnemyAtkLevel: ; c6d4
+ ds 1
+EnemyDefLevel: ; c6d5
+ ds 1
+EnemySpdLevel: ; c6d6
+ ds 1
+EnemySAtkLevel: ; c6d7
+ ds 1
+EnemySDefLevel: ; c6d8
+ ds 1
+EnemyAccLevel: ; c6d9
+ ds 1
+EnemyEvaLevel: ; c6da
+ ds 1
+; c6db
+ ds 1
EnemyTurnsTaken: ; c6dc
ds 1
@@ -593,12 +676,21 @@ LinkBattleRNCount: ; c6e5
; how far through the prng stream
ds 1
- ds 15
+ ds 3
-DisabledMove: ; c6f5
+CurEnemyMoveNum: ; c6e9
ds 1
- ds 2
+ ds 10
+
+AlreadyDisobeyed: ; c6f4
+ ds 1
+
+DisabledMove: ; c6f5
+ ds 1
+EnemyEncoredMove: ; c6f6
+ ds 1
+ ds 1
; exists so you can't counter on switch
LastEnemyCounterMove: ; c6f8
@@ -606,14 +698,38 @@ LastEnemyCounterMove: ; c6f8
LastPlayerCounterMove: ; c6f9
ds 1
- ds 8
+ ds 1
+
+AlreadyFailed: ; c6fb
+ ds 1
+
+ ds 3
+
+PlayerScreens: ; c6ff
+; bit 4: reflect
+; bit 3: light screen
+ ds 1
+
+EnemyScreens: ; c700
+; bit 4: reflect
+; bit 3: light screen
+ ds 1
+
+ ds 1
PlayerLightScreenCount: ; c702
ds 1
PlayerReflectCount: ; c703
ds 1
- ds 6
+ ds 2
+
+EnemyLightScreenCount: ; c706
+ ds 1
+EnemyReflectCount: ; c707
+ ds 1
+
+ ds 2
Weather: ; c70a
; 00 normal
@@ -647,7 +763,7 @@ LastEnemyMove: ; c71c
SECTION "overworldmap",BSS[$c800]
OverworldMap: ; c800
ds 1300
-OverworldMapEnd
+OverworldMapEnd:
ds 12
@@ -813,7 +929,76 @@ CurPartyMon: ; d109
; 0-5
ds 1
- ds 55
+ ds 4
+
+TempMon:
+TempMonSpecies: ; d10e
+ ds 1
+TempMonItem: ; d10f
+ ds 1
+TempMonMoves: ; d110
+TempMonMove1: ; d110
+ ds 1
+TempMonMove2: ; d111
+ ds 1
+TempMonMove3: ; d112
+ ds 1
+TempMonMove4: ; d113
+ ds 1
+TempMonID: ; d114
+ ds 2
+TempMonExp: ; d116
+ ds 3
+TempMonHPExp: ; d119
+ ds 2
+TempMonAtkExp: ; d11b
+ ds 2
+TempMonDefExp: ; d11d
+ ds 2
+TempMonSpdExp: ; d11f
+ ds 2
+TempMonSpclExp: ; d121
+ ds 2
+TempMonDVs: ; d123
+; hp = %1000 for each dv
+ ds 1 ; atk/def
+ ds 1 ; spd/spc
+TempMonPP: ; d125
+ ds 4
+TempMonHappiness: ; d129
+ ds 1
+TempMonPokerusStatus: ; d12a
+ ds 1
+TempMonCaughtData: ; d12b
+TempMonCaughtTime: ; d12b
+TempMonCaughtLevel: ; d12b
+ ds 1
+TempMonCaughtGender: ; d12c
+TempMonCaughtLocation: ; d12c
+ ds 1
+TempMonLevel: ; d12d
+ ds 1
+TempMonStatus: ; d12e
+ ds 1
+; d12f
+ ds 1
+TempMonCurHP: ; d130
+ ds 2
+TempMonMaxHP: ; d132
+ ds 2
+TempMonAtk: ; d134
+ ds 2
+TempMonDef: ; d136
+ ds 2
+TempMonSpd: ; d138
+ ds 2
+TempMonSpclAtk: ; d13a
+ ds 2
+TempMonSpclDef: ; d13c
+ ds 2
+TempMonEnd: ; d13e
+
+ ds 3
PartyMenuActionText ; d141
ds 1
@@ -847,7 +1032,10 @@ TileSetPalettes: ; d1e6
; bank 3f
ds 2
- ds 2
+EvolvableFlags: ; d1e8
+ ds 1
+
+ ds 1
Buffer1:
MagikarpLength: ; d1ea
@@ -928,6 +1116,12 @@ EnemyMonSpclAtk: ; d220
EnemyMonSpclDef: ; d222
ds 2
+EnemyMonType1: ; d224
+ ds 1
+EnemyMonType2: ; d225
+ ds 1
+
+
SECTION "Battle",BSS[$d22d]
IsInBattle: ; d22d
@@ -974,6 +1168,9 @@ UnownLetter: ; d234
CurBaseStats: ; d236
ds 32
+CurDamage: ; d256
+ ds 2
+
SECTION "TimeOfDay",BSS[$d269]
TimeOfDay: ; d269
@@ -994,7 +1191,7 @@ OTPartySpecies: ; d281
; or the routine will keep going
OTPartyMon1:
-OTPartyMon1Species2: ; d288
+OTPartyMon1Species: ; d288
ds 1
OTPartyMon1Item: ; d289
ds 1
@@ -1131,6 +1328,7 @@ PlayerID: ; d47b
ds 2
PlayerName: ; d47d
ds 11
+PlayerNameEnd: ; d478
ds 46
@@ -1322,9 +1520,8 @@ PartyCount: ; dcd7
ds 1 ; number of Pokémon in party
PartySpecies: ; dcd8
ds 6 ; species of each Pokémon in party
-; dcde
- ds 1 ; any empty slots including the 7th must be FF
- ; or the routine will keep going
+PartyEnd: ; dcde
+ ds 1 ; legacy functions don't check PartyCount
PartyMons:
PartyMon1:
@@ -1371,7 +1568,7 @@ PartyMon1PokerusStatus: ; dcfb
ds 1
PartyMon1CaughtData: ; dcfc
PartyMon1CaughtTime: ; dcfc
-PartyMon1CaughtLevel ; dcfc
+PartyMon1CaughtLevel: ; dcfc
ds 1
PartyMon1CaughtGender: ; dcfd
PartyMon1CaughtLocation: ; dcfd
@@ -1482,7 +1679,7 @@ BreedMon2Nick: ; df2f
BreedMon2OT: ; df3a
ds 11
BreedMon2Stats:
-BreedMon1Species: ; df45
+BreedMon2Species: ; df45
ds 1
ds 31