Get_Position_After_Move: ; entity (whatever alignement) in HL, direction to test in A, X Result in C, Y result in B PUSH HL PUSH AF LD A, L AND $f8 LD L, A INC HL LD A, (HL+) LD C, A LD A, (HL+) LD B, A POP AF BIT 3, A JR Z, =Get_Position_After_Move.direction_end PUSH BC DEC A LD B, A SLA A AND $02 DEC A BIT 1, B JR NZ, =Get_Position_After_Move.vertical Get_Position_After_Move.horizontal: POP BC ADD C LD C, A JR =Get_Position_After_Move.direction_end Get_Position_After_Move.vertical: POP BC ADD B LD B, A Get_Position_After_Move.direction_end: POP HL RET .MACRODEF ADD_A_TO_DIRECTION_BC ; Direction in D, XY in BC (muted), offset in A PUSH AF LD A, D AND $07 CP $enum_direction_down JR Z, =$down CP $enum_direction_right JR Z, =$right CP $enum_direction_up JR Z, =$up $left: POP AF XOR $ff ADD B LD B, A JR =$end $right: POP AF INC A ADD B LD B, A JR =$end $up: POP AF XOR $ff ADD C LD C, A JR =$end $down: POP AF INC A ADD C LD C, A $end: .END