pokecrystal-board/macros.asm
yenatch 34d7cbb8b7 Text macros.
UnknownText_0x1aa0dc: ; 0x1aa0dc
	db $0, "Nihihi! This GYM", $4f
	db "is great! Only", $51
	db "girls are allowed", $4f
	db "here!", $57
; 0x1aa115

is now

UnknownText_0x1aa0dc: ; 0x1aa0dc
	text "Nihihi! This GYM"
	line "is great! Only"
	para "girls are allowed"
	line "here!"
	done
; 0x1aa115
2014-03-05 22:49:09 -05:00

194 lines
2.4 KiB
NASM

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.
; macros require rst vectors to be defined
FarCall EQU $08
Bankswitch EQU $10
JumpTable EQU $28
NONE EQU 0
dwb: MACRO
dw \1
db \2
ENDM
dbw: MACRO
db \1
dw \2
ENDM
dbbw: MACRO
db \1, \2
dw \3
ENDM
dn: MACRO
db \1 << 4 + \2
ENDM
dt: MACRO ; three-byte (big-endian)
db (\1 >> 16) & $ff
db (\1 >> 8) & $ff
db \1 & $ff
ENDM
bigdw: MACRO ; big-endian word
dw ((\1)/$100) + (((\1)&$ff)*$100)
ENDM
callab: MACRO ; address, bank
ld hl, \1
ld a, BANK(\1)
rst FarCall
ENDM
callba: MACRO ; bank, address
ld a, BANK(\1)
ld hl, \1
rst FarCall
ENDM
lb: MACRO ; r, hi, lo
ld \1, \2 << 8 + \3
ENDM
; Constant enumeration
const_def: MACRO
const_value SET 0
ENDM
const: MACRO
\1 EQU const_value
const_value SET const_value + 1
ENDM
TX_RAM: MACRO
db 1
dw \1
ENDM
TX_FAR: MACRO
db $16
dw \1
db BANK(\1)
ENDM
RGB: MACRO
dw ((\3 << 10) | (\2 << 5) | (\1))
ENDM
note: MACRO
db \1 << 4 + (\2 - 1)
ENDM
; pitch
__ EQU 0
C_ EQU 1
C# EQU 2
D_ EQU 3
D# EQU 4
E_ EQU 5
F_ EQU 6
F# EQU 7
G_ EQU 8
G# EQU 9
A_ EQU 10
A# EQU 11
B_ EQU 12
; It's better to use *coord than FuncCoord.
FuncCoord: MACRO
Coord = $c4a0 + 20 * \2 + \1
ENDM
bccoord: MACRO
FuncCoord \1, \2
ld bc, Coord
ENDM
decoord: MACRO
FuncCoord \1, \2
ld de, Coord
ENDM
hlcoord: MACRO
FuncCoord \1, \2
ld hl, Coord
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
; maps
map: MACRO
; This is a really silly hack to get around an rgbds bug.
; Ideally:
; db GROUP_\1, MAP_\1
\1\@ EQUS "GROUP_\1"
\1\@2 EQUS "MAP_\1"
db \1\@, \1\@2
ENDM
roam_map: MACRO
; A map and an arbitrary number of some more maps.
map \1
db \2
IF \2 > 0
map \3
ENDC
IF \2 > 1
map \4
ENDC
IF \2 > 2
map \5
ENDC
IF \2 > 3
map \6
ENDC
db 0
ENDM