.de act_flags, 1
.de act_pos_y, 1 ; y/x position
+.de act_pos_y_hi, 1 ; high byte of 16 bit y position
.de act_pos_x, 1
; custom parameter
; $5: armor
#macro actdef
.db $1, $2, $3
- ; placeholder for y and x
+ ; placeholder for y, row and x
; since those are set at runtime
- .db 0, 0
+ .db 0, 0, 0
.db $4, $5
#endmacro
; $5: dat2
#macro modef
.db $1, $2, $3, $4, $5
+#endmacro
+
+ ; adjusts an input position
+ ; to draw correctly based on the current map row
+ ; inputs:
+ ; a: hi y position
+ ; b: unadjusted lo y position
+ ; returns:
+ ; a: real y position (or 0 if out of bounds)
+ ; uses: a, b, c
+#macro adjust_y_row
+.beginscope
+ ld c, a
+ ld a, [map_curr_row]
+ div16 a ; 16 rows per screen page -> row count to hi y position
+ cp a, c
+ jr c, @zero REL
+
+ ld a, b
+ jr @done REL
+@zero:
+ xor a, a
+@done:
+.endscope
#endmacro