Initialize_Objects: LD A, $mem_map_loading_flags OR $01 LD $mem_map_loading_flags, A LD HL, $mem_object_list CALL =Spawn_stairs RET Spawn_stairs: LD A, $60 LD (HL+), A LD A, $mem_number_of_rooms CALL =RNG_Bound SLA A SLA A ADD $80 LD C, A LD B, $c8 LD A, (BC) LD D, A INC BC LD A, (BC) INC A CALL =RNG_Bound ADD D LD (HL+), A INC BC LD A, (BC) LD D, A INC BC LD A, (BC) INC A CALL =RNG_Bound ADD D LD (HL+), A LD A, $01 LD (HL+), A INC HL INC HL INC HL INC HL RET Object_Interaction_Jump_table: ; 00 RET NOP NOP NOP ; 01 JP =Stairs_action NOP Stairs_action: DI LD A, $00 LD $reg_interrupt_flags, A Stairs_action.Wait_VBlank: LD A, $reg_lcd_status AND $03 CP $01 JR NZ, =Stairs_action.Wait_VBlank ; LCDC XOR A LD $reg_lcd_controller, A CALL =Reset_Map JP =New_Dungeon Display_Object: LD HL, $mem_object_list LD A, $mem_object_load_counter INC A AND $0f LD $mem_object_load_counter, A SLA A SLA A SLA A AND $f8 LD L, A LD A, (HL+) LD C, A LD A, (HL+) ADD $80 LD D, A LD A, $mem_viewport_x SUB $83 CP D JR NC, =Display_Objects.End ADD $0e CP D JR C, =Display_Objects.End LD A, D SUB $80 LD D, A LD A, (HL+) ADD $80 LD B, A LD A, $mem_viewport_y SUB $83 CP B JR NC, =Display_Objects.End ADD $0e CP B JR C, =Display_Objects.End LD A, B SUB $80 LD B, A LD A, C CP $00 JR Z, =Display_Objects.Nothing LD A, D CALL =Construct_Tile_Address LD A, C LD (DE), A INC E INC C LD A, C LD (DE), A INC C LD A, E XOR $21 LD E, A LD A, C LD (DE), A INC C INC E LD A, C LD (DE), A Display_Objects.End: RET Display_Objects.Nothing: LD A, D CALL =Load_Block CALL =Display_Prepared_Block RET Load_Objects: CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object CALL =Display_Object RET Object_Interactions_Check: LD A, $mem_moving_animation_step CP $00 JR NZ, =Object_Interactions_Check.End LD A, $mem_map_loading_flags BIT 1, A JR Z, =Object_Interactions_Check.End LD HL, $mem_object_list LD A, $mem_bunny_x LD C, A LD A, $mem_bunny_y LD B, A Object_Interactions_Check.loop: LD A, (HL+) CP $00 JR Z, =Object_Interactions_Check.next LD A, (HL+) CP C JR NZ, =Object_Interactions_Check.next LD A, (HL+) CP B JR NZ, =Object_Interactions_Check.next LD E, (HL) PUSH BC ; So we have HL set to the object pointer LD A, L AND $f8 LD L, A LD BC, =Object_Interaction_Jump_table LD A, E .JUMP_TABLE POP BC Object_Interactions_Check.next: LD A, L AND $f8 ADD $08 LD L, A CP $80 JR NZ, =Object_Interactions_Check.loop Object_Interactions_Check.End: RET