summaryrefslogtreecommitdiff
path: root/macros.asm
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2016-01-29 18:36:31 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2016-01-29 18:36:31 -0500
commit2bf93c5905319e9181f87b3f83cd3bce7b9feeca (patch)
tree3ebf17c8879e5d6243d81aac8f1c36eb226fac26 /macros.asm
parented3f9395f6d45f6554ed9d9c49c41ea86a8e2447 (diff)
Import stuff from pokecrystal; diff gold and silver
Diffstat (limited to 'macros.asm')
-rw-r--r--macros.asm276
1 files changed, 276 insertions, 0 deletions
diff --git a/macros.asm b/macros.asm
new file mode 100644
index 00000000..bccc428a
--- /dev/null
+++ b/macros.asm
@@ -0,0 +1,276 @@
+INCLUDE "macros/enum.asm"
+INCLUDE "macros/basestats.asm"
+
+INCLUDE "macros/event.asm"
+INCLUDE "macros/sound.asm"
+INCLUDE "macros/text.asm"
+INCLUDE "macros/charmap.asm"
+INCLUDE "macros/move_effect.asm"
+INCLUDE "macros/move_anim.asm"
+INCLUDE "macros/movement.asm"
+INCLUDE "macros/map.asm"
+INCLUDE "macros/pic.asm"
+INCLUDE "macros/predef.asm"
+INCLUDE "macros/rst.asm"
+INCLUDE "macros/mobile.asm"
+INCLUDE "macros/trainer.asm"
+INCLUDE "macros/trade_anim.asm"
+
+RGB: MACRO
+ dw ((\3) << 10) + ((\2) << 5) + (\1)
+ ENDM
+
+
+percent EQUS "* $ff / 100"
+
+
+dwb: MACRO
+ dw \1
+ db \2
+ ENDM
+
+dbw: MACRO
+ db \1
+ dw \2
+ ENDM
+
+dbbw: MACRO
+ db \1, \2
+ dw \3
+ ENDM
+
+dbww: MACRO
+ db \1
+ dw \2, \3
+ ENDM
+
+dbwww: MACRO
+ db \1
+ dw \2, \3, \4
+ ENDM
+
+dn: MACRO
+ rept _NARG / 2
+ db (\1) << 4 + (\2)
+ shift
+ shift
+ endr
+ ENDM
+
+dx: MACRO
+x = 8 * ((\1) - 1)
+ rept \1
+ db ((\2) >> x) & $ff
+x = x + -8
+ endr
+ ENDM
+
+dt: MACRO ; three-byte (big-endian)
+ dx 3, \1
+ ENDM
+
+dd: MACRO ; four-byte (big-endian)
+ dx 4, \1
+ ENDM
+
+bigdw: MACRO ; big-endian word
+ dx 2, \1
+ ENDM
+
+dba: MACRO ; dbw bank, address
+ rept _NARG
+ dbw BANK(\1), \1
+ shift
+ endr
+ ENDM
+
+dab: MACRO ; dwb address, bank
+ rept _NARG
+ dwb \1, BANK(\1)
+ shift
+ endr
+ ENDM
+
+lb: MACRO ; r, hi, lo
+ ld \1, (\2 & $ff) << 8 + (\3 & $ff)
+ ENDM
+
+ln: MACRO ; r, hi, lo
+ ld \1, (\2 & $f) << 4 + (\3 & $f)
+ ENDM
+
+bccoord equs "coord bc,"
+decoord equs "coord de,"
+hlcoord equs "coord hl,"
+
+coord: MACRO
+; register, x, y[, origin]
+ if _NARG < 4
+ ld \1, TileMap + SCREEN_WIDTH * (\3) + (\2)
+ else
+ ld \1, \4 + SCREEN_WIDTH * (\3) + (\2)
+ endc
+ ENDM
+
+dwcoord: MACRO
+ rept _NARG / 2
+ dw TileMap + SCREEN_WIDTH * (\2) + (\1)
+ shift
+ shift
+ endr
+ ENDM
+
+ldcoord_a: MACRO
+ if _NARG < 3
+ ld [TileMap + SCREEN_WIDTH * (\2) + (\1)], a
+ else
+ ld [\3 + SCREEN_WIDTH * (\2) + (\1)], a
+ endc
+ ENDM
+
+lda_coord: MACRO
+ if _NARG < 3
+ ld a, [TileMap + SCREEN_WIDTH * (\2) + (\1)]
+ else
+ ld a, [\3 + SCREEN_WIDTH * (\2) + (\1)]
+ endc
+ ENDM
+
+; pic animations
+frame: MACRO
+ db \1
+ db \2
+ ENDM
+setrepeat: MACRO
+ db $fe
+ db \1
+ ENDM
+dorepeat: MACRO
+ db $fd
+ db \1
+ ENDM
+endanim: MACRO
+ db $ff
+ ENDM
+
+
+
+sine_wave: MACRO
+; \1: amplitude
+
+x = 0
+ rept $20
+ ; Round up.
+ dw (sin(x) + (sin(x) & $ff)) >> 8
+x = x + (\1) * $40000
+ endr
+ENDM
+
+
+bcd: MACRO
+ rept _NARG
+ dn ((\1) % 100) / 10, (\1) % 10
+ shift
+ endr
+ENDM
+
+tiles EQUS "* $10"
+tile EQUS "+ $10 *"
+
+partymon: MACRO
+ db \1
+ db \2
+ db \3, \4, \5, \6
+ dw \7
+ dt \8
+rept 8
+ shift
+endr
+rept 5
+ bigdw \1
+ shift
+endr
+ db \1, \2
+ db \3, \4, \5, \6
+rept 6
+ shift
+endr
+ db \1
+ db \2, \3, \4
+ db \5
+ db \6, \7
+rept 7
+ shift
+endr
+rept 7
+ bigdw \1
+ shift
+endr
+ db \1
+ENDM
+
+palettes EQUS "* 8"
+
+ldpixel: MACRO
+if _NARG >= 5
+ lb \1, \2 * 8 + \4, \3 * 8 + \5
+else
+ lb \1, \2 * 8, \3 * 8
+endc
+endm
+
+depixel EQUS "ldpixel de,"
+bcpixel EQUS "ldpixel bc,"
+
+dbpixel: MACRO
+if _NARG >= 4
+ db \1 * 8 + \3, \2 * 8 + \4
+else
+ db \1 * 8, \2 * 8
+endc
+endm
+
+bgcoord: MACRO
+IF _NARG >= 4
+ ld \1, \3 * $20 + \2 + \4
+ELSE
+ ld \1, \3 * $20 + \2 + VBGMap0
+ENDC
+ENDM
+
+hlbgcoord EQUS "bgcoord hl,"
+debgcoord EQUS "bgcoord de,"
+bcbgcoord EQUS "bgcoord bc,"
+bgrows EQUS "* $20"
+
+palred EQUS "$0400 *"
+palgreen EQUS "$0020 *"
+palblue EQUS "$0001 *"
+
+dsprite: MACRO
+; conditional segment is there because not every instance of
+; this macro is directly OAM
+if _NARG >= 7 ; y tile, y pxl, x tile, x pxl, vtile offset, flags, palette
+ db (\1 * 8) % $100 + \2, (\3 * 8) % $100 + \4, \5, (\6 << 3) + (\7 & 7)
+else
+ db (\1 * 8) % $100 + \2, (\3 * 8) % $100 + \4, \5, \6
+endc
+endm
+
+jumptable: MACRO
+ ld a, [\2]
+ ld e, a
+ ld d, 0
+ ld hl, \1
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+endm
+
+dr: MACRO ; Needed until fully disassembled
+INCBIN "baserom.gbc", \1, \2 - \1
+ENDM
+