Move_Bunny: Start_action_or_movement: LD A, $mem_map_loading_flags BIT 3, A JR NZ, =Start_action_or_movement.end Start_action_or_movement.test_movement: LD A, $mem_button_direction CP $00 JP Z, =Start_action_or_movement.test_action SET 3, A LD D, A LD A, $mem_map_loading_flags SET 3, A LD $mem_map_loading_flags, A PUSH BC LD A, D CALL =Get_Position_After_Move LD A, C CALL =Is_Collisionable CALL =Carve_Entity_Collision_Map POP BC CP $00 JR Z, =Start_action_or_movement.not_collision RES 3, D LD A, $mem_map_loading_flags RES 3, A LD $mem_map_loading_flags, A Start_action_or_movement.not_collision: LD A, D LD $mem_bunny_direction, A JR =Start_action_or_movement.end Start_action_or_movement.test_action: LD A, $mem_button_action BIT 0, A JR Z, =Start_action_or_movement.end LD A, $mem_bunny_direction AND $07 OR $10 LD $mem_bunny_direction, A LD A, $mem_map_loading_flags SET 3, A LD $mem_map_loading_flags, A Start_action_or_movement.end: Scroll_viewport: LD A, $mem_map_loading_flags BIT 3, A JR Z, =Scroll_viewport.end LD A, $mem_bunny_direction BIT 3, A JR Z, =Scroll_viewport.end LD A, $mem_bunny_direction LD D, A LD A, $mem_prepared_viewport_x LD B, A LD A, $mem_prepared_viewport_y LD C, A LD A, $01 .ADD_A_TO_DIRECTION_BC LD A, B LD $mem_prepared_viewport_x, A LD A, C LD $mem_prepared_viewport_y, A Scroll_viewport.end: End_movement: LD A, $mem_map_loading_flags BIT 3, A JP Z, =End_movement.end LD A, $mem_moving_animation_step CP $0f JP NZ, =End_movement.end LD A, $mem_bunny_direction BIT 3, A JR Z, =End_movement.end LD $mem_bunny_direction, A LD D, A LD A, $mem_bunny_x LD B, A LD A, $mem_bunny_y LD C, A LD A, $01 .ADD_A_TO_DIRECTION_BC LD A, B LD $mem_bunny_x, A LD A, C LD $mem_bunny_y, A LD A, $mem_viewport_x LD B, A LD A, $mem_viewport_y LD C, A LD A, $01 .ADD_A_TO_DIRECTION_BC LD A, B LD $mem_viewport_x, A LD A, C LD $mem_viewport_y, A End_movement.end: Check_End_Action: LD A, $mem_bunny_direction AND $f0 CP $10 JR NZ, =Check_End_Action.end Check_End_Action.end: RET