/****************************************************************************
 * Copyright (C) 2015-2016 by KDS                                           *
 *                                                                          *
 * This file is part of Sovereign of the Skies.                             *
 *                                                                          *
 *   Sovereign of the Skies is free software: you can redistribute it       *
 *   and/or modify it                                                       *
 *   under the terms of the GNU Lesser General Public License as published  *
 *   by the Free Software Foundation, either version 3 of the License, or   *
 *   (at your option) any later version provided you include a copy of the  *
 *   licence and this header.                                               *
 *                                                                          *
 *   Sovereign of the Skies is distributed in the hope that it will be      *
 *   useful, but WITHOUT ANY WARRANTY; without even the implied warranty of *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
 *   GNU Lesser General Public License for more details.                    *
 *                                                                          *
 *   You should have received a copy of the GNU Lesser General Public       *
 *   License along with Sovereign of the Skies.                             *
 *   If not, see <http://www.gnu.org/licenses/>.                            *
 ****************************************************************************/

/**
 * @file battle_script.h
 * @author KDS
 * @date 15 dec 2016
 * @brief Preprocessor Macros for writing PKMN Battle Scripts
 */


#include <constants/moves.h>

@@ Banks
#define BANK_USER	1
#define BANK_TARGET	0

@@ Delay

#define DELAY_HALFSECOND	0x20
#define DELAY_1SECOND		0x40

#define STRING_LOADER		0x0203C020

@@ Compare operands
.equ Equal, 0x0
.equ Notequal, 0x1
.equ Inferior, 0x2
.equ Superior, 0x3
.equ Anded, 0x4

@@@@@@@@@@@@@@@@@ Macro

@@ Super commands
.macro calculatedamage
.word 0x7060504
.endm

@@ Custom commands
.macro callasm callasm_routine
.byte 0xF8
.word \callasm_routine
.endm

.macro setword setword_address setword_word
.byte 0xF9
.word \setword_address
.word \setword_word
.endm

@@ Index commands
.macro attackcanceler
.byte 0
.endm

.macro accuracycheck accuracycheck_address accuracycheck_parameter1
.byte 1
.word \accuracycheck_address
.hword \accuracycheck_parameter1
.endm

.macro attackstring
.byte 2
.endm

.macro ppreduce
.byte 3
.endm

.macro critcalc
.byte 4
.endm

.macro cmd5
.byte 5
.endm

.macro cmd6
.byte 6
.endm

.macro cmd7
.byte 7
.endm

.macro cmd8
.byte 8
.endm

.macro attackanimation
.byte 9
.endm

.macro waitanimation
.byte 0xA
.endm

.macro graphicalhpupdate graphicalhpupdate_bank
.byte 0xB
.byte \graphicalhpupdate_bank
.endm

.macro datahpupdate datahpupdate_bank
.byte 0xC
.byte \datahpupdate_bank
.endm

.macro critmessage
.byte 0xD
.endm

.macro missmessage
.byte 0xE
.endm

.macro resultmessage
.byte 0xF
.endm

.macro printstring printstring_string
.byte 0x10
.hword \printstring_string
.endm

.macro printstring2 printstring2_string
.byte 0x11
.hword \printstring2_string
.endm

.macro waitmessage waitmessage_delay
.byte 0x12
.hword \waitmessage_delay
.endm

.macro printfromtable printfromtable_table
.byte 0x13
.word \printfromtable_table
.endm

.macro printfromtable2 printfromtable2_table
.byte 0x14
.word \printfromtable2_table
.endm

.macro seteffectwithchancetarget
.byte 0x15
.endm

.macro seteffecttarget
.byte 0x16
.endm

.macro seteffectuser
.byte 0x17
.endm

.macro clearstatus clearstatus_bank
.byte 0x18
.byte \clearstatus_bank
.endm

.macro faintpokemon faintpokemon_parameter1 faintpokemon_parameter2 faintpokemon_parameter3
.byte 0x19
.byte \faintpokemon_parameter1
.byte \faintpokemon_parameter2
.word \faintpokemon_parameter3
.endm

.macro cmd1a cmd1a_parameter1
.byte 0x1A
.byte cmd1a_parameter1
.endm

.macro cmd1b cmd1b_bank
.byte 0x1B
.byte \cmd1b_bank
.endm

.macro jumpifstatus jumpifstatus_bank jumpifstatus_status jumpifstatus_address
.byte 0x1C
.byte \jumpifstatus_bank
.word \jumpifstatus_status
.word \jumpifstatus_address
.endm

.macro jumpifsecondarystatus jumpifsecondarystatus_bank jumpifsecondarystatus_status jumpifsecondarystatus_address
.byte 0x1D
.byte \jumpifsecondarystatus_bank
.word \jumpifsecondarystatus_status
.word \jumpifsecondarystatus_address
.endm

.macro jumpifability jumpifability_bank jumpifability_ability jumpifability_address
.byte 0x1E
.byte \jumpifability_bank
.byte \jumpifability_ability
.word \jumpifability_address
.endm

.macro jumpifhalverset jumpifhalverset_bank jumpifhalverset_status jumpifhalverset_address
.byte 0x1F
.byte \jumpifhalverset_bank
.hword \jumpifhalverset_status
.word \jumpifhalverset_address
.endm

.macro jumpifstat jumpifstat_bank jumpifstat_flag jumpifstat_quantity jumpifstat_statid jumpifstat_address
.byte 0x20
.byte \jumpifstat_bank
.byte \jumpifstat_flag
.byte \jumpifstat_quantity
.byte \jumpifstat_statid
.word \jumpifstat_address
.endm

.macro jumpifspecialstatusflag jumpifspecialstatusflag_bank jumpifspecialstatusflag_word_to_and jumpifspecialstatusflag_statut jumpifspecialstatusflag_address
.byte 0x21
.byte \jumpifspecialstatusflag_bank
.word \jumpifspecialstatusflag_word_to_and
.byte \jumpifspecialstatusflag_statut
.word \jumpifspecialstatusflag_address
.endm

.macro jumpiftype jumpiftype_bank jumpiftype_type jumpiftype_address
.byte 0x22
.byte \jumpiftype_bank
.byte \jumpiftype_type
.word \jumpiftype_address
.endm

.macro cmd23 cmd23_side_or_bank
.byte 0x23
.byte \cmd23_side_or_bank
.endm

.macro gotoandsomething gotoandsomething_address
.byte 0x24
.word \gotoandsomething_address
.endm

.macro cmd25
.byte 0x25
.endm

.macro cmd26 cmd26_param1
.byte 0x26
.byte \cmd26_param1
.endm

.macro cmd27 cmd27_address
.byte 0x27
.word \cmd27_address
.endm

.macro goto goto_address
.byte 0x28
.word \goto_address
.endm

.macro jumpifbyte jumpifbyte_ifflag jumpifbyte_checkaddr jumpifbyte_compare jumpifbyte_address
.byte 0x29
.byte \jumpifbyte_ifflag
.word \jumpifbyte_checkaddr
.byte \jumpifbyte_compare
.word \jumpifbyte_address
.endm

.macro jumpifhalfword jumpifhalfword_ifflag jumpifhalfword_checkaddr jumpifhalfword_compare jumpifhalfword_address
.byte 0x2A
.byte \jumpifhalfword_ifflag
.word \jumpifhalfword_checkaddr
.hword \jumpifhalfword_compare
.word \jumpifhalfword_address
.endm

.macro jumpifword jumpifword_ifflag jumpifword_checkaddr jumpifword_compare jumpifword_address
.byte 0x2B
.byte \jumpifword_ifflag
.word \jumpifword_checkaddr
.word \jumpifword_compare
.word \jumpifword_address
.endm

.macro jumpifarrayequal jumpifarrayequal_mem1 jumpifarrayequal_mem2 jumpifarrayequal_size jumpifarrayequal_address
.byte 0x2C
.word \jumpifarrayequal_mem1
.word \jumpifarrayequal_mem2
.byte \jumpifarrayequal_size
.word \jumpifarrayequal_address
.endm

.macro jumpifarraynotequal jumpifarraynotequal_mem1 jumpifarraynotequal_mem2 jumpifarraynotequal_size jumpifarraynotequal_address
.byte 0x2D
.word \jumpifarraynotequal_mem1
.word \jumpifarraynotequal_mem2
.byte \jumpifarraynotequal_size
.word \jumpifarraynotequal_address
.endm

.macro setbyte setbyte_pointer setbyte_value
.byte 0x2E
.word \setbyte_pointer
.byte \setbyte_value
.endm

.macro addbyte addbyte_pointer addbyte_value
.byte 0x2F
.word \addbyte_pointer
.byte \addbyte_value
.endm

.macro subtractbyte subtractbyte_pointer subtractbyte_value
.byte 0x30
.word \subtractbyte_pointer
.byte \subtractbyte_value
.endm

.macro copyarray copyarray_destination copyarray_source copyarray_size
.byte 0x31
.word \copyarray_destination
.word \copyarray_source
.byte \copyarray_size
.endm

.macro cmd32 cmd32_param1 cmd32_param2 cmd32_param3 cmd32_byte
.byte 0x32
.word \cmd32_param1
.word \cmd32_param2
.word \cmd32_param3
.byte \cmd32_byte
.endm

.macro orbyte orbyte_pointer orbyte_value
.byte 0x33
.word \orbyte_pointer
.byte \orbyte_value
.endm

.macro orhalfword orhalfword_pointer orhalfword_value
.byte 0x34
.word \orhalfword_pointer
.hword \orhalfword_value
.endm

.macro orword orword_pointer orword_value
.byte 0x35
.word \orword_pointer
.word \orword_value
.endm

.macro bicbyte bicbyte_pointer bicbyte_value
.byte 0x36
.word \bicbyte_pointer
.byte \bicbyte_value
.endm

.macro bichalfword bichalfword_pointer bichalfword_value
.byte 0x37
.word \bichalfword_pointer
.hword \bichalfword_value
.endm

.macro bicword bicword_pointer bicword_value
.byte 0x38
.word \bicword_pointer
.word \bicword_value
.endm

.macro pause pause_duration
.byte 0x39
.hword \pause_duration
.endm

.macro waitstate
.byte 0x3A
.endm

.macro somethinghealcmd3b somethinghealcmd3b_bank
.byte 0x3B
.byte \somethinghealcmd3b_bank
.endm

.macro return
.byte 0x3C
.endm

.macro end
.byte 0x3D
.endm

.macro end2
.byte 0x3E
.endm

.macro end3
.byte 0x3F
.endm

.macro cmd40 cmd40_address
.byte 0x40
.word \cmd40_address
.endm

.macro call call_address
.byte 0x41
.word \call_address
.endm

.macro jumpiftype2 jumpiftype2_bank jumpiftype2_type jumpiftype2_address
.byte 0x42
.byte \jumpiftype2_bank
.byte \jumpiftype2_type
.word \jumpiftype2_address
.endm

.macro jumpifabilitypresent jumpifabilitypresent_ability jumpifabilitypresent_address
.byte 0x43
.byte \jumpifabilitypresent_ability
.word \jumpifabilitypresent_address
.endm

.macro cmd44
.byte 0x44
.endm

.macro playanimation playanimation_bank playanimation_animation playanimation_word
.byte 0x45
.byte \playanimation_bank
.byte \playanimation_animation
.word \playanimation_word
.endm

.macro cmd46 cmd46_bank cmd46_address cmd46_address2
.byte 0x46
.byte \cmd46_bank
.word \cmd46_address
.word \cmd46_address2
.endm

.macro cmd47
.byte 0x47
.endm

.macro playstatchangeanimation playstatchangeanimation_bank playstatchangeanimation_colour playstatchangeanimation_byte
.byte 0x48
.byte \playstatchangeanimation_bank
.byte \playstatchangeanimation_colour
.byte \playstatchangeanimation_byte
.endm

.macro cmd49 cmd49_byte1 cmd49_byte2
.byte 0x49
.byte \cmd49_byte1
.byte \cmd49_byte2
.endm

.macro damagecalc2
.byte 0x4A
.endm

.macro cmd4b
.byte 0x4B
.endm

.macro switch1 switch1_bank
.byte 0x4C
.byte \switch1_bank
.endm

.macro switch2 switch2_bank
.byte 0x4D
.byte \switch2_bank
.endm

.macro switch3 switch3_bank switch3_byte
.byte 0x4E
.byte \switch3_bank
.byte \switch3_byte
.endm

.macro jumpifcannotswitch jumpifcannotswitch_bank jumpifcannotswitch_address
.byte 0x4F
.byte \jumpifcannotswitch_bank
.word \jumpifcannotswitch_address
.endm

.macro openpartyscreen openpartyscreen_bank openpartyscreen_address
.byte 0x50
.byte \openpartyscreen_bank
.word \openpartyscreen_address
.endm

.macro cmd51 cmd51_bank cmd51_param2
.byte 0x51
.byte \cmd51_bank
.byte \cmd51_param2
.endm

.macro cmd52 cmd52_bank
.byte 0x52
.byte \cmd52_bank
.endm

.macro cmd53 cmd53_bank
.byte 0x53
.byte \cmd53_bank
.endm

.macro cmd54 cmd54_hword
.byte 0x54
.hword \cmd54_hword
.endm

.macro cmd55 cmd55_word
.byte 0x55
.word \cmd55_word
.endm

.macro cmd56 cmd56_bank_or_side
.byte 0x56
.byte \cmd56_bank_or_side
.endm

.macro cmd57
.byte 0x57
.endm

.macro cmd58 cmd58_bank
.byte 0x58
.byte \cmd58_bank
.endm

.macro checkiflearnmoveinbattle checkiflearnmoveinbattle_param1 checkiflearnmoveinbattle_param2 checkiflearnmoveinbattle_bank_maybe
.byte 0x59
.word \checkiflearnmoveinbattle_param1
.word \checkiflearnmoveinbattle_param2
.byte \checkiflearnmoveinbattle_bank_maybe
.endm

.macro cmd5a cmd5a_address
.byte 0x5A
.word \cmd5a_address
.endm

.macro cmd5b cmd5b_address
.byte 0x5B
.word \cmd5b_address
.endm

.macro cmd5c cmd5c_bank
.byte 0x5C
.byte \cmd5c_bank
.endm

.macro cmd5d
.byte 0x5D
.endm

.macro cmd5e cmd5e_bank
.byte 0x5E
.byte \cmd5e_bank
.endm

.macro cmd5f
.byte 0x5F
.endm

.macro cmd60 cmd60_byte
.byte 0x60
.byte \cmd60_byte
.endm

.macro cmd61 cmd61_bank_or_side
.byte 0x61
.byte \cmd61_bank_or_side
.endm

.macro cmd62 cmd62_bank_or_side
.byte 0x62
.byte \cmd62_bank_or_side
.endm

.macro jumptoattack jumptoattack_bank
.byte 0x63
.byte \jumptoattack_bank
.endm

.macro statusanimation statusanimation_bank
.byte 0x64
.byte \statusanimation_bank
.endm

.macro cmd65 cmd65_bank_or_side cmd65_address
.byte 0x65
.byte \cmd65_bank_or_side
.word \cmd65_address
.endm

.macro cmd66 cmd66_bank_or_side cmd66_bank_or_side2 cmd66_address
.byte 0x66
.byte \cmd66_bank_or_side
.byte \cmd66_bank_or_side2
.word \cmd66_address
.endm

.macro cmd67
.byte 0x67
.endm

.macro cmd68
.byte 0x68
.endm

.macro cmd69
.byte 0x69
.endm

.macro removeitem removeitem_bank
.byte 0x6A
.byte \removeitem_bank
.endm

.macro cmd6b
.byte 0x6B
.endm

.macro cmd6c
.byte 0x6C
.endm

.macro cmd6d
.byte 0x6D
.endm

.macro cmd6e
.byte 0x6E
.endm

.macro cmd6f cmd6f_bank
.byte 0x6F
.byte \cmd6f_bank
.endm

.macro cmd70 cmd70_bank
.byte 0x70
.byte \cmd70_bank
.endm

.macro cmd71
.byte 0x71
.endm

.macro cmd72 cmd72_address
.byte 0x72
.word \cmd72_address
.endm

.macro cmd73 cmd73_bank
.byte 0x73
.byte \cmd73_bank
.endm

.macro cmd74 cmd74_bank
.byte 0x74
.byte \cmd74_bank
.endm

.macro cmd75
.byte 0x75
.endm

.macro cmd76 cmd76_bank cmd76_byte
.byte 0x76
.byte \cmd76_bank
.byte \cmd76_byte
.endm

.macro setprotect
.byte 0x77
.endm

.macro faintifabilitynotdamp
.byte 0x78
.endm

.macro setuserhptozero
.byte 0x79
.endm

.macro jumpwhiletargetvalid jumpwhiletargetvalid_address
.byte 0x7A
.word \jumpwhiletargetvalid_address
.endm

.macro setdamageasrestorehalfmaxhp setdamageasrestorehalfmaxhp_address setdamageasrestorehalfmaxhp_byte
.byte 0x7B
.word \setdamageasrestorehalfmaxhp_address
.byte \setdamageasrestorehalfmaxhp_byte
.endm

.macro jumptolastusedattack
.byte 0x7C
.endm

.macro setrain
.byte 0x7D
.endm

.macro setreflect
.byte 0x7E
.endm

.macro setleechseed
.byte 0x7F
.endm

.macro manipulatedamage
.byte 0x80
.endm

.macro setrest setrest_address
.byte 0x81
.word \setrest_address
.endm

.macro jumpifnotfirstturn jumpifnotfirstturn_address
.byte 0x82
.word \jumpifnotfirstturn_address
.endm

.macro nop3
.byte 0x83
.endm

.macro jumpifcannotsleep jumpifcannotsleep_address
.byte 0x84
.word \jumpifcannotsleep_address
.endm

.macro stockpile
.byte 0x85
.endm

.macro stockpiletobasedamage stockpiletobasedamage_address
.byte 0x86
.word \stockpiletobasedamage_address
.endm

.macro stockpiletohprecovery stockpiletohprecovery_address
.byte 0x87
.word \stockpiletohprecovery_address
.endm

.macro negativedamage
.byte 0x88
.endm

.macro statbuffchange statbuffchange_target statbuffchange_address
.byte 0x89
.byte \statbuffchange_target
.word \statbuffchange_address
.endm

.macro normalisebuffs
.byte 0x8A
.endm

.macro setbide
.byte 0x8B
.endm

.macro confuseifrepeatingattackends
.byte 0x8C
.endm

.macro setloopcounter setloopcounter_number_of_loop
.byte 0x8D
.byte \setloopcounter_number_of_loop
.endm

.macro cmd8e
.byte 0x8E
.endm

.macro forcerandomswitch forcerandomswitch_address
.byte 0x8F
.word \forcerandomswitch_address
.endm

.macro changetypestoenemyattacktype changetypestoenemyattacktype_address
.byte 0x90
.word \changetypestoenemyattacktype_address
.endm

.macro givemoney
.byte 0x91
.endm

.macro setlightscreen
.byte 0x92
.endm

.macro koplussomethings koplussomethings_address
.byte 0x93
.word \koplussomethings_address
.endm

.macro gethalfcurrentenemyhp
.byte 0x94
.endm

.macro setsandstorm
.byte 0x95
.endm

.macro weatherdamage
.byte 0x96
.endm

.macro tryinfatuatetarget tryinfatuatetarget_address
.byte 0x97
.word \tryinfatuatetarget_address
.endm

.macro cmd98 cmd98_byte
.byte 0x98
.byte \cmd98_byte
.endm

.macro setmisteffect
.byte 0x99
.endm

.macro setincreasedcriticalchance
.byte 0x9A
.endm

.macro transformdataexecution
.byte 0x9B
.endm

.macro setsubstituteeffect
.byte 0x9C
.endm

.macro copyattack copyattack_address
.byte 0x9D
.word \copyattack_address
.endm

.macro metronomeeffect
.byte 0x9E
.endm

.macro nightshadedamageeffect
.byte 0x9F
.endm

.macro psywavedamageeffect
.byte 0xA0
.endm

.macro counterdamagecalculator counterdamagecalculator_address
.byte 0xA1
.word \counterdamagecalculator_address
.endm

.macro mirrorcoatdamagecalculator mirrorcoatdamagecalculator_address
.byte 0xA2
.word \mirrorcoatdamagecalculator_address
.endm

.macro disablelastusedattack disablelastusedattack_address
.byte 0xA3
.word \disablelastusedattack_address
.endm

.macro setencore setencore_address
.byte 0xA4
.word \setencore_address
.endm

.macro painsplitdamagecalculator painsplitdamagecalculator_address
.byte 0xA5
.word \painsplitdamagecalculator_address
.endm

.macro settypetorandomresistance settypetorandomresistance_address
.byte 0xA6
.word \settypetorandomresistance_address
.endm

.macro setalwayshitflag
.byte 0xA7
.endm

.macro copymovepermanently copymovepermanently_address
.byte 0xA8
.word \copymovepermanently_address
.endm

.macro selectrandommovefromusermoves selectrandommovefromusermoves_address
.byte 0xA9
.word \selectrandommovefromusermoves_address
.endm

.macro destinybondeffect
.byte 0xAA
.endm

.macro cmdab
.byte 0xAB
.endm

.macro remaininghptopower
.byte 0xAC
.endm

.macro reducepprandom reducepprandom_address
.byte 0xAD
.word \reducepprandom_address
.endm

.macro clearstatusifnotsoundproofed
.byte 0xAE
.endm

.macro cursetarget cursetarget_address
.byte 0xAF
.word \cursetarget_address
.endm

.macro setspikes setspikes_address
.byte 0xB0
.word \setspikes_address
.endm

.macro setforesight
.byte 0xB1
.endm

.macro setperishsong setperishsong_address
.byte 0xB2
.word \setperishsong_address
.endm

.macro rolloutdamagecalculation
.byte 0xB3
.endm

.macro jumpifconfusedandattackmaxed jumpifconfusedandattackmaxed_bank jumpifconfusedandattackmaxed_address
.byte 0xB4
.byte \jumpifconfusedandattackmaxed_bank
.word \jumpifconfusedandattackmaxed_address
.endm

.macro furycutterdamagecalculation
.byte 0xB5
.endm

.macro happinesstodamagecalculation
.byte 0xB6
.endm

.macro presentdamagecalculation
.byte 0xB7
.endm

.macro setsafeguard
.byte 0xB8
.endm

.macro magnitudedamagecalculation
.byte 0xB9
.endm

.macro cmdba cmdba_address
.byte 0xBA
.word \cmdba_address
.endm

.macro setsunny
.byte 0xBB
.endm

.macro maxattackhalvehp maxattackhalvehp_address
.byte 0xBC
.word \maxattackhalvehp_address
.endm

.macro copyfoestats copyfoestats_address
.byte 0xBD
.word \copyfoestats_address
.endm

.macro breakfree
.byte 0xBE
.endm

.macro setcurled
.byte 0xBF
.endm

.macro recoverbasedonsunlight
.byte 0xC0
.endm

.macro hiddenpowerdamagecalculation
.byte 0xC1
.endm

.macro selectnexttarget
.byte 0xC2
.endm

.macro setfutureattack setfutureattack_address
.byte 0xC3
.word \setfutureattack_address
.endm

.macro beatupcalculation beatupcalculation_address1 beatupcalculation_address2
.byte 0xC4
.word \beatupcalculation_address1
.word \beatupcalculation_address2
.endm

.macro hidepreattack
.byte 0xC5
.endm

.macro unhidepostattack
.byte 0xC6
.endm

.macro setminimize
.byte 0xC7
.endm

.macro sethail
.byte 0xC8
.endm

.macro jumpifattackandspecialattackcannotfall jumpifattackandspecialattackcannotfall_address
.byte 0xC9
.word \jumpifattackandspecialattackcannotfall_address
.endm

.macro setforcedtarget
.byte 0xCA
.endm

.macro setcharge
.byte 0xCB
.endm

.macro callterrainattack
.byte 0xCC
.endm

.macro cureifburnedparalysedorpoisoned cureifburnedparalysedorpoisoned_address
.byte 0xCD
.word \cureifburnedparalysedorpoisoned_address
.endm

.macro settorment settorment_address
.byte 0xCE
.word \settorment_address
.endm

.macro jumpifnodamage jumpifnodamage_address
.byte 0xCF
.word \jumpifnodamage_address
.endm

.macro settaunt settaunt_address
.byte 0xD0
.word \settaunt_address
.endm

.macro sethelpinghand sethelpinghand_address
.byte 0xD1
.word \sethelpinghand_address
.endm

.macro itemswap itemswap_address
.byte 0xD2
.word \itemswap_address
.endm

.macro copyability copyability_address
.byte 0xD3
.word \copyability_address
.endm

.macro cmdd4 cmdd4_byte cmdd4_address
.byte 0xD4
.byte \cmdd4_byte
.word \cmdd4_address
.endm

.macro setroots setroots_address
.byte 0xD5
.word \setroots_address
.endm

.macro doubledamagedealtifdamaged
.byte 0xD6
.endm

.macro setyawn setyawn_address
.byte 0xD7
.word \setyawn_address
.endm

.macro setdamagetohealthdifference setdamagetohealthdifference_address
.byte 0xD8
.word \setdamagetohealthdifference_address
.endm

.macro scaledamagebyhealthratio
.byte 0xD9
.endm

.macro abilityswap abilityswap_address
.byte 0xDA
.word \abilityswap_address
.endm

.macro imprisoneffect imprisoneffect_address
.byte 0xDB
.word \imprisoneffect_address
.endm

.macro setgrudge setgrudge_address
.byte 0xDC
.word \setgrudge_address
.endm

.macro weightdamagecalculation
.byte 0xDD
.endm

.macro assistattackselect assistattackselect_address
.byte 0xDE
.word \assistattackselect_address
.endm

.macro setmagiccoat setmagiccoat_address
.byte 0xDF
.word \setmagiccoat_address
.endm

.macro setstealstatchange setstealstatchange_address
.byte 0xE0
.word \setstealstatchange_address
.endm

.macro cmde1 cmde1_address
.byte 0xE1
.word \cmde1_address
.endm

.macro cmde2 cmde2_bank
.byte 0xE2
.byte \cmde2_bank
.endm

.macro jumpiffainted jumpiffainted_bank jumpiffainted_address
.byte 0xE3
.byte \jumpiffainted_bank
.word \jumpiffainted_address
.endm

.macro naturepowereffect
.byte 0xE4
.endm

.macro pickupitemcalculation
.byte 0xE5
.endm

.macro actualcastformswitch
.byte 0xE6
.endm

.macro castformswitch
.byte 0xE7
.endm

.macro settypebasedhalvers settypebasedhalvers_address
.byte 0xE8
.word \settypebasedhalvers_address
.endm

.macro seteffectbyweather
.byte 0xE9
.endm

.macro recycleitem recycleitem_address
.byte 0xEA
.word \recycleitem_address
.endm

.macro settypetoterrain settypetoterrain_address
.byte 0xEB
.word \settypetoterrain_address
.endm

.macro pursuitwhenswitched pursuitwhenswitched_address
.byte 0xEC
.word \pursuitwhenswitched_address
.endm

.macro snatchmove
.byte 0xED
.endm

.macro removereflectlightscreen
.byte 0xEE
.endm

.macro pokemoncatchfunction
.byte 0xEF
.endm

.macro catchpoke
.byte 0xF0
.endm

.macro capturesomethingf1 capturesomethingf1_address
.byte 0xF1
.word \capturesomethingf1_address
.endm

.macro capturesomethingf2
.byte 0xF2
.endm

.macro capturesomethingf3 capturesomethingf3_address
.byte 0xF3
.word \capturesomethingf3_address
.endm

.macro removehp
.byte 0xF4
.endm

.macro curestatutfirstword
.byte 0xF5
.endm

.macro cmdf6
.byte 0xF6
.endm

.macro activesidesomething
.byte 0xF7
.endm