.MACRODEF CLOSE_DIALOGUE LD A, $04 LD $mem_display_flag, A LD HL, $dialogue_first_line LD BC, $12 CALL =bzero LD HL, $dialogue_third_line LD BC, $12 CALL =bzero .END Copy_Dialogue_Buffer: LD A, $mem_display_flag BIT 2, A RET Z RES 2, A LD $mem_display_flag, A LD HL, $9cb4 LD DE, $dialogue_first_line LD C, $12 CALL =tilemap_memcpy ; LD HL, $9cd4 ; LD DE, $dialogue_second_line ; LD C, $12 ; CALL =tilemap_memcpy LD HL, $9cf4 LD DE, $dialogue_third_line LD C, $12 JP =tilemap_memcpy Init_Menu: LD HL, $dialogue_menu_choice1 LD BC, =Menu_Choice_1 CALL =Print_str LD HL, $dialogue_menu_choice2 LD BC, =Menu_Choice_2 CALL =Print_str LD HL, $dialogue_menu_choice3 LD BC, =Menu_Choice_3 CALL =Print_str LD HL, $dialogue_menu_choice4 LD BC, =Menu_Choice_4 CALL =Print_str LD HL, $dialogue_menu_choice1_routine LD BC, =Hop_Attack LD A, B LD (HL+), A LD A, C LD (HL+), A LD BC, =Heal_Attack LD A, B LD (HL+), A LD A, C LD (HL+), A LD BC, =Freeze_Attack LD A, B LD (HL+), A LD A, C LD (HL+), A LD BC, =Earcoptr_Attack LD A, B LD (HL+), A LD A, C LD (HL+), A RET Nothing: RET Exit_Menu: LD A, $enum_dungeon_mode LD $mem_requested_mode, A .CLOSE_DIALOGUE RET Display_dialogue_cursor: LD A, $mem_current_mode CP $enum_dungeon_menu_mode RET NZ LD A, $mem_menu_cursor_position LD BC, $0000 LD DE, $0000 CP $00 JR NZ, =.choice1_false LD B, $69 .choice1_false: CP $01 JR NZ, =.choice2_false LD C, $69 .choice2_false: CP $02 JR NZ, =.choice3_false LD D, $69 .choice3_false: CP $03 JR NZ, =.choice4_false LD E, $69 .choice4_false: LD A, B LD $dialogue_menu_choice1_cursor, A LD A, C LD $dialogue_menu_choice2_cursor, A LD A, D LD $dialogue_menu_choice3_cursor, A LD A, E LD $dialogue_menu_choice4_cursor, A RET Move_dialogue_cursor: LD A, $mem_current_mode CP $enum_dungeon_menu_mode RET NZ LD A, $mem_last_button_direction LD B, A LD A, $mem_button_direction CP $00 RET Z CP B RET Z DEC A BIT 1, A JR Z, =.Vertical_axis LD A, $mem_menu_cursor_position XOR $02 LD $mem_menu_cursor_position, A RET .Vertical_axis: LD A, $mem_menu_cursor_position XOR $01 LD $mem_menu_cursor_position, A RET Check_dialogue_action: LD A, $mem_current_mode CP $enum_dungeon_menu_mode JR Z, =.Check_exit CP $enum_dungeon_dialogue_mode RET NZ .Check_exit: LD A, $mem_last_button_action LD B, A LD A, $mem_button_action CP B RET Z BIT 3, A JP NZ, =Exit_Menu BIT 0, A RET Z LD A, $mem_current_mode CP $enum_dungeon_menu_mode RET NZ LD HL, $dialogue_menu_choice1_routine LD A, $mem_menu_cursor_position SLA A ADD L LD L, A LD A, (HL+) LD D, A LD A, (HL+) LD E, A .CALL_DE RET Check_Open_Menu_button: LD A, $mem_current_mode CP $enum_dungeon_mode RET NZ LD A, $mem_last_button_action AND $08 LD B, A LD A, $mem_button_action AND $08 CP B RET Z BIT 3, A RET Z CALL =Init_Menu LD A, $enum_dungeon_menu_mode LD $mem_requested_mode, A RET Open_dialogue_on_dungeon_menu_mode: LD A, $mem_current_mode CP $enum_dungeon_menu_mode RET NZ LD A, $mem_requested_mode CP $enum_dungeon_menu_mode RET NZ LD A, $0d LD $mem_display_flag, A RET