summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/basestats.asm66
-rw-r--r--macros/charmap.asm328
-rw-r--r--macros/enum.asm40
-rw-r--r--macros/event.asm1068
-rw-r--r--macros/map.asm189
-rw-r--r--macros/mobile.asm2
-rw-r--r--macros/move_anim.asm293
-rw-r--r--macros/move_effect.asm186
-rw-r--r--macros/movement.asm444
-rw-r--r--macros/pic.asm4
-rw-r--r--macros/predef.asm20
-rw-r--r--macros/rst.asm17
-rw-r--r--macros/sound.asm264
-rw-r--r--macros/text.asm137
-rwxr-xr-xmacros/trade_anim.asm253
-rw-r--r--macros/trainer.asm11
-rwxr-xr-xmacros/wram.asm251
17 files changed, 3573 insertions, 0 deletions
diff --git a/macros/basestats.asm b/macros/basestats.asm
new file mode 100644
index 00000000..25ffcc02
--- /dev/null
+++ b/macros/basestats.asm
@@ -0,0 +1,66 @@
+define: macro
+if !def(\1)
+\1 equs \2
+endc
+endm
+
+const_value = 0
+
+add_tm: MACRO
+if !def(TM01)
+TM01 = const_value
+ enum_start 1
+endc
+ define _\@_1, "TM_\1"
+ const _\@_1
+ enum \1_TMNUM
+ENDM
+
+add_hm: MACRO
+if !def(HM01)
+HM01 = const_value
+endc
+ define _\@_1, "HM_\1"
+ const _\@_1
+ enum \1_TMNUM
+ENDM
+
+add_mt: MACRO
+ enum \1_TMNUM
+ENDM
+
+tmhm: MACRO
+x = 0
+y = 0
+w = 0
+ rept _NARG
+ if def(\1_TMNUM)
+ if \1_TMNUM < 25
+x = x | (1 << ((\1_TMNUM) - 1))
+ else
+ if \1_TMNUM < 49
+y = y | (1 << ((\1_TMNUM) - 1 - 24))
+ else
+w = w | (1 << ((\1_TMNUM) - 1 - 48))
+ endc
+ endc
+ else
+ fail "\1 is not a TM, HM, or move tutor move"
+ endc
+
+ shift
+ endr
+
+ rept 3
+ db x & $ff
+x = x >> 8
+ endr
+ rept 3
+ db y & $ff
+y = y >> 8
+ endr
+ rept 2
+ db w & $ff
+w = w >> 8
+ endr
+ENDM
diff --git a/macros/charmap.asm b/macros/charmap.asm
new file mode 100644
index 00000000..9eee57a0
--- /dev/null
+++ b/macros/charmap.asm
@@ -0,0 +1,328 @@
+; Control characters
+ charmap "<START>", $00
+ charmap "<PLAY_G>", $14 ; <PLAYER> + gender
+ charmap "<DAY>", $15
+ charmap "¯", $1f
+ charmap "<LNBRK>", $22
+ charmap "<POKE>", $24
+ charmap "%", $25
+ charmap "<RED>", $38
+ charmap "<GREEN>", $39
+ charmap "<ENEMY>", $3f
+ charmap "<SHINY>", $3f
+ charmap "<MOM>", $49
+ charmap "<PKMN>", $4a
+ charmap "<NEXT>", $4e
+ charmap "<LINE>", $4f
+
+ charmap "@", $50
+ charmap "<PARA>", $51
+ charmap "<PLAYER>", $52
+ charmap "<RIVAL>", $53
+ charmap "#", $54
+ charmap "<CONT>", $55
+ charmap "<......>", $56
+ charmap "<DONE>", $57
+ charmap "<PROMPT>", $58
+ charmap "<TARGET>", $59
+ charmap "<USER>", $5a
+ charmap "<PC>", $5b
+ charmap "<TM>", $5c
+ charmap "<TRNER>", $5d
+ charmap "<ROCKET>", $5e
+ charmap "<DEXEND>", $5f
+
+; Actual characters
+ charmap "▲", $61
+ charmap "_", $62
+ charmap "<COLON>", $6d ; necessary because ":" is already used
+ charmap "′", $6e
+ charmap "<LV>", $6e
+ charmap "″", $6f
+
+ charmap "<PO>", $70
+ charmap "<KE>", $71
+ charmap "◀", $71
+ charmap "<``>", $72
+ charmap "<''>", $73
+ charmap "<ID>", $73
+ charmap "№", $74
+ charmap "…", $75
+
+ charmap "┌", $79
+ charmap "─", $7a
+ charmap "┐", $7b
+ charmap "│", $7c
+ charmap "└", $7d
+ charmap "┘", $7e
+ charmap " ", $7f
+
+ charmap "A", $80
+ charmap "B", $81
+ charmap "C", $82
+ charmap "D", $83
+ charmap "E", $84
+ charmap "F", $85
+ charmap "G", $86
+ charmap "H", $87
+ charmap "I", $88
+ charmap "J", $89
+ charmap "K", $8a
+ charmap "L", $8b
+ charmap "M", $8c
+ charmap "N", $8d
+ charmap "O", $8e
+ charmap "P", $8f
+ charmap "Q", $90
+ charmap "R", $91
+ charmap "S", $92
+ charmap "T", $93
+ charmap "U", $94
+ charmap "V", $95
+ charmap "W", $96
+ charmap "X", $97
+ charmap "Y", $98
+ charmap "Z", $99
+
+ charmap "(", $9a
+ charmap ")", $9b
+ charmap ":", $9c
+ charmap ";", $9d
+ charmap "[", $9e
+ charmap "]", $9f
+
+ charmap "a", $a0
+ charmap "b", $a1
+ charmap "c", $a2
+ charmap "d", $a3
+ charmap "e", $a4
+ charmap "f", $a5
+ charmap "g", $a6
+ charmap "h", $a7
+ charmap "i", $a8
+ charmap "j", $a9
+ charmap "k", $aa
+ charmap "l", $ab
+ charmap "m", $ac
+ charmap "n", $ad
+ charmap "o", $ae
+ charmap "p", $af
+ charmap "q", $b0
+ charmap "r", $b1
+ charmap "s", $b2
+ charmap "t", $b3
+ charmap "u", $b4
+ charmap "v", $b5
+ charmap "w", $b6
+ charmap "x", $b7
+ charmap "y", $b8
+ charmap "z", $b9
+
+ charmap "Ä", $c0
+ charmap "Ö", $c1
+ charmap "Ü", $c2
+ charmap "ä", $c3
+ charmap "ö", $c4
+ charmap "ü", $c5
+
+ charmap "'d", $d0
+ charmap "'l", $d1
+ charmap "'m", $d2
+ charmap "'r", $d3
+ charmap "'s", $d4
+ charmap "'t", $d5
+ charmap "'v", $d6
+
+ charmap "←", $df
+ charmap "'", $e0
+ charmap "<PK>", $e1
+ charmap "<MN>", $e2
+ charmap "-", $e3
+
+ charmap "?", $e6
+ charmap "!", $e7
+ charmap ".", $e8
+ charmap "&", $e9
+
+ charmap "é", $ea
+ charmap "→", $eb
+ charmap "▷", $ec
+ charmap "▶", $ed
+ charmap "▼", $ee
+ charmap "♂", $ef
+ charmap "¥", $f0
+ charmap "×", $f1
+ charmap "·", $f2
+ charmap "/", $f3
+ charmap ",", $f4
+ charmap "♀", $f5
+
+ charmap "0", $f6
+ charmap "1", $f7
+ charmap "2", $f8
+ charmap "3", $f9
+ charmap "4", $fa
+ charmap "5", $fb
+ charmap "6", $fc
+ charmap "7", $fd
+ charmap "8", $fe
+ charmap "9", $ff
+
+; Japanese, for those bits of text that
+; were not translated to English.
+
+ charmap "ガ", $5
+ charmap "ギ", $6
+ charmap "グ", $7
+ charmap "ゲ", $8
+ charmap "ゴ", $9
+ charmap "ザ", $a
+ charmap "ジ", $b
+ charmap "ズ", $c
+ charmap "ゼ", $d
+ charmap "ゾ", $e
+ charmap "ダ", $f
+ charmap "ヂ", $10
+ charmap "ヅ", $11
+ charmap "デ", $12
+ charmap "ド", $13
+
+ charmap "バ", $19
+ charmap "ビ", $1a
+ charmap "ブ", $1b
+ charmap "ボ", $1c
+
+ charmap "が", $26
+ charmap "ぎ", $27
+ charmap "ぐ", $28
+ charmap "げ", $29
+ charmap "ご", $2a
+ charmap "ざ", $2b
+ charmap "じ", $2c
+ charmap "ず", $2d
+ charmap "ぜ", $2e
+ charmap "ぞ", $2f
+ charmap "だ", $30
+ charmap "ぢ", $31
+ charmap "づ", $32
+ charmap "で", $33
+ charmap "ど", $34
+
+ charmap "ば", $3a
+ charmap "び", $3b
+ charmap "ぶ", $3c
+ charmap "べ", $3d
+ charmap "ぼ", $3e
+
+ charmap "パ", $40
+ charmap "ピ", $41
+ charmap "プ", $42
+ charmap "ポ", $43
+ charmap "ぱ", $44
+ charmap "ぴ", $45
+ charmap "ぷ", $46
+ charmap "ぺ", $47
+ charmap "ぽ", $48
+
+ charmap "ア", $80
+ charmap "イ", $81
+ charmap "ウ", $82
+ charmap "エ", $83
+ charmap "ォ", $84
+ charmap "カ", $85
+ charmap "キ", $86
+ charmap "ク", $87
+ charmap "ケ", $88
+ charmap "コ", $89
+ charmap "サ", $8a
+ charmap "シ", $8b
+ charmap "ス", $8c
+ charmap "セ", $8d
+ charmap "ソ", $8e
+ charmap "タ", $8f
+ charmap "チ", $90
+ charmap "ツ", $91
+ charmap "テ", $92
+ charmap "ト", $93
+ charmap "ナ", $94
+ charmap "ニ", $95
+ charmap "ヌ", $96
+ charmap "ネ", $97
+ charmap "ノ", $98
+ charmap "ハ", $99
+ charmap "ヒ", $9a
+ charmap "フ", $9b
+ charmap "ホ", $9c
+ charmap "マ", $9d
+ charmap "ミ", $9e
+ charmap "ム", $9f
+ charmap "メ", $a0
+ charmap "モ", $a1
+ charmap "ヤ", $a2
+ charmap "ユ", $a3
+ charmap "ヨ", $a4
+ charmap "ラ", $a5
+ charmap "ル", $a6
+ charmap "レ", $a7
+ charmap "ロ", $a8
+ charmap "ワ", $a9
+ charmap "ヲ", $aa
+ charmap "ン", $ab
+ charmap "ッ", $ac
+ charmap "ャ", $ad
+ charmap "ュ", $ae
+ charmap "ョ", $af
+ charmap "ィ", $b0
+ charmap "あ", $b1
+ charmap "い", $b2
+ charmap "う", $b3
+ charmap "え", $b4
+ charmap "お", $b5
+ charmap "か", $b6
+ charmap "き", $b7
+ charmap "く", $b8
+ charmap "け", $b9
+ charmap "こ", $ba
+ charmap "さ", $bb
+ charmap "し", $bc
+ charmap "す", $bd
+ charmap "せ", $be
+ charmap "そ", $bf
+ charmap "た", $c0
+ charmap "ち", $c1
+ charmap "つ", $c2
+ charmap "て", $c3
+ charmap "と", $c4
+ charmap "な", $c5
+ charmap "に", $c6
+ charmap "ぬ", $c7
+ charmap "ね", $c8
+ charmap "の", $c9
+ charmap "は", $ca
+ charmap "ひ", $cb
+ charmap "ふ", $cc
+ charmap "へ", $cd
+ charmap "ほ", $ce
+ charmap "ま", $cf
+ charmap "み", $d0
+ charmap "む", $d1
+ charmap "め", $d2
+ charmap "も", $d3
+ charmap "や", $d4
+ charmap "ゆ", $d5
+ charmap "よ", $d6
+ charmap "ら", $d7
+ charmap "り", $d8
+ charmap "る", $d9
+ charmap "れ", $da
+ charmap "ろ", $db
+ charmap "わ", $dc
+ charmap "を", $dd
+ charmap "ん", $de
+ charmap "っ", $df
+ charmap "ゃ", $e0
+ charmap "ゅ", $e1
+ charmap "ょ", $e2
+ charmap "ー", $e3
+
+ charmap "ァ", $e9
diff --git a/macros/enum.asm b/macros/enum.asm
new file mode 100644
index 00000000..933f7b18
--- /dev/null
+++ b/macros/enum.asm
@@ -0,0 +1,40 @@
+; Enumerate variables
+
+enum_start: macro
+if _NARG >= 1
+__enum__ = \1
+else
+__enum__ = 0
+endc
+if _NARG >= 2
+__enumdir__ = \2
+else
+__enumdir__ = +1
+endc
+endm
+
+enum: macro
+\1 = __enum__
+__enum__ = __enum__ + __enumdir__
+endm
+
+enum_set: macro
+__enum__ = \1
+endm
+
+
+; Enumerate constants
+
+const_def: MACRO
+const_value = 0
+ENDM
+
+const: MACRO
+\1 EQU const_value
+const_value = const_value + 1
+ENDM
+
+shift_const: MACRO
+\1 EQU (1 << const_value)
+const_value = const_value + 1
+ENDM
diff --git a/macros/event.asm b/macros/event.asm
new file mode 100644
index 00000000..c575b7ca
--- /dev/null
+++ b/macros/event.asm
@@ -0,0 +1,1068 @@
+ enum_start
+
+ enum scall_command
+scall: macro
+ db scall_command
+ dw \1 ; pointer
+ endm
+
+ enum farscall_command
+farscall: macro
+ db farscall_command
+ dba \1
+ endm
+
+ enum ptcall_command
+ptcall: macro
+ db ptcall_command
+ dw \1 ; pointer
+ endm
+
+ enum jump_command
+jump: macro
+ db jump_command
+ dw \1 ; pointer
+ endm
+
+ enum farjump_command
+farjump: macro
+ db farjump_command
+ dba \1
+ endm
+
+ enum ptjump_command
+ptjump: macro
+ db ptjump_command
+ dw \1 ; pointer
+ endm
+
+ enum if_equal_command
+if_equal: macro
+ db if_equal_command
+ db \1 ; byte
+ dw \2 ; pointer
+ endm
+
+ enum if_not_equal_command
+if_not_equal: macro
+ db if_not_equal_command
+ db \1 ; byte
+ dw \2 ; pointer
+ endm
+
+ enum iffalse_command
+iffalse: macro
+ db iffalse_command
+ dw \1 ; pointer
+ endm
+
+ enum iftrue_command
+iftrue: macro
+ db iftrue_command
+ dw \1 ; pointer
+ endm
+
+ enum if_greater_than_command
+if_greater_than: macro
+ db if_greater_than_command
+ db \1 ; byte
+ dw \2 ; pointer
+ endm
+
+ enum if_less_than_command
+if_less_than: macro
+ db if_less_than_command
+ db \1 ; byte
+ dw \2 ; pointer
+ endm
+
+ enum jumpstd_command
+jumpstd: macro
+ db jumpstd_command
+ dw \1 ; predefined_script
+ endm
+
+ enum callstd_command
+callstd: macro
+ db callstd_command
+ dw \1 ; predefined_script
+ endm
+
+ enum callasm_command
+callasm: macro
+ db callasm_command
+ dba \1
+ endm
+
+ enum special_command
+special: macro
+ db special_command
+ dw (\1Special - SpecialsPointers) / 3
+ endm
+
+add_special: MACRO
+\1Special::
+ dba \1
+ENDM
+
+ enum ptcallasm_command
+ptcallasm: macro
+ db ptcallasm_command
+ dw \1 ; asm
+ endm
+
+ enum checkmaptriggers_command
+checkmaptriggers: macro
+ db checkmaptriggers_command
+ map \1 ; map
+ endm
+
+ enum domaptrigger_command
+domaptrigger: macro
+ db domaptrigger_command
+ map \1 ; map
+ db \2 ; trigger_id
+ endm
+
+ enum checktriggers_command
+checktriggers: macro
+ db checktriggers_command
+ endm
+
+ enum dotrigger_command
+dotrigger: macro
+ db dotrigger_command
+ db \1 ; trigger_id
+ endm
+
+ enum writebyte_command
+writebyte: macro
+ db writebyte_command
+ db \1 ; value
+ endm
+
+ enum addvar_command
+addvar: macro
+ db addvar_command
+ db \1 ; value
+ endm
+
+ enum random_command
+random: macro
+ db random_command
+ db \1 ; input
+ endm
+
+ enum checkver_command
+checkver: macro
+ db checkver_command
+ endm
+
+ enum copybytetovar_command
+copybytetovar: macro
+ db copybytetovar_command
+ dw \1 ; address
+ endm
+
+ enum copyvartobyte_command
+copyvartobyte: macro
+ db copyvartobyte_command
+ dw \1 ; address
+ endm
+
+ enum loadvar_command
+loadvar: macro
+ db loadvar_command
+ dw \1 ; address
+ db \2 ; value
+ endm
+
+ enum checkcode_command
+checkcode: macro
+ db checkcode_command
+ db \1 ; variable_id
+ endm
+
+ enum writevarcode_command
+writevarcode: macro
+ db writevarcode_command
+ db \1 ; variable_id
+ endm
+
+ enum writecode_command
+writecode: macro
+ db writecode_command
+ db \1 ; variable_id
+ db \2 ; value
+ endm
+
+ enum giveitem_command
+giveitem: macro
+ db giveitem_command
+ db \1 ; item
+if _NARG == 2
+ db \2 ; quantity
+else
+ db 1
+endc
+ endm
+
+ enum takeitem_command
+takeitem: macro
+ db takeitem_command
+ db \1 ; item
+if _NARG == 2
+ db \2 ; quantity
+else
+ db 1
+endc
+ endm
+
+ enum checkitem_command
+checkitem: macro
+ db checkitem_command
+ db \1 ; item
+ endm
+
+ enum givemoney_command
+givemoney: macro
+ db givemoney_command
+ db \1 ; account
+ dt \2 ; money
+ endm
+
+ enum takemoney_command
+takemoney: macro
+ db takemoney_command
+ db \1 ; account
+ dt \2 ; money
+ endm
+
+ enum checkmoney_command
+checkmoney: macro
+ db checkmoney_command
+ db \1 ; account
+ dt \2 ; money
+ endm
+
+ enum givecoins_command
+givecoins: macro
+ db givecoins_command
+ dw \1 ; coins
+ endm
+
+ enum takecoins_command
+takecoins: macro
+ db takecoins_command
+ dw \1 ; coins
+ endm
+
+ enum checkcoins_command
+checkcoins: macro
+ db checkcoins_command
+ dw \1 ; coins
+ endm
+
+ enum addcellnum_command
+addcellnum: macro
+ db addcellnum_command
+ db \1 ; person
+ endm
+
+ enum delcellnum_command
+delcellnum: macro
+ db delcellnum_command
+ db \1 ; person
+ endm
+
+ enum checkcellnum_command
+checkcellnum: macro
+ db checkcellnum_command
+ db \1 ; person
+ endm
+
+ enum checktime_command
+checktime: macro
+ db checktime_command
+ db \1 ; time
+ endm
+
+checkmorn EQUS "checktime 1 << MORN"
+checkday EQUS "checktime 1 << DAY"
+checknite EQUS "checktime 1 << NITE"
+
+ enum checkpoke_command
+checkpoke: macro
+ db checkpoke_command
+ db \1 ; pkmn
+ endm
+
+ enum givepoke_command
+givepoke: macro
+ db givepoke_command
+ db \1 ; pokemon
+ db \2 ; level
+ if _NARG >= 3
+ db \3 ; item
+ if _NARG >= 4
+ db \4 ; trainer
+ if \4
+ dw \5 ; trainer_name_pointer
+ dw \6 ; pkmn_nickname
+ endc
+ else
+ db 0
+ endc
+ else
+ db 0, 0
+ endc
+ endm
+
+ enum giveegg_command
+giveegg: macro
+ db giveegg_command
+ db \1 ; pkmn
+ db \2 ; level
+ endm
+
+ enum givepokeitem_command
+givepokeitem: macro
+ db givepokeitem_command
+ dw \1 ; pointer
+ endm
+
+ enum checkpokeitem_command
+checkpokeitem: macro
+ db checkpokeitem_command
+ dw \1 ; pointer
+ endm
+
+ enum checkevent_command
+checkevent: macro
+ db checkevent_command
+ dw \1 ; event_flag
+ endm
+
+ enum clearevent_command
+clearevent: macro
+ db clearevent_command
+ dw \1 ; event_flag
+ endm
+
+ enum setevent_command
+setevent: macro
+ db setevent_command
+ dw \1 ; event_flag
+ endm
+
+ enum checkflag_command
+checkflag: macro
+ db checkflag_command
+ dw \1 ; engine_flag
+ endm
+
+ enum clearflag_command
+clearflag: macro
+ db clearflag_command
+ dw \1 ; engine_flag
+ endm
+
+ enum setflag_command
+setflag: macro
+ db setflag_command
+ dw \1 ; engine_flag
+ endm
+
+ enum wildon_command
+wildon: macro
+ db wildon_command
+ endm
+
+ enum wildoff_command
+wildoff: macro
+ db wildoff_command
+ endm
+
+ enum xycompare_command
+xycompare: macro
+ db xycompare_command
+ dw \1 ; pointer
+ endm
+
+ enum warpmod_command
+warpmod: macro
+ db warpmod_command
+ db \1 ; warp_id
+ map \2 ; map
+ endm
+
+ enum blackoutmod_command
+blackoutmod: macro
+ db blackoutmod_command
+ map \1 ; map
+ endm
+
+ enum warp_command
+warp: macro
+ db warp_command
+ map \1 ; map
+ db \2 ; x
+ db \3 ; y
+ endm
+
+ enum readmoney_command
+readmoney: macro
+ db readmoney_command
+ db \1 ; account
+ db \2 ; memory
+ endm
+
+ enum readcoins_command
+readcoins: macro
+ db readcoins_command
+ db \1 ; memory
+ endm
+
+ enum RAM2MEM_command
+RAM2MEM: macro
+ db RAM2MEM_command
+ db \1 ; memory
+ endm
+
+ enum pokenamemem_command
+pokenamemem: macro
+ db pokenamemem_command
+ db \1 ; pokemon
+ db \2 ; memory
+ endm
+
+ enum itemtotext_command
+itemtotext: macro
+ db itemtotext_command
+ db \1 ; item
+ db \2 ; memory
+ endm
+
+ enum mapnametotext_command
+mapnametotext: macro
+ db mapnametotext_command
+ db \1 ; memory
+ endm
+
+ enum trainertotext_command
+trainertotext: macro
+ db trainertotext_command
+ db \1 ; trainer_id
+ db \2 ; trainer_group
+ db \3 ; memory
+ endm
+
+ enum stringtotext_command
+stringtotext: macro
+ db stringtotext_command
+ dw \1 ; text_pointer
+ db \2 ; memory
+ endm
+
+ enum itemnotify_command
+itemnotify: macro
+ db itemnotify_command
+ endm
+
+ enum pocketisfull_command
+pocketisfull: macro
+ db pocketisfull_command
+ endm
+
+ enum opentext_command
+opentext: macro
+ db opentext_command
+ endm
+
+ enum refreshscreen_command
+refreshscreen: macro
+ db refreshscreen_command
+ db \1 ; dummy
+ endm
+
+ enum closetext_command
+closetext: macro
+ db closetext_command
+ endm
+
+ enum loadbytec2cf_command
+loadbytec2cf: macro
+ db loadbytec2cf_command
+ db \1 ; byte
+ endm
+
+ enum farwritetext_command
+farwritetext: macro
+ db farwritetext_command
+ dba \1
+ endm
+
+ enum writetext_command
+writetext: macro
+ db writetext_command
+ dw \1 ; text_pointer
+ endm
+
+ enum repeattext_command
+repeattext: macro
+ db repeattext_command
+ db \1 ; byte
+ db \2 ; byte
+ endm
+
+ enum yesorno_command
+yesorno: macro
+ db yesorno_command
+ endm
+
+ enum loadmenudata_command
+loadmenudata: macro
+ db loadmenudata_command
+ dw \1 ; data
+ endm
+
+ enum closewindow_command
+closewindow: macro
+ db closewindow_command
+ endm
+
+ enum jumptextfaceplayer_command
+jumptextfaceplayer: macro
+ db jumptextfaceplayer_command
+ dw \1 ; text_pointer
+ endm
+
+; IF _CRYSTAL
+ enum farjumptext_command
+farjumptext: macro
+ db farjumptext_command
+ dba \1
+ endm
+; ENDC
+
+ enum jumptext_command
+jumptext: macro
+ db jumptext_command
+ dw \1 ; text_pointer
+ endm
+
+ enum waitbutton_command
+waitbutton: macro
+ db waitbutton_command
+ endm
+
+ enum buttonsound_command
+buttonsound: macro
+ db buttonsound_command
+ endm
+
+ enum pokepic_command
+pokepic: macro
+ db pokepic_command
+ db \1 ; pokemon
+ endm
+
+ enum closepokepic_command
+closepokepic: macro
+ db closepokepic_command
+ endm
+
+ enum _2dmenu_command
+_2dmenu: macro
+ db _2dmenu_command
+ endm
+
+ enum verticalmenu_command
+verticalmenu: macro
+ db verticalmenu_command
+ endm
+
+ enum loadpikachudata_command
+loadpikachudata: macro
+ db loadpikachudata_command
+ endm
+
+ enum randomwildmon_command
+randomwildmon: macro
+ db randomwildmon_command
+ endm
+
+ enum loadmemtrainer_command
+loadmemtrainer: macro
+ db loadmemtrainer_command
+ endm
+
+ enum loadwildmon_command
+loadwildmon: macro
+ db loadwildmon_command
+ db \1 ; pokemon
+ db \2 ; level
+ endm
+
+ enum loadtrainer_command
+loadtrainer: macro
+ db loadtrainer_command
+ db \1 ; trainer_group
+ db \2 ; trainer_id
+ endm
+
+ enum startbattle_command
+startbattle: macro
+ db startbattle_command
+ endm
+
+ enum reloadmapafterbattle_command
+reloadmapafterbattle: macro
+ db reloadmapafterbattle_command
+ endm
+
+ enum catchtutorial_command
+catchtutorial: macro
+ db catchtutorial_command
+ db \1 ; byte
+ endm
+
+ enum trainertext_command
+trainertext: macro
+ db trainertext_command
+ db \1 ; which_text
+ endm
+
+ enum trainerflagaction_command
+trainerflagaction: macro
+ db trainerflagaction_command
+ db \1 ; action
+ endm
+
+ enum winlosstext_command
+winlosstext: macro
+ db winlosstext_command
+ dw \1 ; win_text_pointer
+ dw \2 ; loss_text_pointer
+ endm
+
+ enum scripttalkafter_command
+scripttalkafter: macro
+ db scripttalkafter_command
+ endm
+
+ enum end_if_just_battled_command
+end_if_just_battled: macro
+ db end_if_just_battled_command
+ endm
+
+ enum check_just_battled_command
+check_just_battled: macro
+ db check_just_battled_command
+ endm
+
+ enum setlasttalked_command
+setlasttalked: macro
+ db setlasttalked_command
+ db \1 ; person
+ endm
+
+ enum applymovement_command
+applymovement: macro
+ db applymovement_command
+ db \1 ; person
+ dw \2 ; data
+ endm
+
+ enum applymovement2_command
+applymovement2: macro
+ db applymovement2_command
+ dw \1 ; data
+ endm
+
+ enum faceplayer_command
+faceplayer: macro
+ db faceplayer_command
+ endm
+
+ enum faceperson_command
+faceperson: macro
+ db faceperson_command
+ db \1 ; person1
+ db \2 ; person2
+ endm
+
+ enum variablesprite_command
+variablesprite: macro
+ db variablesprite_command
+ db \1 - SPRITE_VARS ; byte
+ db \2 ; sprite
+ endm
+
+ enum disappear_command
+disappear: macro
+ db disappear_command
+ db \1 ; person
+ endm
+
+ enum appear_command
+appear: macro
+ db appear_command
+ db \1 ; person
+ endm
+
+ enum follow_command
+follow: macro
+ db follow_command
+ db \1 ; person2
+ db \2 ; person1
+ endm
+
+ enum stopfollow_command
+stopfollow: macro
+ db stopfollow_command
+ endm
+
+ enum moveperson_command
+moveperson: macro
+ db moveperson_command
+ db \1 ; person
+ db \2 ; x
+ db \3 ; y
+ endm
+
+ enum writepersonxy_command
+writepersonxy: macro
+ db writepersonxy_command
+ db \1 ; person
+ endm
+
+ enum loademote_command
+loademote: macro
+ db loademote_command
+ db \1 ; bubble
+ endm
+
+ enum showemote_command
+showemote: macro
+ db showemote_command
+ db \1 ; bubble
+ db \2 ; person
+ db \3 ; time
+ endm
+
+ enum spriteface_command
+spriteface: macro
+ db spriteface_command
+ db \1 ; person
+ db \2 ; facing
+ endm
+
+ enum follownotexact_command
+follownotexact: macro
+ db follownotexact_command
+ db \1 ; person2
+ db \2 ; person1
+ endm
+
+ enum earthquake_command
+earthquake: macro
+ db earthquake_command
+ db \1 ; param
+ endm
+
+ enum changemap_command
+changemap: macro
+ db changemap_command
+ db \1 ; map_bank
+ dw \2 ; map_data_pointer
+ endm
+
+ enum changeblock_command
+changeblock: macro
+ db changeblock_command
+ db \1 ; x
+ db \2 ; y
+ db \3 ; block
+ endm
+
+ enum reloadmap_command
+reloadmap: macro
+ db reloadmap_command
+ endm
+
+ enum reloadmappart_command
+reloadmappart: macro
+ db reloadmappart_command
+ endm
+
+ enum writecmdqueue_command
+writecmdqueue: macro
+ db writecmdqueue_command
+ dw \1 ; queue_pointer
+ endm
+
+ enum delcmdqueue_command
+delcmdqueue: macro
+ db delcmdqueue_command
+ db \1 ; byte
+ endm
+
+ enum playmusic_command
+playmusic: macro
+ db playmusic_command
+ dw \1 ; music_pointer
+ endm
+
+ enum encountermusic_command
+encountermusic: macro
+ db encountermusic_command
+ endm
+
+ enum musicfadeout_command
+musicfadeout: macro
+ db musicfadeout_command
+ dw \1 ; music
+ db \2 ; fadetime
+ endm
+
+ enum playmapmusic_command
+playmapmusic: macro
+ db playmapmusic_command
+ endm
+
+ enum dontrestartmapmusic_command
+dontrestartmapmusic: macro
+ db dontrestartmapmusic_command
+ endm
+
+ enum cry_command
+cry: macro
+ db cry_command
+ dw \1 ; cry_id
+ endm
+
+ enum playsound_command
+playsound: macro
+ db playsound_command
+ dw \1 ; sound_pointer
+ endm
+
+ enum waitsfx_command
+waitsfx: macro
+ db waitsfx_command
+ endm
+
+ enum warpsound_command
+warpsound: macro
+ db warpsound_command
+ endm
+
+ enum specialsound_command
+specialsound: macro
+ db specialsound_command
+ endm
+
+ enum passtoengine_command
+passtoengine: macro
+ db passtoengine_command
+ db \1 ; data_pointer
+ endm
+
+ enum newloadmap_command
+newloadmap: macro
+ db newloadmap_command
+ db \1 ; which_method
+ endm
+
+ enum pause_command
+pause: macro
+ db pause_command
+ db \1 ; length
+ endm
+
+ enum deactivatefacing_command
+deactivatefacing: macro
+ db deactivatefacing_command
+ db \1 ; time
+ endm
+
+ enum priorityjump_command
+priorityjump: macro
+ db priorityjump_command
+ dw \1 ; pointer
+ endm
+
+ enum warpcheck_command
+warpcheck: macro
+ db warpcheck_command
+ endm
+
+ enum ptpriorityjump_command
+ptpriorityjump: macro
+ db ptpriorityjump_command
+ dw \1 ; pointer
+ endm
+
+ enum return_command
+return: macro
+ db return_command
+ endm
+
+ enum end_command
+end: macro
+ db end_command
+ endm
+
+ enum reloadandreturn_command
+reloadandreturn: macro
+ db reloadandreturn_command
+ db \1 ; which_method
+ endm
+
+ enum end_all_command
+end_all: macro
+ db end_all_command
+ endm
+
+ enum pokemart_command
+pokemart: macro
+ db pokemart_command
+ db \1 ; dialog_id
+ dw \2 ; mart_id
+ endm
+
+ enum elevator_command
+elevator: macro
+ db elevator_command
+ dw \1 ; floor_list_pointer
+ endm
+
+ enum trade_command
+trade: macro
+ db trade_command
+ db \1 ; trade_id
+ endm
+
+ enum askforphonenumber_command
+askforphonenumber: macro
+ db askforphonenumber_command
+ db \1 ; number
+ endm
+
+ enum phonecall_command
+phonecall: macro
+ db phonecall_command
+ dw \1 ; caller_name
+ endm
+
+ enum hangup_command
+hangup: macro
+ db hangup_command
+ endm
+
+ enum describedecoration_command
+describedecoration: macro
+ db describedecoration_command
+ db \1 ; byte
+ endm
+
+ enum fruittree_command
+fruittree: macro
+ db fruittree_command
+ db \1 ; tree_id
+ endm
+
+ enum specialphonecall_command
+specialphonecall: macro
+ db specialphonecall_command
+ dw \1 ; call_id
+ endm
+
+ enum checkphonecall_command
+checkphonecall: macro
+ db checkphonecall_command
+ endm
+
+ enum verbosegiveitem_command
+verbosegiveitem: macro
+ db verbosegiveitem_command
+ db \1 ; item
+if _NARG == 2
+ db \2 ; quantity
+else
+ db 1
+endc
+ endm
+
+ enum verbosegiveitem2_command
+verbosegiveitem2: macro
+ db verbosegiveitem2_command
+ db \1 ; item
+ db \2 ; var
+ endm
+
+ enum swarm_command
+swarm: macro
+ db swarm_command
+ db \1 ; flag
+ map \2 ; map
+ endm
+
+ enum halloffame_command
+halloffame: macro
+ db halloffame_command
+ endm
+
+ enum credits_command
+credits: macro
+ db credits_command
+ endm
+
+ enum warpfacing_command
+warpfacing: macro
+ db warpfacing_command
+ db \1 ; facing
+ map \2 ; map
+ db \3 ; x
+ db \4 ; y
+ endm
+
+ enum battletowertext_command
+battletowertext: macro
+ db battletowertext_command
+ db \1 ; memory
+ endm
+
+ enum landmarktotext_command
+landmarktotext: macro
+ db landmarktotext_command
+ db \1 ; id
+ db \2 ; memory
+ endm
+
+ enum trainerclassname_command
+trainerclassname: macro
+ db trainerclassname_command
+ db \1 ; id
+ db \2 ; memory
+ endm
+
+ enum name_command
+name: macro
+ db name_command
+ db \1 ; type
+ db \2 ; id
+ db \3 ; memory
+ endm
+
+ enum wait_command
+wait: macro
+ db wait_command
+ db \1 ; duration
+ endm
+
+ enum check_save_command
+check_save: macro
+ db check_save_command
+ endm
diff --git a/macros/map.asm b/macros/map.asm
new file mode 100644
index 00000000..2e876577
--- /dev/null
+++ b/macros/map.asm
@@ -0,0 +1,189 @@
+map: MACRO
+ db GROUP_\1, MAP_\1
+ENDM
+
+roam_map: MACRO
+; A map and an arbitrary number of some more maps.
+
+ map \1
+ db \2
+
+ rept \2
+ map \3
+ shift
+ endr
+
+ db 0
+ENDM
+
+person_event: macro
+ db \1 ; sprite
+ db \2 + 4 ; y
+ db \3 + 4 ; x
+ db \4 ; movement function
+ dn \5, \6 ; radius: y, x
+ db \7 ; clock_hour
+ db \8 ; clock_daytime
+ shift
+ dn \8, \9 ; color_function
+ shift
+ db \9 ; sight_range
+ shift
+ dw \9 ; pointer
+ shift
+ dw \9 ; event flag
+ endm
+
+signpost: macro
+ db \1 ; y
+ db \2 ; x
+ db \3 ; function
+ dw \4 ; pointer
+ endm
+
+xy_trigger: macro
+ db \1 ; number
+ db \2 ; y
+ db \3 ; x
+ db \4 ; unknown1
+ dw \5 ; script
+ db \6 ; unknown2
+ db \7 ; unknown3
+ endm
+
+warp_def: macro
+ db \1 ; y
+ db \2 ; x
+ db \3 ; warp_to
+ map \4 ; map
+ endm
+
+
+map_header: MACRO
+ ; label, tileset, permission, location, music, phone service flag, time of day, fishing group
+\1_MapHeader:
+ db BANK(\1_SecondMapHeader), \2, \3
+ dw \1_SecondMapHeader
+ db \4, \5
+ dn \6, \7
+ db \8
+ENDM
+
+
+map_header_2: MACRO
+; label, map, border block, connections
+\1_SecondMapHeader::
+ db \3
+ db \2_HEIGHT, \2_WIDTH
+ db BANK(\1_BlockData)
+ dw \1_BlockData
+ db BANK(\1_MapScriptHeader)
+ dw \1_MapScriptHeader
+ dw \1_MapEventHeader
+ db \4
+ENDM
+
+connection: MACRO
+if "\1" == "north"
+;\2: map id
+;\3: map label (eventually will be rolled into map id)
+;\4: x
+;\5: offset?
+;\6: strip length
+;\7: this map id
+ map \2
+ dw \3_BlockData + \2_WIDTH * (\2_HEIGHT - 3) + \5
+ dw OverworldMap + \4 + 3
+ db \6
+ db \2_WIDTH
+ db \2_HEIGHT * 2 - 1
+ db (\4 - \5) * -2
+ dw OverworldMap + \2_HEIGHT * (\2_WIDTH + 6) + 1
+endc
+
+if "\1" == "south"
+;\2: map id
+;\3: map label (eventually will be rolled into map id)
+;\4: x
+;\5: offset?
+;\6: strip length
+;\7: this map id
+ map \2
+ dw \3_BlockData + \5
+ dw OverworldMap + (\7_HEIGHT + 3) * (\7_WIDTH + 6) + \4 + 3
+ db \6
+ db \2_WIDTH
+ db 0
+ db (\4 - \5) * -2
+ dw OverworldMap + \2_WIDTH + 7
+endc
+
+if "\1" == "west"
+;\2: map id
+;\3: map label (eventually will be rolled into map id)
+;\4: y
+;\5: offset?
+;\6: strip length
+;\7: this map id
+ map \2
+ dw \3_BlockData + (\2_WIDTH * \5) + \2_WIDTH - 3
+ dw OverworldMap + (\7_WIDTH + 6) * (\4 + 3)
+ db \6
+ db \2_WIDTH
+ db (\4 - \5) * -2
+ db \2_WIDTH * 2 - 1
+ dw OverworldMap + \2_WIDTH * 2 + 6
+endc
+
+if "\1" == "east"
+;\2: map id
+;\3: map label (eventually will be rolled into map id)
+;\4: y
+;\5: offset?
+;\6: strip length
+;\7: this map id
+ map \2
+ dw \3_BlockData + (\2_WIDTH * \5)
+ dw OverworldMap + (\7_WIDTH + 6) * (\4 + 3 + 1) - 3
+ db \6
+ db \2_WIDTH
+ db (\4 - \5) * -2
+ db 0
+ dw OverworldMap + \2_WIDTH + 7
+endc
+
+ENDM
+
+mapgroup: MACRO
+GROUP_\1 EQU const_value
+ enum MAP_\1
+\1_HEIGHT EQU \2
+\1_WIDTH EQU \3
+ENDM
+
+newgroup: MACRO
+const_value = const_value + 1
+ enum_start 1
+ENDM
+
+elevfloor: MACRO
+ db \1, \2
+ map \3
+ENDM
+
+itemball: MACRO
+if _NARG == 2
+ db \1, \2
+else
+ db \1, 1
+endc
+endm
+
+stonetable: MACRO
+ db \1, \2
+ dw \3
+endm
+
+maptrigger: MACRO
+ dw \1, 0
+endm
diff --git a/macros/mobile.asm b/macros/mobile.asm
new file mode 100644
index 00000000..06b40d69
--- /dev/null
+++ b/macros/mobile.asm
@@ -0,0 +1,2 @@
+; Many mobile functions were dummied out in localization.
+mobile EQUS "ret"
diff --git a/macros/move_anim.asm b/macros/move_anim.asm
new file mode 100644
index 00000000..05faf253
--- /dev/null
+++ b/macros/move_anim.asm
@@ -0,0 +1,293 @@
+anim_wait: macro
+if \1 >= $d0
+ flip out
+endc
+ db \1
+ endm
+
+ enum_start $d0
+
+ enum anim_obj_command ; d0
+anim_obj: macro
+ db anim_obj_command
+ db \1 ; obj
+ db (\2 << 3) + \3 ; x
+ db (\4 << 3) + \5 ; y
+ db \6 ; param
+ endm
+
+ enum anim_1gfx_command ; d1
+anim_1gfx: macro
+ db anim_1gfx_command
+ db \1 ; gfx1
+ endm
+
+ enum anim_2gfx_command ; d2
+anim_2gfx: macro
+ db anim_2gfx_command
+ db \1 ; gfx1
+ db \2 ; gfx2
+ endm
+
+ enum anim_3gfx_command ; d3
+anim_3gfx: macro
+ db anim_3gfx_command
+ db \1 ; gfx1
+ db \2 ; gfx2
+ db \3 ; gfx3
+ endm
+
+ enum anim_4gfx_command ; d4
+anim_4gfx: macro
+ db anim_4gfx_command
+ db \1 ; gfx1
+ db \2 ; gfx2
+ db \3 ; gfx3
+ db \4 ; gfx4
+ endm
+
+ enum anim_5gfx_command ; d5
+anim_5gfx: macro
+ db anim_5gfx_command
+ db \1 ; gfx1
+ db \2 ; gfx2
+ db \3 ; gfx3
+ db \4 ; gfx4
+ db \5 ; gfx5
+ endm
+
+ enum anim_incobj_command ; d6
+anim_incobj: macro
+ db anim_incobj_command
+ db \1 ; id
+ endm
+
+ enum anim_setobj_command ; d7
+anim_setobj: macro
+ db anim_setobj_command
+ db \1 ; id
+ db \2 ; obj
+ endm
+
+ enum anim_incbgeffect_command ; d8
+anim_incbgeffect: macro
+ db anim_incbgeffect_command
+ db \1 ; effect
+ endm
+
+ enum anim_enemyfeetobj_command ; d9
+anim_enemyfeetobj: macro
+ db anim_enemyfeetobj_command
+ endm
+
+ enum anim_playerheadobj_command ; da
+anim_playerheadobj: macro
+ db anim_playerheadobj_command
+ endm
+
+ enum anim_checkpokeball_command ; db
+anim_checkpokeball: macro
+ db anim_checkpokeball_command
+ endm
+
+ enum anim_transform_command ; dc
+anim_transform: macro
+ db anim_transform_command
+ endm
+
+ enum anim_raisesub_command ; dd
+anim_raisesub: macro
+ db anim_raisesub_command
+ endm
+
+ enum anim_dropsub_command ; de
+anim_dropsub: macro
+ db anim_dropsub_command
+ endm
+
+ enum anim_resetobp0_command ; df
+anim_resetobp0: macro
+ db anim_resetobp0_command
+ endm
+
+ enum anim_sound_command ; e0
+anim_sound: macro
+ db anim_sound_command
+ db (\1 << 2) | \2 ; duration, tracks
+ db \3 ; id
+ endm
+
+ enum anim_cry_command ; e1
+anim_cry: macro
+ db anim_cry_command
+ db \1 ; pitch
+ endm
+
+ enum anim_minimizeopp_command ; e2
+anim_minimizeopp: macro
+ db anim_minimizeopp_command
+ endm
+
+ enum anim_oamon_command ; e3
+anim_oamon: macro
+ db anim_oamon_command
+ endm
+
+ enum anim_oamoff_command ; e4
+anim_oamoff: macro
+ db anim_oamoff_command
+ endm
+
+ enum anim_clearobjs_command ; e5
+anim_clearobjs: macro
+ db anim_clearobjs_command
+ endm
+
+ enum anim_beatup_command ; e6
+anim_beatup: macro
+ db anim_beatup_command
+ endm
+
+ enum anim_0xe7_command ; e7
+anim_0xe7: macro
+ db anim_0xe7_command
+ endm
+
+ enum anim_updateactorpic_command ; e8
+anim_updateactorpic: macro
+ db anim_updateactorpic_command
+ endm
+
+ enum anim_minimize_command ; e9
+anim_minimize: macro
+ db anim_minimize_command
+ endm
+
+ enum anim_0xea_command ; ea
+anim_0xea: macro
+ db anim_0xea_command
+ endm
+
+ enum anim_0xeb_command ; eb
+anim_0xeb: macro
+ db anim_0xeb_command
+ endm
+
+ enum anim_0xec_command ; ec
+anim_0xec: macro
+ db anim_0xec_command
+ endm
+
+ enum anim_0xed_command ; ed
+anim_0xed: macro
+ db anim_0xed_command
+ endm
+
+ enum anim_jumpand_command ; ee
+anim_jumpand: macro
+ db anim_jumpand_command
+ db \1 ; value
+ dw \2 ; address
+ endm
+
+ enum anim_jumpuntil_command ; ef
+anim_jumpuntil: macro
+ db anim_jumpuntil_command
+ dw \1 ; address
+ endm
+
+ enum anim_bgeffect_command ; f0
+anim_bgeffect: macro
+ db anim_bgeffect_command
+ db \1 ; effect
+ db \2 ; unknown
+ db \3 ; unknown
+ db \4 ; unknown
+ endm
+
+ enum anim_bgp_command ; f1
+anim_bgp: macro
+ db anim_bgp_command
+ db \1 ; colors
+ endm
+
+ enum anim_obp0_command ; f2
+anim_obp0: macro
+ db anim_obp0_command
+ db \1 ; colors
+ endm
+
+ enum anim_obp1_command ; f3
+anim_obp1: macro
+ db anim_obp1_command
+ db \1 ; colors
+ endm
+
+ enum anim_clearsprites_command ; f4
+anim_clearsprites: macro
+ db anim_clearsprites_command
+ endm
+
+ enum anim_0xf5_command ; f5
+anim_0xf5: macro
+ db anim_0xf5_command
+ endm
+
+ enum anim_0xf6_command ; f6
+anim_0xf6: macro
+ db anim_0xf6_command
+ endm
+
+ enum anim_0xf7_command ; f7
+anim_0xf7: macro
+ db anim_0xf7_command
+ endm
+
+ enum anim_jumpif_command ; f8
+anim_jumpif: macro
+ db anim_jumpif_command
+ db \1 ; value
+ dw \2 ; address
+ endm
+
+ enum anim_setvar_command ; f9
+anim_setvar: macro
+ db anim_setvar_command
+ db \1 ; value
+ endm
+
+ enum anim_incvar_command ; fa
+anim_incvar: macro
+ db anim_incvar_command
+ endm
+
+ enum anim_jumpvar_command ; fb
+anim_jumpvar: macro
+ db anim_jumpvar_command
+ db \1 ; value
+ dw \2 ; address
+ endm
+
+ enum anim_jump_command ; fc
+anim_jump: macro
+ db anim_jump_command
+ dw \1 ; address
+ endm
+
+ enum anim_loop_command ; fd
+anim_loop: macro
+ db anim_loop_command
+ db \1 ; count
+ dw \2 ; address
+ endm
+
+ enum anim_call_command ; fe
+anim_call: macro
+ db anim_call_command
+ dw \1 ; address
+ endm
+
+ enum anim_ret_command ; ff
+anim_ret: macro
+ db anim_ret_command
+ endm
diff --git a/macros/move_effect.asm b/macros/move_effect.asm
new file mode 100644
index 00000000..d25db45b
--- /dev/null
+++ b/macros/move_effect.asm
@@ -0,0 +1,186 @@
+command: macro
+ enum \1_command
+\1 equs "db \1_command"
+endm
+
+ enum_start 1
+
+ command checkturn
+ command checkobedience
+ command usedmovetext
+ command doturn
+ command critical
+ command damagestats
+ command stab
+ command damagevariation
+ command checkhit
+ command lowersub
+ command hittargetnosub
+ command raisesub
+ command failuretext
+ command checkfaint
+ command criticaltext
+ command supereffectivetext
+ command checkdestinybond
+ command buildopponentrage
+ command poisontarget
+ command sleeptarget
+ command draintarget
+ command eatdream
+ command burntarget
+ command freezetarget
+ command paralyzetarget
+ command selfdestruct
+ command mirrormove
+ command statup
+ command statdown
+ command payday
+ command conversion
+ command resetstats
+ command storeenergy
+ command unleashenergy
+ command forceswitch
+ command endloop
+ command flinchtarget
+ command ohko
+ command recoil
+ command mist
+ command focusenergy
+ command confuse
+ command confusetarget
+ command heal
+ command transform
+ command screen
+ command poison
+ command paralyze
+ command substitute
+ command rechargenextturn
+ command mimic
+ command metronome
+ command leechseed
+ command splash
+ command disable
+ command cleartext
+ command charge
+ command checkcharge
+ command traptarget
+ command effect0x3c
+ command rampage
+ command checkrampage
+ command constantdamage
+ command counter
+ command encore
+ command painsplit
+ command snore
+ command conversion2
+ command lockon
+ command sketch
+ command defrostopponent
+ command sleeptalk
+ command destinybond
+ command spite
+ command falseswipe
+ command healbell
+ command kingsrock
+ command triplekick
+ command kickcounter
+ command thief
+ command arenatrap
+ command nightmare
+ command defrost
+ command curse
+ command protect
+ command spikes
+ command foresight
+ command perishsong
+ command startsandstorm
+ command endure
+ command checkcurl
+ command rolloutpower
+ command effect0x5d
+ command furycutter
+ command attract
+ command happinesspower
+ command present
+ command damagecalc
+ command frustrationpower
+ command safeguard
+ command checksafeguard
+ command getmagnitude
+ command batonpass
+ command pursuit
+ command clearhazards
+ command healmorn
+ command healday
+ command healnite
+ command hiddenpower
+ command startrain
+ command startsun
+ command attackup
+ command defenseup
+ command speedup
+ command specialattackup
+ command specialdefenseup
+ command accuracyup
+ command evasionup
+ command attackup2
+ command defenseup2
+ command speedup2
+ command specialattackup2
+ command specialdefenseup2
+ command accuracyup2
+ command evasionup2
+ command attackdown
+ command defensedown
+ command speeddown
+ command specialattackdown
+ command specialdefensedown
+ command accuracydown
+ command evasiondown
+ command attackdown2
+ command defensedown2
+ command speeddown2
+ command specialattackdown2
+ command specialdefensedown2
+ command accuracydown2
+ command evasiondown2
+ command statupmessage
+ command statdownmessage
+ command statupfailtext
+ command statdownfailtext
+ command effectchance
+ command statdownanim
+ command statupanim
+ command switchturn
+ command fakeout
+ command bellydrum
+ command psychup
+ command rage
+ command doubleflyingdamage
+ command doubleundergrounddamage
+ command mirrorcoat
+ command checkfuturesight
+ command futuresight
+ command doubleminimizedamage
+ command skipsuncharge
+ command thunderaccuracy
+ command teleport
+ command beatup
+ command ragedamage
+ command resettypematchup
+ command allstatsup
+ command effect0xa5
+ command raisesubnoanim
+ command lowersubnoanim
+ command effect0xa8
+ command clearmissdamage
+ command movedelay
+ command hittarget
+ command tristatuschance
+ command supereffectivelooptext
+ command startloop
+ command curl
+
+ enum_start -1, -1
+ command endmove
+ command endturn
diff --git a/macros/movement.asm b/macros/movement.asm
new file mode 100644
index 00000000..fd4852e8
--- /dev/null
+++ b/macros/movement.asm
@@ -0,0 +1,444 @@
+
+ enum_start
+
+ enum movement_turn_head_down
+turn_head_down: macro
+ db movement_turn_head_down ; $00
+ endm
+
+ enum movement_turn_head_up
+turn_head_up: macro
+ db movement_turn_head_up ; $01
+ endm
+
+ enum movement_turn_head_left
+turn_head_left: macro
+ db movement_turn_head_left ; $02
+ endm
+
+ enum movement_turn_head_right
+turn_head_right: macro
+ db movement_turn_head_right ; $03
+ endm
+
+ enum movement_turn_step_down
+turn_step_down: macro
+ db movement_turn_step_down ; $04
+ endm
+
+ enum movement_turn_step_up
+turn_step_up: macro
+ db movement_turn_step_up ; $05
+ endm
+
+ enum movement_turn_step_left
+turn_step_left: macro
+ db movement_turn_step_left ; $06
+ endm
+
+ enum movement_turn_step_right
+turn_step_right: macro
+ db movement_turn_step_right ; $07
+ endm
+
+ enum movement_slow_step_down
+slow_step_down: macro
+ db movement_slow_step_down ; $08
+ endm
+
+ enum movement_slow_step_up
+slow_step_up: macro
+ db movement_slow_step_up ; $09
+ endm
+
+ enum movement_slow_step_left
+slow_step_left: macro
+ db movement_slow_step_left ; $0a
+ endm
+
+ enum movement_slow_step_right
+slow_step_right: macro
+ db movement_slow_step_right ; $0b
+ endm
+
+ enum movement_step_down
+step_down: macro
+ db movement_step_down ; $0c
+ endm
+
+ enum movement_step_up
+step_up: macro
+ db movement_step_up ; $0d
+ endm
+
+ enum movement_step_left
+step_left: macro
+ db movement_step_left ; $0e
+ endm
+
+ enum movement_step_right
+step_right: macro
+ db movement_step_right ; $0f
+ endm
+
+ enum movement_big_step_down
+big_step_down: macro
+ db movement_big_step_down ; $10
+ endm
+
+ enum movement_big_step_up
+big_step_up: macro
+ db movement_big_step_up ; $11
+ endm
+
+ enum movement_big_step_left
+big_step_left: macro
+ db movement_big_step_left ; $12
+ endm
+
+ enum movement_big_step_right
+big_step_right: macro
+ db movement_big_step_right ; $13
+ endm
+
+ enum movement_slow_slide_step_down
+slow_slide_step_down: macro
+ db movement_slow_slide_step_down ; $14
+ endm
+
+ enum movement_slow_slide_step_up
+slow_slide_step_up: macro
+ db movement_slow_slide_step_up ; $15
+ endm
+
+ enum movement_slow_slide_step_left
+slow_slide_step_left: macro
+ db movement_slow_slide_step_left ; $16
+ endm
+
+ enum movement_slow_slide_step_right
+slow_slide_step_right: macro
+ db movement_slow_slide_step_right ; $17
+ endm
+
+ enum movement_slide_step_down
+slide_step_down: macro
+ db movement_slide_step_down ; $18
+ endm
+
+ enum movement_slide_step_up
+slide_step_up: macro
+ db movement_slide_step_up ; $19
+ endm
+
+ enum movement_slide_step_left
+slide_step_left: macro
+ db movement_slide_step_left ; $1a
+ endm
+
+ enum movement_slide_step_right
+slide_step_right: macro
+ db movement_slide_step_right ; $1b
+ endm
+
+ enum movement_fast_slide_step_down
+fast_slide_step_down: macro
+ db movement_fast_slide_step_down ; $1c
+ endm
+
+ enum movement_fast_slide_step_up
+fast_slide_step_up: macro
+ db movement_fast_slide_step_up ; $1d
+ endm
+
+ enum movement_fast_slide_step_left
+fast_slide_step_left: macro
+ db movement_fast_slide_step_left ; $1e
+ endm
+
+ enum movement_fast_slide_step_right
+fast_slide_step_right: macro
+ db movement_fast_slide_step_right ; $1f
+ endm
+
+ enum movement_turn_away_down
+turn_away_down: macro
+ db movement_turn_away_down ; $20
+ endm
+
+ enum movement_turn_away_up
+turn_away_up: macro
+ db movement_turn_away_up ; $21
+ endm
+
+ enum movement_turn_away_left
+turn_away_left: macro
+ db movement_turn_away_left ; $22
+ endm
+
+ enum movement_turn_away_right
+turn_away_right: macro
+ db movement_turn_away_right ; $23
+ endm
+
+ enum movement_turn_in_down
+turn_in_down: macro
+ db movement_turn_in_down ; $24
+ endm
+
+ enum movement_turn_in_up
+turn_in_up: macro
+ db movement_turn_in_up ; $25
+ endm
+
+ enum movement_turn_in_left
+turn_in_left: macro
+ db movement_turn_in_left ; $26
+ endm
+
+ enum movement_turn_in_right
+turn_in_right: macro
+ db movement_turn_in_right ; $27
+ endm
+
+ enum movement_turn_waterfall_down
+turn_waterfall_down: macro
+ db movement_turn_waterfall_down ; $28
+ endm
+
+ enum movement_turn_waterfall_up
+turn_waterfall_up: macro
+ db movement_turn_waterfall_up ; $29
+ endm
+
+ enum movement_turn_waterfall_left
+turn_waterfall_left: macro
+ db movement_turn_waterfall_left ; $2a
+ endm
+
+ enum movement_turn_waterfall_right
+turn_waterfall_right: macro
+ db movement_turn_waterfall_right ; $2b
+ endm
+
+ enum movement_slow_jump_step_down
+slow_jump_step_down: macro
+ db movement_slow_jump_step_down ; $2c
+ endm
+
+ enum movement_slow_jump_step_up
+slow_jump_step_up: macro
+ db movement_slow_jump_step_up ; $2d
+ endm
+
+ enum movement_slow_jump_step_left
+slow_jump_step_left: macro
+ db movement_slow_jump_step_left ; $2e
+ endm
+
+ enum movement_slow_jump_step_right
+slow_jump_step_right: macro
+ db movement_slow_jump_step_right ; $2f
+ endm
+
+ enum movement_jump_step_down
+jump_step_down: macro
+ db movement_jump_step_down ; $30
+ endm
+
+ enum movement_jump_step_up
+jump_step_up: macro
+ db movement_jump_step_up ; $31
+ endm
+
+ enum movement_jump_step_left
+jump_step_left: macro
+ db movement_jump_step_left ; $32
+ endm
+
+ enum movement_jump_step_right
+jump_step_right: macro
+ db movement_jump_step_right ; $33
+ endm
+
+ enum movement_fast_jump_step_down
+fast_jump_step_down: macro
+ db movement_fast_jump_step_down ; $34
+ endm
+
+ enum movement_fast_jump_step_up
+fast_jump_step_up: macro
+ db movement_fast_jump_step_up ; $35
+ endm
+
+ enum movement_fast_jump_step_left
+fast_jump_step_left: macro
+ db movement_fast_jump_step_left ; $36
+ endm
+
+ enum movement_fast_jump_step_right
+fast_jump_step_right: macro
+ db movement_fast_jump_step_right ; $37
+ endm
+
+__enum__ = $3a
+
+ enum movement_remove_fixed_facing
+remove_fixed_facing: macro
+ db movement_remove_fixed_facing ; $3a
+ endm
+
+ enum movement_fix_facing
+fix_facing: macro
+ db movement_fix_facing ; $3b
+ endm
+
+ enum movement_show_person
+show_person: macro
+ db movement_show_person ; $3c
+ endm
+
+ enum movement_hide_person
+hide_person: macro
+ db movement_hide_person ; $3d
+ endm
+
+ enum movement_step_sleep_1
+step_sleep_1: macro
+ db movement_step_sleep_1 ; $3e
+ endm
+
+ enum movement_step_sleep_2
+step_sleep_2: macro
+ db movement_step_sleep_2 ; $3f
+ endm
+
+ enum movement_step_sleep_3
+step_sleep_3: macro
+ db movement_step_sleep_3 ; $40
+ endm
+
+ enum movement_step_sleep_4
+step_sleep_4: macro
+ db movement_step_sleep_4 ; $41
+ endm
+
+ enum movement_step_sleep_5
+step_sleep_5: macro
+ db movement_step_sleep_5 ; $42
+ endm
+
+ enum movement_step_sleep_6
+step_sleep_6: macro
+ db movement_step_sleep_6 ; $43
+ endm
+
+ enum movement_step_sleep_7
+step_sleep_7: macro
+ db movement_step_sleep_7 ; $44
+ endm
+
+ enum movement_step_sleep_8
+step_sleep_8: macro
+ db movement_step_sleep_8 ; $45
+ endm
+
+ enum movement_step_sleep
+step_sleep: macro
+ db movement_step_sleep ; $46
+ db \1 ; duration
+ endm
+
+ enum movement_step_end
+step_end: macro
+ db movement_step_end ; $47
+ endm
+
+; Whatever Movement_48 is, it takes a one-byte parameter
+
+__enum__ = $49
+
+ enum movement_remove_person
+remove_person: macro
+ db movement_remove_person ; $49
+ endm
+
+ enum movement_step_loop
+step_loop: macro
+ db movement_step_loop ; $4a
+ endm
+
+ enum movement_step_4b
+step_4b: macro
+ db movement_step_4b ; $4b
+ endm
+
+ enum movement_teleport_from
+teleport_from: macro
+ db movement_teleport_from ; $4c
+ endm
+
+ enum movement_teleport_to
+teleport_to: macro
+ db movement_teleport_to ; $4d
+ endm
+
+ enum movement_skyfall
+skyfall: macro
+ db movement_skyfall ; $4e
+ endm
+
+ enum movement_step_dig
+step_dig: macro
+ db movement_step_dig ; $4f
+ db \1
+ endm
+
+ enum movement_step_bump
+step_bump: macro
+ db movement_step_bump ; $50
+ endm
+
+ enum movement_fish_got_bite
+fish_got_bite: macro
+ db movement_fish_got_bite ; $51
+ endm
+
+ enum movement_fish_cast_rod
+fish_cast_rod: macro
+ db movement_fish_cast_rod ; $52
+ endm
+
+ enum movement_hide_emote
+hide_emote: macro
+ db movement_hide_emote ; $53
+ endm
+
+ enum movement_show_emote
+show_emote: macro
+ db movement_show_emote ; $54
+ endm
+
+ enum movement_step_shake
+step_shake: macro
+ db movement_step_shake ; $55
+ db \1 ; displacement
+ endm
+
+__enum__ = $57
+ enum movement_rock_smash
+rock_smash: macro
+ db movement_rock_smash ; $57
+ db \1
+ endm
+
+ enum movement_return_dig
+return_dig: macro
+ db movement_return_dig ; $58
+ db \1
+ endm
+
+ enum movement_skyfall_top
+skyfall_top: macro
+ db movement_skyfall_top ; $59
+ endm
diff --git a/macros/pic.asm b/macros/pic.asm
new file mode 100644
index 00000000..a01ce7a3
--- /dev/null
+++ b/macros/pic.asm
@@ -0,0 +1,4 @@
+add_pic: MACRO
+ db BANK(\1) - $36
+ dw \1
+ENDM
diff --git a/macros/predef.asm b/macros/predef.asm
new file mode 100644
index 00000000..b99c6e1f
--- /dev/null
+++ b/macros/predef.asm
@@ -0,0 +1,20 @@
+add_predef: MACRO
+\1Predef::
+ dwb \1, BANK(\1)
+ENDM
+
+predef_id: MACRO
+; Some functions load the predef id
+; without immediately calling Predef.
+ ld a, (\1Predef - PredefPointers) / 3
+ENDM
+
+predef: MACRO
+ predef_id \1
+ call Predef
+ENDM
+
+predef_jump: MACRO
+ predef_id \1
+ jp Predef
+ENDM
diff --git a/macros/rst.asm b/macros/rst.asm
new file mode 100644
index 00000000..50259c96
--- /dev/null
+++ b/macros/rst.asm
@@ -0,0 +1,17 @@
+FarCall EQU $08
+Bankswitch EQU $10
+JumpTable EQU $28
+
+farcall: MACRO ; bank, address
+ ld a, BANK(\1)
+ ld hl, \1
+ rst FarCall
+ ENDM
+
+callba EQUS "farcall"
+
+callab: MACRO ; address, bank
+ ld hl, \1
+ ld a, BANK(\1)
+ rst FarCall
+ ENDM
diff --git a/macros/sound.asm b/macros/sound.asm
new file mode 100644
index 00000000..82ef6a31
--- /dev/null
+++ b/macros/sound.asm
@@ -0,0 +1,264 @@
+note: MACRO
+ dn (\1), (\2) - 1
+ ENDM
+
+sound: macro
+ note \1, \2
+ db \3 ; intensity
+ dw \4 ; frequency
+ endm
+
+noise: macro
+ note \1, \2 ; duration
+ db \3 ; intensity
+ db \4 ; frequency
+ endm
+
+musicheader: macro
+ ; number of tracks, which track, address
+ dbw ((\1 - 1) << 6) + (\2 - 1), \3
+ endm
+
+cry_header: macro
+ dw \1, \2, \3
+ endm
+
+ enum_start $d8
+ enum notetype_cmd
+octave: macro
+ db notetype_cmd - (\1)
+ endm
+
+notetype: macro ; d8
+ db notetype_cmd
+ db \1 ; note_length
+ if _NARG >= 2
+ db \2 ; intensity
+ endc
+ endm
+
+ enum forceoctave_cmd
+forceoctave: macro ; d9
+ db forceoctave_cmd
+ db \1 ; octave
+ endm
+
+ enum tempo_cmd
+tempo: macro ; da
+ db tempo_cmd
+ bigdw \1 ; tempo
+ endm
+
+ enum dutycycle_cmd
+dutycycle: macro ; db
+ db dutycycle_cmd
+ db \1 ; duty_cycle
+ endm
+
+ enum intensity_cmd
+intensity: macro ; dc
+ db intensity_cmd
+ db \1 ; intensity
+ endm
+
+ enum soundinput_cmd
+soundinput: macro ; dd
+ db soundinput_cmd
+ db \1 ; input
+ endm
+
+ enum unknownmusic0xde_cmd
+unknownmusic0xde: macro ; de
+ db unknownmusic0xde_cmd
+ db \1 ; unknown
+ endm
+
+ enum togglesfx_cmd
+togglesfx: macro ; df
+ db togglesfx_cmd
+ endm
+
+ enum unknownmusic0xe0_cmd
+unknownmusic0xe0: macro ; e0
+ db unknownmusic0xe0_cmd
+ db \1 ; unknown
+ ; db \2 ; unknown
+ dn \2, \3 ; octave, pitch
+ endm
+
+ enum vibrato_cmd
+vibrato: macro ; e1
+ db vibrato_cmd
+ db \1 ; delay
+ db \2 ; extent
+ endm
+
+ enum unknownmusic0xe2_cmd
+unknownmusic0xe2: macro ; e2
+ db unknownmusic0xe2_cmd
+ db \1 ; unknown
+ endm
+
+ enum togglenoise_cmd
+togglenoise: macro ; e3
+ db togglenoise_cmd
+ db \1 ; id
+ endm
+
+ enum panning_cmd
+panning: macro ; e4
+ db panning_cmd
+ db \1 ; tracks
+ endm
+
+ enum volume_cmd
+volume: macro ; e5
+ db volume_cmd
+ db \1 ; volume
+ endm
+
+ enum tone_cmd
+tone: macro ; e6
+ db tone_cmd
+ bigdw \1 ; tone
+ endm
+
+ enum unknownmusic0xe7_cmd
+unknownmusic0xe7: macro ; e7
+ db unknownmusic0xe7_cmd
+ db \1 ; unknown
+ endm
+
+ enum unknownmusic0xe8_cmd
+unknownmusic0xe8: macro ; e8
+ db unknownmusic0xe8_cmd
+ db \1 ; unknown
+ endm
+
+ enum tempo_relative_cmd
+tempo_relative: macro ; e9
+ db tempo_relative_cmd
+ bigdw \1 ; value
+ endm
+
+ enum restartchannel_cmd
+restartchannel: macro ; ea
+ db restartchannel_cmd
+ dw \1 ; address
+ endm
+
+ enum newsong_cmd
+newsong: macro ; eb
+ db newsong_cmd
+ bigdw \1 ; id
+ endm
+
+ enum sfxpriorityon_cmd
+sfxpriorityon: macro ; ec
+ db sfxpriorityon_cmd
+ endm
+
+ enum sfxpriorityoff_cmd
+sfxpriorityoff: macro ; ed
+ db sfxpriorityoff_cmd
+ endm
+
+ enum unknownmusic0xee_cmd
+unknownmusic0xee: macro ; ee
+ db unknownmusic0xee_cmd
+ dw \1 ; address
+ endm
+
+ enum stereopanning_cmd
+stereopanning: macro ; ef
+ db stereopanning_cmd
+ db \1 ; tracks
+ endm
+
+ enum sfxtogglenoise_cmd
+sfxtogglenoise: macro
+ db sfxtogglenoise_cmd
+ db \1 ; id
+ endm
+
+ enum music0xf1_cmd
+music0xf1: macro
+ db music0xf1_cmd
+ endm
+
+ enum music0xf2_cmd
+music0xf2: macro
+ db music0xf2_cmd
+ endm
+
+ enum music0xf3_cmd
+music0xf3: macro
+ db music0xf3_cmd
+ endm
+
+ enum music0xf4_cmd
+music0xf4: macro
+ db music0xf4_cmd
+ endm
+
+ enum music0xf5_cmd
+music0xf5: macro
+ db music0xf5_cmd
+ endm
+
+ enum music0xf6_cmd
+music0xf6: macro
+ db music0xf6_cmd
+ endm
+
+ enum music0xf7_cmd
+music0xf7: macro
+ db music0xf7_cmd
+ endm
+
+ enum music0xf8_cmd
+music0xf8: macro
+ db music0xf8_cmd
+ endm
+
+ enum unknownmusic0xf9_cmd
+unknownmusic0xf9: macro
+ db unknownmusic0xf9_cmd
+ endm
+
+ enum setcondition_cmd
+setcondition: macro
+ db setcondition_cmd
+ db \1 ; condition
+ endm
+
+ enum jumpif_cmd
+jumpif: macro
+ db jumpif_cmd
+ db \1 ; condition
+ dw \2 ; address
+ endm
+
+ enum jumpchannel_cmd
+jumpchannel: macro
+ db jumpchannel_cmd
+ dw \1 ; address
+ endm
+
+ enum loopchannel_cmd
+loopchannel: macro ; fd
+ db loopchannel_cmd
+ db \1 ; count
+ dw \2 ; address
+ endm
+
+ enum callchannel_cmd
+callchannel: macro ; fe
+ db callchannel_cmd
+ dw \1 ; address
+ endm
+
+ enum endchannel_cmd
+endchannel: macro ; ff
+ db endchannel_cmd
+ endm
diff --git a/macros/text.asm b/macros/text.asm
new file mode 100644
index 00000000..37ce72d9
--- /dev/null
+++ b/macros/text.asm
@@ -0,0 +1,137 @@
+text EQUS "db $00," ; Start writing text.
+next EQUS "db $4e," ; Move a line down.
+line EQUS "db $4f," ; Start writing at the bottom line.
+para EQUS "db $51," ; Start a new paragraph.
+cont EQUS "db $55," ; Scroll to the next line.
+done EQUS "db $57" ; End a text box.
+prompt EQUS "db $58" ; Prompt the player to end a text box (initiating some other event).
+
+; Pokedex text commands are only used with pokered.
+; They are included for compatibility.
+page EQUS "db $50," ; Start a new Pokedex page.
+dex EQUS "db $e8, $50" ; End a Pokedex entry.
+
+; TX_RAM EQU $01
+; TX_FAR EQU $16
+ enum_start 1
+ enum TX_RAM
+text_from_ram: MACRO
+ db TX_RAM
+ dw \1
+ ENDM
+
+ enum TX_BCD
+text_bcd: macro
+ db TX_BCD
+ dw \1
+ db \2
+ ENDM
+
+ enum TX_MOVE
+text_move: macro
+ db TX_MOVE
+ dw \1
+ ENDM
+
+ enum TX_BOX
+text_box: macro
+ db TX_BOX
+ dw \1
+ db \2, \3
+ ENDM
+
+ enum TX_LOW
+text_low: macro
+ db TX_LOW
+ endm
+
+ enum WAIT_BUTTON
+text_waitbutton: macro
+ db WAIT_BUTTON
+ endm
+
+ enum TX_SCROLL
+text_scroll: macro
+ db TX_SCROLL
+ endm
+
+ enum START_ASM
+start_asm: macro
+ db START_ASM
+ endm
+
+ enum TX_NUM
+deciram: macro
+ db TX_NUM
+ dw \1 ; address
+ dn \2, \3 ; bytes, digits
+ endm
+
+ enum TX_EXIT
+interpret_data: macro
+ db TX_EXIT
+ endm
+
+ enum TX_SOUND_0B
+sound_dex_fanfare_50_79: macro
+ db TX_SOUND_0B
+ endm
+
+ enum TX_DOTS
+limited_interpret_data: macro
+ db TX_DOTS
+ db \1
+ endm
+
+ enum TX_LINK_WAIT_BUTTON
+link_wait_button: macro
+ db TX_LINK_WAIT_BUTTON
+ endm
+
+ enum TX_SOUND_0E
+sound_dex_fanfare_20_49: macro
+ db TX_SOUND_0E
+ endm
+
+ enum TX_SOUND_0F
+sound_item: macro
+ db TX_SOUND_0F
+ endm
+
+ enum TX_SOUND_10
+sound_caught_mon: macro
+ db TX_SOUND_10
+ endm
+
+ enum TX_SOUND_11
+sound_dex_fanfare_80_109: macro
+ db TX_SOUND_11
+ endm
+
+ enum TX_SOUND_12
+sound_fanfare: macro
+ db TX_SOUND_12
+ endm
+
+ enum TX_SOUND_13
+sound_slot_machine_start: macro
+ db TX_SOUND_13
+ endm
+
+ enum TX_STRINGBUFFER
+text_buffer: macro
+ db TX_STRINGBUFFER
+ db \1
+ endm
+
+ enum TX_DAY
+current_day: macro
+ db TX_DAY
+ endm
+
+ enum TX_FAR
+text_jump: MACRO
+ db TX_FAR
+ dw \1
+ db BANK(\1)
+ ENDM
diff --git a/macros/trade_anim.asm b/macros/trade_anim.asm
new file mode 100755
index 00000000..eeaf1589
--- /dev/null
+++ b/macros/trade_anim.asm
@@ -0,0 +1,253 @@
+ enum_start
+ enum tradeanim_next_command
+tradeanim_next: macro
+ db tradeanim_next_command ; 00
+endm
+
+ enum tradeanim_show_givemon_data_command
+tradeanim_show_givemon_data: macro
+ db tradeanim_show_givemon_data_command ; 01
+endm
+
+ enum tradeanim_show_getmon_data_command
+tradeanim_show_getmon_data: macro
+ db tradeanim_show_getmon_data_command ; 02
+endm
+
+ enum tradeanim_enter_link_tube_command
+tradeanim_enter_link_tube: macro
+ db tradeanim_enter_link_tube_command ; 03
+endm
+
+__enum__ set $5
+
+ enum tradeanim_exit_link_tube_command
+tradeanim_exit_link_tube: macro
+ db tradeanim_exit_link_tube_command ; 05
+endm
+
+ enum tradeanim_tube_to_ot_command
+tradeanim_tube_to_ot: macro
+ db tradeanim_tube_to_ot_command ; 06
+endm
+
+__enum__ set $e
+
+ enum tradeanim_tube_to_player_command
+tradeanim_tube_to_player: macro
+ db tradeanim_tube_to_player_command ; 0e
+endm
+
+__enum__ set $16
+
+ enum tradeanim_sent_to_ot_text_command
+tradeanim_sent_to_ot_text: macro
+ db tradeanim_sent_to_ot_text_command ; 16
+endm
+
+ enum tradeanim_ot_bids_farewell_command
+tradeanim_ot_bids_farewell: macro
+ db tradeanim_ot_bids_farewell_command ; 17
+endm
+
+ enum tradeanim_take_care_of_text_command
+tradeanim_take_care_of_text: macro
+ db tradeanim_take_care_of_text_command ; 18
+endm
+
+ enum tradeanim_ot_sends_text_1_command
+tradeanim_ot_sends_text_1: macro
+ db tradeanim_ot_sends_text_1_command ; 19
+endm
+
+ enum tradeanim_ot_sends_text_2_command
+tradeanim_ot_sends_text_2: macro
+ db tradeanim_ot_sends_text_2_command ; 1a
+endm
+
+ enum tradeanim_setup_givemon_scroll_command
+tradeanim_setup_givemon_scroll: macro
+ db tradeanim_setup_givemon_scroll_command ; 1b
+endm
+
+ enum tradeanim_do_givemon_scroll_command
+tradeanim_do_givemon_scroll: macro
+ db tradeanim_do_givemon_scroll_command ; 1c
+endm
+
+ enum tradeanim_1d_command
+tradeanim_1d: macro
+ db tradeanim_1d_command ; 1d
+endm
+
+ enum tradeanim_1e_command
+tradeanim_1e: macro
+ db tradeanim_1e_command ; 1e
+endm
+
+ enum tradeanim_scroll_out_right_command
+tradeanim_scroll_out_right: macro
+ db tradeanim_scroll_out_right_command ; 1f
+endm
+
+__enum__ set $21
+
+ enum tradeanim_wait_80_command
+tradeanim_wait_80: macro
+ db tradeanim_wait_80_command ; 21
+endm
+
+ enum tradeanim_wait_40_command
+tradeanim_wait_40: macro
+ db tradeanim_wait_40_command ; 22
+endm
+
+ enum tradeanim_rocking_ball_command
+tradeanim_rocking_ball: macro
+ db tradeanim_rocking_ball_command ; 23
+endm
+
+ enum tradeanim_drop_ball_command
+tradeanim_drop_ball: macro
+ db tradeanim_drop_ball_command ; 24
+endm
+
+ enum tradeanim_wait_anim_command
+tradeanim_wait_anim: macro
+ db tradeanim_wait_anim_command ; 25
+endm
+
+__enum__ set $27
+
+ enum tradeanim_poof_command
+tradeanim_poof: macro
+ db tradeanim_poof_command ; 27
+endm
+
+ enum tradeanim_bulge_through_tube_command
+tradeanim_bulge_through_tube: macro
+ db tradeanim_bulge_through_tube_command ; 28
+endm
+
+ enum tradeanim_give_trademon_sfx_command
+tradeanim_give_trademon_sfx: macro
+ db tradeanim_give_trademon_sfx_command ; 29
+endm
+
+ enum tradeanim_get_trademon_sfx_command
+tradeanim_get_trademon_sfx: macro
+ db tradeanim_get_trademon_sfx_command ; 2a
+endm
+
+ enum tradeanim_end_command
+tradeanim_end: macro
+ db tradeanim_end_command ; 2b
+endm
+
+ enum tradeanim_animate_frontpic_command
+tradeanim_animate_frontpic: macro
+ db tradeanim_animate_frontpic_command ; 2c
+endm
+
+ enum tradeanim_wait_96_command
+tradeanim_wait_96: macro
+ db tradeanim_wait_96_command ; 2d
+endm
+
+ enum tradeanim_wait_80_if_ot_egg_command
+tradeanim_wait_80_if_ot_egg: macro
+ db tradeanim_wait_80_if_ot_egg_command ; 2e
+endm
+
+ enum tradeanim_wait_180_if_ot_egg_command
+tradeanim_wait_180_if_ot_egg: macro
+ db tradeanim_wait_180_if_ot_egg_command ; 2f
+endm
+
+
+; Mobile
+ enum_start 1
+
+ enum mobiletradeanim_showgivemon_command
+mobiletradeanim_showgivemon: macro
+ db mobiletradeanim_showgivemon_command ; 01
+endm
+
+ enum mobiletradeanim_02_command
+mobiletradeanim_02: macro
+ db mobiletradeanim_02_command ; 02
+endm
+
+ enum mobiletradeanim_sendmon_command
+mobiletradeanim_sendmon: macro
+ db mobiletradeanim_sendmon_command ; 03
+endm
+
+__enum__ set $05
+
+ enum mobiletradeanim_05_command
+mobiletradeanim_05: macro
+ db mobiletradeanim_05_command ; 05
+endm
+
+ enum mobiletradeanim_06_command
+mobiletradeanim_06: macro
+ db mobiletradeanim_06_command ; 06
+endm
+
+ enum mobiletradeanim_07_command
+mobiletradeanim_07: macro
+ db mobiletradeanim_07_command ; 07
+endm
+
+ enum mobiletradeanim_receivemon_command
+mobiletradeanim_receivemon: macro
+ db mobiletradeanim_receivemon_command ; 08
+endm
+
+__enum__ set $0b
+
+ enum mobiletradeanim_showgetmon_command
+mobiletradeanim_showgetmon: macro
+ db mobiletradeanim_showgetmon_command ; 0b
+endm
+
+ enum mobiletradeanim_end_command
+mobiletradeanim_end: macro
+ db mobiletradeanim_end_command ; 0c
+endm
+
+ enum mobiletradeanim_showgtsgivemon_command
+mobiletradeanim_showgtsgivemon: macro
+ db mobiletradeanim_showgtsgivemon_command ; 0d
+endm
+
+ enum mobiletradeanim_showgtsgetmon_command
+mobiletradeanim_showgtsgetmon: macro
+ db mobiletradeanim_showgtsgetmon_command ; 0e
+endm
+
+ enum mobiletradeanim_0f_command
+mobiletradeanim_0f: macro
+ db mobiletradeanim_0f_command ; 0f
+endm
+
+ enum mobiletradeanim_10_command
+mobiletradeanim_10: macro
+ db mobiletradeanim_10_command ; 10
+endm
+
+ enum mobiletradeanim_11_command
+mobiletradeanim_11: macro
+ db mobiletradeanim_11_command ; 11
+endm
+
+ enum mobiletradeanim_12_command
+mobiletradeanim_12: macro
+ db mobiletradeanim_12_command ; 12
+endm
+
+ enum mobiletradeanim_showoddegg_command
+mobiletradeanim_showoddegg: macro
+ db mobiletradeanim_showoddegg_command ; 13
+endm
diff --git a/macros/trainer.asm b/macros/trainer.asm
new file mode 100644
index 00000000..2e6c6188
--- /dev/null
+++ b/macros/trainer.asm
@@ -0,0 +1,11 @@
+trainerclass: MACRO
+ enum \1
+const_value = 1
+ENDM
+
+trainer: MACRO
+ ; flag, group, id, seen text, win text, lost text, talk-again text
+ dw \1
+ db \2, \3
+ dw \4, \5, \6, \7
+ENDM
diff --git a/macros/wram.asm b/macros/wram.asm
new file mode 100755
index 00000000..175fc4de
--- /dev/null
+++ b/macros/wram.asm
@@ -0,0 +1,251 @@
+
+flag_array: MACRO
+ ds ((\1) + 7) / 8
+ENDM
+
+box_struct: MACRO
+\1Species:: db
+\1Item:: db
+\1Moves:: ds NUM_MOVES
+\1ID:: dw
+\1Exp:: ds 3
+\1StatExp::
+\1HPExp:: dw
+\1AtkExp:: dw
+\1DefExp:: dw
+\1SpdExp:: dw
+\1SpcExp:: dw
+\1DVs:: ds 2
+\1PP:: ds NUM_MOVES
+\1Happiness:: db
+\1PokerusStatus:: db
+\1CaughtData::
+\1CaughtTime::
+\1CaughtLevel:: db
+\1CaughtGender::
+\1CaughtLocation:: db
+\1Level:: db
+\1End::
+ENDM
+
+party_struct: MACRO
+ box_struct \1
+\1Status:: db
+\1Unused:: db
+\1HP:: dw
+\1MaxHP:: dw
+\1Stats:: ; big endian
+\1Attack:: dw
+\1Defense:: dw
+\1Speed:: dw
+\1SpclAtk:: dw
+\1SpclDef:: dw
+\1StatsEnd::
+ENDM
+
+red_box_struct: MACRO
+\1Species:: db
+\1HP:: dw
+\1BoxLevel:: db
+\1Status:: db
+\1Type::
+\1Type1:: db
+\1Type2:: db
+\1CatchRate:: db
+\1Moves:: ds NUM_MOVES
+\1OTID:: dw
+\1Exp:: ds 3
+\1HPExp:: dw
+\1AttackExp:: dw
+\1DefenseExp:: dw
+\1SpeedExp:: dw
+\1SpecialExp:: dw
+\1DVs:: ds 2
+\1PP:: ds NUM_MOVES
+ENDM
+
+red_party_struct: MACRO
+ red_box_struct \1
+\1Level:: db
+\1Stats::
+\1MaxHP:: dw
+\1Attack:: dw
+\1Defense:: dw
+\1Speed:: dw
+\1Special:: dw
+ENDM
+
+
+battle_struct: MACRO
+\1Species:: db
+\1Item:: db
+\1Moves:: ds NUM_MOVES
+\1MovesEnd::
+\1DVs:: ds 2
+\1PP:: ds NUM_MOVES
+\1Happiness:: db
+\1Level:: db
+\1Status:: ds 2
+\1HP:: dw
+\1MaxHP:: dw
+\1Stats:: ; big endian
+\1Attack:: dw
+\1Defense:: dw
+\1Speed:: dw
+\1SpclAtk:: dw
+\1SpclDef:: dw
+\1StatsEnd::
+\1Type::
+\1Type1:: db
+\1Type2:: db
+\1StructEnd::
+ENDM
+
+box: MACRO
+\1::
+\1Count:: ds 1
+\1Species:: ds MONS_PER_BOX + 1
+\1Mons::
+\1Mon1:: box_struct \1Mon1
+\1Mon2:: ds BOXMON_STRUCT_LENGTH * (MONS_PER_BOX +- 1)
+\1MonOT:: ds NAME_LENGTH * MONS_PER_BOX
+\1MonNicknames:: ds PKMN_NAME_LENGTH * MONS_PER_BOX
+\1MonNicknamesEnd::
+\1End:: ds 2 ; padding
+ENDM
+
+
+channel_struct: MACRO
+; Addreses are Channel1 (c101).
+\1MusicID:: dw
+\1MusicBank:: db
+\1Flags:: db ; 0:on/off 1:subroutine 3:sfx 4:noise 5:rest
+\1Flags2:: db ; 0:vibrato on/off 2:duty 4:cry pitch
+\1Flags3:: db ; 0:vibrato up/down
+\1MusicAddress:: dw
+\1LastMusicAddress:: dw
+ dw
+\1NoteFlags:: db ; 5:rest
+\1Condition:: db ; conditional jumps
+\1DutyCycle:: db ; bits 6-7 (0:12.5% 1:25% 2:50% 3:75%)
+\1Intensity:: db ; hi:pressure lo:velocity
+\1Frequency:: ; 11 bits
+\1FrequencyLo:: db
+\1FrequencyHi:: db
+\1Pitch:: db ; 0:rest 1-c:note
+\1Octave:: db ; 7-0 (0 is highest)
+\1StartingOctave:: db ; raises existing octaves (to repeat phrases)
+\1NoteDuration:: db ; frames remaining for the current note
+\1Field0x16:: ds 1 ; c117
+ ds 1 ; c118
+\1LoopCount:: db
+\1Tempo:: dw
+\1Tracks:: db ; hi:left lo:right
+\1Field0x1c:: ds 1 ; c11d
+\1VibratoDelayCount:: db ; initialized by \1VibratoDelay
+\1VibratoDelay:: db ; number of frames a note plays until vibrato starts
+\1VibratoExtent:: db
+\1VibratoRate:: db ; hi:frames for each alt lo:frames to the next alt
+\1Field0x21:: ds 1 ; c122
+\1Field0x22:: ds 1 ; c123
+\1Field0x23:: ds 1 ; c124
+\1Field0x24:: ds 1 ; c125
+\1Field0x25:: ds 1 ; c126
+ ds 1 ; c127
+\1CryPitch:: dw
+\1Field0x29:: ds 1
+\1Field0x2a:: ds 2
+\1Field0x2c:: ds 1
+\1NoteLength:: db ; frames per 16th note
+\1Field0x2e:: ds 1 ; c12f
+\1Field0x2f:: ds 1 ; c130
+\1Field0x30:: ds 1 ; c131
+ ds 1 ; c132
+ENDM
+
+battle_tower_struct: MACRO
+\1Name:: ds NAME_LENGTH +- 1
+\1TrainerClass:: ds 1
+\1Pkmn1:: party_struct \1Pkmn1
+\1Pkmn1Name:: ds PKMN_NAME_LENGTH
+\1Pkmn1NameEnd::
+\1Pkmn2:: party_struct \1Pkmn2
+\1Pkmn2Name:: ds PKMN_NAME_LENGTH
+\1Pkmn2NameEnd::
+\1Pkmn3:: party_struct \1Pkmn3
+\1Pkmn3Name:: ds PKMN_NAME_LENGTH
+\1Pkmn3NameEnd::
+\1TrainerData:: ds BATTLETOWER_TRAINERDATALENGTH
+\1TrainerEnd::
+endm
+
+mailmsg: MACRO
+\1Message:: ds MAIL_MSG_LENGTH
+\1MessageEnd:: ds 1
+\1Author:: ds PLAYER_NAME_LENGTH
+\1AuthorNationality:: ds 2
+\1AuthorID:: ds 2
+\1Species:: ds 1
+\1Type:: ds 1
+\1End::
+endm
+
+hof_mon: MACRO
+\1Species:: ds 1
+\1ID:: ds 2
+\1DVs:: ds 2
+\1Level:: ds 1
+\1Nickname:: ds PKMN_NAME_LENGTH +- 1
+\1End::
+endm
+
+hall_of_fame: MACRO
+\1::
+\1WinCount:: ds 1
+\1Mon1:: hof_mon \1Mon1
+\1Mon2:: hof_mon \1Mon2
+\1Mon3:: hof_mon \1Mon3
+\1Mon4:: hof_mon \1Mon4
+\1Mon5:: hof_mon \1Mon5
+\1Mon6:: hof_mon \1Mon6
+\1End:: ds 1
+ENDM
+
+trademon: MACRO
+\1Species:: ds 1 ; wc6d0 | wc702
+\1SpeciesName:: ds PKMN_NAME_LENGTH ; wc6d1 | wc703
+\1Nickname:: ds PKMN_NAME_LENGTH ; wc6dc | wc70e
+\1SenderName:: ds NAME_LENGTH ; wc6e7 | wc719
+\1OTName:: ds NAME_LENGTH ; wc6f2 | wc724
+\1DVs:: ds 2 ; wc6fd | wc72f
+\1ID:: ds 2 ; wc6ff | wc731
+\1CaughtData:: ds 1 ; wc701 | wc733
+\1End::
+ENDM
+
+move_struct: MACRO
+\1Animation:: ds 1
+\1Effect:: ds 1
+\1Power:: ds 1
+\1Type:: ds 1
+\1Accuracy:: ds 1
+\1PP:: ds 1
+\1EffectChance:: ds 1
+endm
+
+slot_reel: MACRO
+\1ReelAction:: db
+\1TilemapAddr:: dw
+\1Position:: db
+\1SpinDistance:: db
+\1SpinRate:: db
+\1OAMAddr:: dw
+\1XCoord:: db
+\1Slot09:: ds 1
+\1Slot0a:: ds 1
+\1Slot0b:: ds 1
+\1Slot0c:: ds 1
+\1Slot0d:: ds 1
+\1Slot0e:: ds 1
+\1Slot0f:: ds 1
+endm \ No newline at end of file