Move_Bunny: LD A, $mem_bunny_flags LD E, $01 BIT 0, A JR Z, =.Normal_speed LD E, $02 .Normal_speed: .Finish_unfreeze: LD A, $mem_moving_animation_step CP $00 JR NZ, =.Finish_unfreeze.end LD A, $mem_bunny_status CP $04 JR NZ, =.Finish_unfreeze.end LD A, $00 LD $mem_bunny_status, A .Finish_unfreeze.end: .Freeze_shiver: LD A, $mem_moving_animation_step CP $00 JP NZ, =.Freeze_shiver.end LD A, $mem_bunny_status CP $01 JR NZ, =.Freeze_shiver.end LD A, $mem_bunny_direction AND $07 LD $mem_bunny_direction, A LD A, $mem_bunny_status_clear_turn_counter DEC A CP $00 LD $mem_bunny_status_clear_turn_counter, A JR Z, =.Unfreeze CALL =RNG_Step CP $55 JP NC, =.Skip_turn LD A, $mem_bunny_direction OR $40 LD $mem_bunny_direction, A CALL =RNG_Step CP $55 JP NC, =.Skip_turn .Unfreeze: LD A, $04 LD $mem_bunny_status, A LD A, $mem_bunny_flags RES 1, A LD $mem_bunny_flags, A JP =.Skip_turn .Freeze_shiver.end: .Should_turn_be_skipped: LD A, $mem_bunny_status BIT 0, A JR Z, =.no_skip .Skip_turn: LD A, $mem_map_loading_flags SET 3, A LD $mem_map_loading_flags, A RET .no_skip: .Start_action_or_movement: LD A, $mem_map_loading_flags BIT 4, A JP NZ, =.Start_action_or_movement.start_from_interaction BIT 3, A JP 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.end SET 3, A LD D, A LD A, $mem_map_loading_flags SET 3, A LD $mem_map_loading_flags, A LD A, $mem_button_action BIT 1, A JR NZ, =.Start_action_or_movement.cancel_movement LD A, D CALL =Get_Position_After_Move CALL =Is_Collisionable CALL =Carve_Entity_Collision_Map CP $00 JR Z, =.Start_action_or_movement.not_collision .Start_action_or_movement.cancel_movement: 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 BIT 3, D JR Z, =.Start_action_or_movement.end LD A, B LD $mem_bunny_predicted_x, A LD A, C LD $mem_bunny_predicted_y, A JR =.Start_action_or_movement.end .Start_action_or_movement.start_from_interaction: LD A, $mem_map_loading_flags RES 4, A SET 3, A LD $mem_map_loading_flags, A .Start_action_or_movement.end: .Reset_Blinking_flag: LD A, $mem_map_loading_flags BIT 3, A JR Z, =.Reset_Blinking_flag.end LD A, $mem_moving_animation_step CP $00 JR NZ, =.Reset_Blinking_flag.end LD A, $mem_bunny_flags RES 3, A LD $mem_bunny_flags, A .Reset_Blinking_flag.end: .Delayed_Attack: LD A, $mem_moving_animation_step CP $08 JR NZ, =.Delayed_Attack.end LD A, $mem_map_loading_flags BIT 3, A JR Z, =.Delayed_Attack.end LD A, $mem_entity_being_attacked_low CP $00 JR Z, =.Delayed_Attack.end ADD $06 LD L, A LD H, high($mem_entities_list) LD A, (HL) DEC A DAA LD (HL+), A SET 3, (HL) LD A, $24 LD $mem_blinking_animation_counter, A LD A, $00 LD $mem_entity_being_attacked_low, A .Delayed_Attack.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, E .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 LD D, A AND $07 BIT 3, D LD $mem_bunny_direction, A JP Z, =.End_movement.end LD A, $mem_bunny_x LD B, A LD A, $mem_bunny_y LD C, A LD A, E .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 LD A, $mem_bunny_flags RES 0, A LD $mem_bunny_flags, A PUSH DE .End_movement.Update_current_room: LD A, $ff LD $mem_bunny_current_room_idx, A LD HL, $mem_room_list .End_movement.Update_current_room.loop: LD A, $mem_bunny_x LD D, A LD E, (HL) CP E JR C, =.End_movement.Update_current_room.skip LD A, E INC HL ADD (HL) CP D JR C, =.End_movement.Update_current_room.skip INC HL LD A, $mem_bunny_y LD D, A LD E, (HL) CP E JR C, =.End_movement.Update_current_room.skip LD A, E INC HL ADD (HL) CP D JR C, =.End_movement.Update_current_room.skip LD A, L SUB $83 SRA A SRA A LD $mem_bunny_current_room_idx, A JR =.End_movement.Update_current_room.end .End_movement.Update_current_room.skip: LD A, L AND $fc ADD $04 LD L, A CP $a0 JR NZ, =.End_movement.Update_current_room.loop .End_movement.Update_current_room.end: POP DE LD A, $mem_bunny_x LD $mem_bunny_predicted_x, A LD A, $mem_bunny_y LD $mem_bunny_predicted_y, A LD A, $mem_bunny_next_mana_regen DEC A AND $07 LD $mem_bunny_next_mana_regen, A CP $00 JR NZ, =.End_movement.skip_mana_regen LD A, $mem_bunny_mana INC A DAA JR C, =.End_movement.skip_mana_regen CP $31 JR NC, =.End_movement.skip_mana_regen LD $mem_bunny_mana, A .End_movement.skip_mana_regen: .End_movement.end: .Middle_movement_doublespeed_viewport_update: LD A, $mem_map_loading_flags BIT 3, A JP Z, =.Middle_movement_doublespeed_viewport_update.end LD A, $mem_moving_animation_step CP $07 JP NZ, =.Middle_movement_doublespeed_viewport_update.end LD A, $mem_bunny_direction BIT 3, A JR Z, =.Middle_movement_doublespeed_viewport_update.end LD A, E CP $02 JR NZ, =.Middle_movement_doublespeed_viewport_update.end 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 .Middle_movement_doublespeed_viewport_update.end: .Interaction: LD A, $mem_map_loading_flags BIT 3, A JP NZ, =.Interaction.end .Interaction.test_action: LD A, $mem_button_action LD B, A LD A, $mem_last_button_action XOR B AND B CP $00 JP Z, =.Interaction.end BIT 0, A JP Z, =.Interaction.end LD A, $mem_bunny_x LD B, A LD A, $mem_bunny_y LD C, A LD A, $mem_bunny_direction OR $08 AND $0f LD D, A LD A, $01 .ADD_A_TO_DIRECTION_BC LD HL, $mem_entities_list .Interaction.entities_loop: LD A, L AND $f0 ADD $10 LD L, A CP $00 JR Z, =.Interaction.for_else LD A, (HL+) CP $00 JR Z, =.Interaction.entities_loop.next LD A, (HL+) CP B JR NZ, =.Interaction.entities_loop.next LD A, (HL+) CP C JR NZ, =.Interaction.entities_loop.next INC HL INC HL PUSH HL PUSH BC LD BC, =Interaction_Jump_table LD A, (HL) .JUMP_TABLE POP BC POP HL JR =.Interaction.end .Interaction.entities_loop.next: JR =.Interaction.entities_loop .Interaction.for_else: LD A, $mem_bunny_direction AND $07 OR $10 LD $mem_bunny_direction, A LD A, $mem_map_loading_flags SET 4, A LD $mem_map_loading_flags, A .Interaction.end: .Check_End_Action: LD A, $mem_bunny_direction AND $f0 CP $10 JR NZ, =.Check_End_Action.end .Check_End_Action.end: RET