summaryrefslogtreecommitdiff
path: root/macros/coords.asm
diff options
context:
space:
mode:
Diffstat (limited to 'macros/coords.asm')
-rw-r--r--macros/coords.asm96
1 files changed, 55 insertions, 41 deletions
diff --git a/macros/coords.asm b/macros/coords.asm
index 302260d7..94808ba5 100644
--- a/macros/coords.asm
+++ b/macros/coords.asm
@@ -1,65 +1,79 @@
-validateCoords: MACRO
- IF \1 >= SCREEN_WIDTH
- fail "x coord out of range"
- ENDC
- IF \2 >= SCREEN_HEIGHT
- fail "y coord out of range"
+validate_coords: MACRO
+ IF _NARG >= 4
+ IF \1 >= \3
+ fail "x coord out of range"
+ ENDC
+ IF \2 >= \4
+ fail "y coord out of range"
+ ENDC
+ ELSE
+ validate_coords \1, \2, SCREEN_WIDTH, SCREEN_HEIGHT
ENDC
ENDM
-;\1 = r
-;\2 = X
-;\3 = Y
-;\4 = which tilemap (optional)
+hlcoord EQUS "coord hl,"
+bccoord EQUS "coord bc,"
+decoord EQUS "coord de,"
+
coord: MACRO
- validateCoords \2, \3
+; register, x, y[, origin]
+ validate_coords \2, \3
IF _NARG >= 4
- ld \1, \4 + SCREEN_WIDTH * \3 + \2
+ ld \1, (\3) * SCREEN_WIDTH + (\2) + \4
ELSE
- ld \1, wTileMap + SCREEN_WIDTH * \3 + \2
+ ld \1, (\3) * SCREEN_WIDTH + (\2) + wTileMap
ENDC
ENDM
-;\1 = X
-;\2 = Y
-;\3 = which tilemap (optional)
-aCoord: MACRO
- validateCoords \1, \2
- IF _NARG >= 3
- ld a, [\3 + SCREEN_WIDTH * \2 + \1]
+hlbgcoord EQUS "bgcoord hl,"
+bcbgcoord EQUS "bgcoord bc,"
+debgcoord EQUS "bgcoord de,"
+
+bgcoord: MACRO
+; register, x, y[, origin]
+ validate_coords \2, \3, BG_MAP_WIDTH, BG_MAP_HEIGHT
+ IF _NARG >= 4
+ ld \1, (\3) * BG_MAP_WIDTH + (\2) + \4
ELSE
- ld a, [wTileMap + SCREEN_WIDTH * \2 + \1]
+ ld \1, (\3) * BG_MAP_WIDTH + (\2) + vBGMap0
ENDC
ENDM
-;\1 = X
-;\2 = Y
-;\3 = which tilemap (optional)
-Coorda: MACRO
- validateCoords \1, \2
+hlowcoord EQUS "owcoord hl,"
+bcowcoord EQUS "owcoord bc,"
+deowcoord EQUS "owcoord de,"
+
+owcoord: MACRO
+; register, x, y, map width
+ ld \1, wOverworldMap + ((\2) + 3) + (((\3) + 3) * ((\4) + (3 * 2)))
+ENDM
+
+dwcoord: MACRO
+; x, y
+ validate_coords \1, \2
IF _NARG >= 3
- ld [\3 + SCREEN_WIDTH * \2 + \1], a
+ dw (\2) * SCREEN_WIDTH + (\1) + \3
ELSE
- ld [wTileMap + SCREEN_WIDTH * \2 + \1], a
+ dw (\2) * SCREEN_WIDTH + (\1) + wTileMap
ENDC
ENDM
-;\1 = X
-;\2 = Y
-;\3 = which tilemap (optional)
-dwCoord: MACRO
- validateCoords \1, \2
+ldcoord_a: MACRO
+; x, y[, origin]
+ validate_coords \1, \2
IF _NARG >= 3
- dw \3 + SCREEN_WIDTH * \2 + \1
+ ld [(\2) * SCREEN_WIDTH + (\1) + \3], a
ELSE
- dw wTileMap + SCREEN_WIDTH * \2 + \1
+ ld [(\2) * SCREEN_WIDTH + (\1) + wTileMap], a
ENDC
ENDM
-;\1 = r
-;\2 = X
-;\3 = Y
-;\4 = map width
-overworldMapCoord: MACRO
- ld \1, wOverworldMap + ((\2) + 3) + (((\3) + 3) * ((\4) + (3 * 2)))
+lda_coord: MACRO
+; x, y[, origin]
+ validate_coords \1, \2
+ IF _NARG >= 3
+ ld a, [(\2) * SCREEN_WIDTH + (\1) + \3]
+ ELSE
+ ld a, [(\2) * SCREEN_WIDTH + (\1) + wTileMap]
+ ENDC
ENDM