Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pret
GitHub Repository: pret/pokered
Path: blob/master/macros/data.asm
1270 views
1
; Value macros
2
3
DEF percent EQUS "* $ff / 100"
4
5
MACRO bcd2
6
dn ((\1) / 1000) % 10, ((\1) / 100) % 10
7
dn ((\1) / 10) % 10, (\1) % 10
8
ENDM
9
10
MACRO bcd3
11
dn ((\1) / 100000) % 10, ((\1) / 10000) % 10
12
dn ((\1) / 1000) % 10, ((\1) / 100) % 10
13
dn ((\1) / 10) % 10, (\1) % 10
14
ENDM
15
16
; used in data/pokemon/base_stats/*.asm
17
MACRO tmhm
18
; initialize bytes to 0
19
FOR n, (NUM_TM_HM + 7) / 8
20
DEF _tm{d:n} = 0
21
ENDR
22
; set bits of bytes
23
REPT _NARG
24
ASSERT FATAL, STRFIND("\1", " ") == -1, "Invalid move: \1"
25
IF DEF(\1_TMNUM)
26
DEF n = (\1_TMNUM - 1) / 8
27
DEF i = (\1_TMNUM - 1) % 8
28
DEF _tm{d:n} |= 1 << i
29
ELSE
30
FAIL "\1 is not a TM or HM move"
31
ENDC
32
SHIFT
33
ENDR
34
; output bytes
35
FOR n, (NUM_TM_HM + 7) / 8
36
db _tm{d:n}
37
ENDR
38
ENDM
39
40
41
; Constant data (db, dw, dl) macros
42
43
MACRO dbw
44
db \1
45
dw \2
46
ENDM
47
48
MACRO dwb
49
dw \1
50
db \2
51
ENDM
52
53
MACRO dn ; nybbles
54
REPT _NARG / 2
55
db ((\1) << 4) | (\2)
56
SHIFT 2
57
ENDR
58
ENDM
59
60
MACRO dc ; "crumbs"
61
REPT _NARG / 4
62
db ((\1) << 6) | ((\2) << 4) | ((\3) << 2) | (\4)
63
SHIFT 4
64
ENDR
65
ENDM
66
67
MACRO bigdw ; big-endian word
68
db HIGH(\1), LOW(\1)
69
ENDM
70
71
MACRO dba ; dbw bank, address
72
REPT _NARG
73
dbw BANK(\1), \1
74
SHIFT
75
ENDR
76
ENDM
77
78
MACRO dab ; dwb address, bank
79
REPT _NARG
80
dwb \1, BANK(\1)
81
SHIFT
82
ENDR
83
ENDM
84
85
MACRO dname
86
IF _NARG == 2
87
DEF n = \2
88
ELSE
89
DEF n = NAME_LENGTH - 1
90
ENDC
91
ASSERT STRFIND(\1, "@") == -1, "String terminator \"@\" in name: \1"
92
ASSERT CHARLEN(\1) <= n, "Name longer than {d:n} characters: \1"
93
db \1
94
ds n - CHARLEN(\1), "@"
95
ENDM
96
97