pokecrystal/macros.asm

273 lines
3.5 KiB
NASM
Raw Normal View History

INCLUDE "macros/enum.asm"
INCLUDE "macros/basestats.asm"
2015-01-20 08:01:23 +00:00
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"
2015-01-20 22:26:16 +00:00
INCLUDE "macros/predef.asm"
INCLUDE "macros/rst.asm"
INCLUDE "macros/mobile.asm"
INCLUDE "macros/trainer.asm"
2015-11-23 05:21:21 +00:00
INCLUDE "macros/trade_anim.asm"
INCLUDE "macros/pals.asm"
2015-01-20 08:01:23 +00:00
RGB: MACRO
dw ((\3) << 10) + ((\2) << 5) + (\1)
ENDM
2014-02-02 21:13:23 +00:00
percent EQUS "* $ff / 100"
dwb: MACRO
dw \1
db \2
ENDM
dbw: MACRO
db \1
dw \2
ENDM
2014-03-03 10:28:53 +00:00
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
2015-10-17 21:18:52 +00:00
dba: MACRO ; dbw bank, address
rept _NARG
2015-10-17 21:18:52 +00:00
dbw BANK(\1), \1
shift
endr
2015-10-17 21:18:52 +00:00
ENDM
dab: MACRO ; dwb address, bank
rept _NARG
2015-10-17 21:18:52 +00:00
dwb \1, BANK(\1)
shift
endr
2015-10-17 21:18:52 +00:00
ENDM
lb: MACRO ; r, hi, lo
2015-12-19 01:07:09 +00:00
ld \1, (\2 & $ff) << 8 + (\3 & $ff)
ENDM
2015-10-24 14:34:19 +00:00
ln: MACRO ; r, hi, lo
2015-12-19 01:07:09 +00:00
ld \1, (\2 & $f) << 4 + (\3 & $f)
2015-10-24 14:34:19 +00:00
ENDM
2015-01-20 22:26:16 +00:00
bccoord equs "coord bc,"
decoord equs "coord de,"
hlcoord equs "coord hl,"
coord: MACRO
2015-10-24 14:34:19 +00:00
; 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
2015-10-04 18:14:51 +00:00
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
2013-11-27 10:39:52 +00:00
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
2015-10-12 16:33:24 +00:00
2015-11-03 17:36:33 +00:00
tiles EQUS "* $10"
tile EQUS "+ $10 *"
2015-11-03 20:05:19 +00:00
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
2015-11-12 16:10:19 +00:00
palettes EQUS "* 8"
2015-11-18 18:01:55 +00:00
ldpixel: MACRO
2015-12-11 13:17:38 +00:00
if _NARG >= 5
2015-11-18 18:01:55 +00:00
lb \1, \2 * 8 + \4, \3 * 8 + \5
else
lb \1, \2 * 8, \3 * 8
endc
endm
2015-11-18 18:01:55 +00:00
depixel EQUS "ldpixel de,"
2015-12-11 21:59:40 +00:00
bcpixel EQUS "ldpixel bc,"
2015-11-20 16:47:52 +00:00
dbpixel: MACRO
2015-12-11 13:17:38 +00:00
if _NARG >= 4
db \1 * 8 + \3, \2 * 8 + \4
else
db \1 * 8, \2 * 8
endc
endm
2015-11-20 16:47:52 +00:00
bgcoord: MACRO
2015-12-11 13:17:38 +00:00
IF _NARG >= 4
2015-11-20 16:47:52 +00:00
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"
2015-11-27 02:05:32 +00:00
palred EQUS "$0400 *"
palgreen EQUS "$0020 *"
palblue EQUS "$0001 *"
dsprite: MACRO
2015-12-11 03:26:31 +00:00
; conditional segment is there because not every instance of
; this macro is directly OAM
2015-12-11 13:17:38 +00:00
if _NARG >= 7 ; y tile, y pxl, x tile, x pxl, vtile offset, flags, palette
2015-12-11 03:26:31 +00:00
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
2015-12-11 03:26:31 +00:00
endc
endm
jumptable: MACRO
2015-12-27 02:59:03 +00:00
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