.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 INC A ADD B LD B, A JR =$end $right: POP AF ADD B LD B, A JR =$end $up: POP AF XOR $ff INC A ADD C LD C, A JR =$end $down: POP AF ADD C LD C, A $end: .END Get_Position_After_Move: ; entity (whatever alignement) in HL, direction to test in A, XY result in BC, E being how much tile entity will move PUSH HL PUSH DE LD D, A LD A, L AND $f0 LD L, A INC HL LD A, (HL+) LD B, A LD A, (HL+) LD C, A INC HL INC HL INC HL INC HL LD E, (HL) BIT 0, E LD A, $01 JR Z, =Get_Position_After_Move.Normal_Speed LD A, $02 Get_Position_After_Move.Normal_Speed: BIT 3, D JR Z, =Get_Position_After_Move.Skip_Move .ADD_A_TO_DIRECTION_BC Get_Position_After_Move.Skip_Move: POP DE POP HL RET