Display_Entities: LD A, $00 LD $tmp_var_1, A LD HL, $mem_entities_list CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity CALL =Display_Entity LD BC, $00a0 LD HL, $mem_oam_buffer LD A, $tmp_var_1 ADD L LD L, A LD A, $tmp_var_1 XOR $ff INC A ADD C LD C, A CALL =bzero RET Display_Entity: LD A, (HL+) LD E, A CP $00 JP Z, =Display_Entity.skip LD A, (HL+) ADD $80 LD D, A LD A, $mem_viewport_x LD B, A SUB $82 CP D JP NC, =Display_Entity.skip ADD $0e CP D JP C, =Display_Entity.skip LD A, D SUB $80 SUB B AND $0f SWAP A LD B, A LD A, (HL+) ADD $80 LD D, A LD A, $mem_viewport_y LD C, A SUB $82 CP D JP NC, =Display_Entity.skip ADD $0d CP D JP C, =Display_Entity.skip LD A, D SUB $80 SUB C AND $0f SWAP A ADD $06 LD C, A LD A, $mem_map_loading_flags BIT 3, A JR Z, =Display_Entity.Viewport_offset_end LD A, $mem_bunny_direction BIT 3, A JR Z, =Display_Entity.Viewport_offset_end LD A, $mem_bunny_direction AND $07 CP $enum_direction_down JR Z, =Display_Entity.Viewport_offset_down CP $enum_direction_right JR Z, =Display_Entity.Viewport_offset_right CP $enum_direction_up JR Z, =Display_Entity.Viewport_offset_up Display_Entity.Viewport_offset_left: LD A, $mem_prepared_viewport_x SUB $09 AND $0f INC A XOR $ff INC A ADD $10 ADD B LD B, A JR =Display_Entity.Viewport_offset_end Display_Entity.Viewport_offset_right: LD A, $mem_prepared_viewport_x SUB $08 AND $0f XOR $ff INC A ADD B LD B, A JR =Display_Entity.Viewport_offset_end Display_Entity.Viewport_offset_up: LD A, $mem_prepared_viewport_y SUB $09 AND $0f INC A XOR $ff INC A ADD $10 ADD C LD C, A JR =Display_Entity.Viewport_offset_end Display_Entity.Viewport_offset_down: LD A, $mem_prepared_viewport_y SUB $08 AND $0f XOR $ff INC A ADD C LD C, A Display_Entity.Viewport_offset_end: LD A, (HL+) BIT 3, A LD D, A Display_Entity.Moving_Animation: JR Z, =Display_Entity.Moving_Animation.end LD A, $mem_moving_animation_step .ADD_A_TO_DIRECTION_BC Display_Entity.Moving_Animation.end: Display_Entity.Action_Animation: LD A, D AND $f0 CP $10 JR NZ, =Display_Entity.Action_Animation.end LD A, $mem_moving_animation_step CP $04 JR C, =Display_Entity.Action_Animation.Step1 CP $0c JR C, =Display_Entity.Action_Animation.Step2 JR =Display_Entity.Action_Animation.end Display_Entity.Action_Animation.Step1: SLA A SLA A JR =Display_Entity.Action_Animation.Apply Display_Entity.Action_Animation.Step2: SUB $04 SLA A XOR $ff INC A ADD $10 Display_Entity.Action_Animation.Apply: .ADD_A_TO_DIRECTION_BC Display_Entity.Action_Animation.end: Display_Entity.SuperJump_Animation: LD A, D AND $f0 CP $30 JR NZ, =Display_Entity.SuperJump_Animation.end LD A, $mem_moving_animation_step CP $00 JR Z, =Display_Entity.SuperJump_Animation.end .ADD_A_TO_DIRECTION_BC LD A, $mem_moving_animation_step SUB $08 .ABS SLA A CPL INC A ADD $10 CPL INC A ADD C LD C, A Display_Entity.SuperJump_Animation.end: Display_Entity.Shaking_Animation: LD A, D AND $f0 CP $40 JR NZ, =Display_Entity.Shaking_Animation.end LD A, $mem_moving_animation_step CP $00 JR Z, =Display_Entity.Shaking_Animation.end LD A, $mem_moving_animation_step SRA A AND $03 BIT 1, A RES 1, A JR NZ, =Display_Entity.Shaking_Animation.skip_invert CPL INC A Display_Entity.Shaking_Animation.skip_invert: DBG ADD B LD B, A Display_Entity.Shaking_Animation.end: Display_Entity.Moving_Hops: LD A, D AND $f8 CP $08 JR NZ, =Display_Entity.Moving_Hops.end LD A, $mem_moving_animation_step SUB $08 .ABS SUB $04 .ABS CPL INC A ADD $04 CPL INC A ADD C LD C, A Display_Entity.Moving_Hops.end: LD A, D AND $07 CP $enum_direction_left JR Z, =Display_Entity.Left_Direction_sprite CP $enum_direction_right JR Z, =Display_Entity.Right_Direction_sprite CP $enum_direction_up JR Z, =Display_Entity.Up_Direction_sprite JP =Display_Entity.Down_Direction_sprite Display_Entity.Left_Direction_sprite: CALL =Flags_From_Animation LD D, A JP =Display_Entity.Write_OBJ Display_Entity.Right_Direction_sprite: LD A, $02 ADD E LD E, A CALL =Flags_From_Animation OR $20 LD D, A JP =Display_Entity.Write_OBJ Display_Entity.Up_Direction_sprite: LD A, $04 ADD E LD E, A CALL =Flags_From_Animation LD D, A JP =Display_Entity.Write_OBJ Display_Entity.Down_Direction_sprite: LD A, $08 ADD E LD E, A CALL =Flags_From_Animation LD D, A JP =Display_Entity.Write_OBJ Display_Entity.Write_OBJ: PUSH HL ; First OBJ (left) LD HL, $mem_oam_buffer LD A, $tmp_var_1 LD L, A LD A, C LD (HL+), A LD A, B LD (HL+), A LD A, E INC A LD (HL+), A LD A, D LD (HL+), A ; Second OBJ LD A, B ADD $08 LD B, A LD A, C LD (HL+), A LD A, B LD (HL+), A LD A, E XOR $02 INC A LD (HL+), A LD A, D LD (HL+), A LD A, L LD $tmp_var_1, A POP HL Display_Entity.skip: LD A, L AND $f0 ADD $10 LD L, A RET Flags_From_Animation: LD A, D AND $f0 CP $20 LD A, $00 RET NZ LD A, $40 RET