mirror of
https://github.com/pret/pokered.git
synced 2026-03-22 01:54:53 -05:00
96 lines
1.5 KiB
NASM
96 lines
1.5 KiB
NASM
; Value macros
|
|
|
|
DEF percent EQUS "* $ff / 100"
|
|
|
|
MACRO? bcd2
|
|
dn ((\1) / 1000) % 10, ((\1) / 100) % 10
|
|
dn ((\1) / 10) % 10, (\1) % 10
|
|
ENDM
|
|
|
|
MACRO? bcd3
|
|
dn ((\1) / 100000) % 10, ((\1) / 10000) % 10
|
|
dn ((\1) / 1000) % 10, ((\1) / 100) % 10
|
|
dn ((\1) / 10) % 10, (\1) % 10
|
|
ENDM
|
|
|
|
; used in data/pokemon/base_stats/*.asm
|
|
MACRO? tmhm
|
|
; initialize bytes to 0
|
|
FOR n, (NUM_TM_HM + 7) / 8
|
|
DEF _tm{d:n} = 0
|
|
ENDR
|
|
; set bits of bytes
|
|
REPT _NARG
|
|
ASSERT FATAL, STRFIND("\1", " ") == -1, "Invalid move: \1"
|
|
IF DEF(\1_TMNUM)
|
|
DEF n = (\1_TMNUM - 1) / 8
|
|
DEF i = (\1_TMNUM - 1) % 8
|
|
DEF _tm{d:n} |= 1 << i
|
|
ELSE
|
|
FAIL "\1 is not a TM or HM move"
|
|
ENDC
|
|
SHIFT
|
|
ENDR
|
|
; output bytes
|
|
FOR n, (NUM_TM_HM + 7) / 8
|
|
db _tm{d:n}
|
|
ENDR
|
|
ENDM
|
|
|
|
|
|
; Constant data (db, dw, dl) macros
|
|
|
|
MACRO? dbw
|
|
db \1
|
|
dw \2
|
|
ENDM
|
|
|
|
MACRO? dwb
|
|
dw \1
|
|
db \2
|
|
ENDM
|
|
|
|
MACRO? dn ; nybbles
|
|
REPT _NARG / 2
|
|
db ((\1) << 4) | (\2)
|
|
SHIFT 2
|
|
ENDR
|
|
ENDM
|
|
|
|
MACRO? dc ; "crumbs"
|
|
REPT _NARG / 4
|
|
db ((\1) << 6) | ((\2) << 4) | ((\3) << 2) | (\4)
|
|
SHIFT 4
|
|
ENDR
|
|
ENDM
|
|
|
|
MACRO? bigdw ; big-endian word
|
|
db HIGH(\1), LOW(\1)
|
|
ENDM
|
|
|
|
MACRO? dba ; dbw bank, address
|
|
REPT _NARG
|
|
dbw BANK(\1), \1
|
|
SHIFT
|
|
ENDR
|
|
ENDM
|
|
|
|
MACRO? dab ; dwb address, bank
|
|
REPT _NARG
|
|
dwb \1, BANK(\1)
|
|
SHIFT
|
|
ENDR
|
|
ENDM
|
|
|
|
MACRO? dname
|
|
IF _NARG == 2
|
|
DEF n = \2
|
|
ELSE
|
|
DEF n = NAME_LENGTH - 1
|
|
ENDC
|
|
ASSERT STRFIND(\1, "@") == -1, "String terminator \"@\" in name: \1"
|
|
ASSERT CHARLEN(\1) <= n, "Name longer than {d:n} characters: \1"
|
|
db \1
|
|
ds n - CHARLEN(\1), '@'
|
|
ENDM
|