.MACRODEF CLOSE_DIALOGUE LD A, $mem_display_flag AND $60 OR $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_current_focused_attack_ep_cost LD HL, $9c43 CALL =Print_8bit_Thin LD A, $mem_display_flag BIT 2, A JR Z, =Copy_Dialogue_Buffer_Part2 RES 2, A SET 4, A LD $mem_display_flag, A LD HL, $9cb4 LD DE, $dialogue_first_line LD C, $12 JP =tilemap_memcpy Copy_Dialogue_Buffer_Part2: BIT 4, A RET Z RES 4, A LD $mem_display_flag, A LD HL, $9cf4 LD DE, $dialogue_third_line LD C, $12 JP =tilemap_memcpy Init_Attack_Menu: LD HL, $mem_bunny_attacks .MACRODEF SETUP_NEXT_ATTACK_MENU dialogue_buffer choice_routine ; Attack index pointer in (HL) PUSH HL ; Getting Attack list pointer from index LD E, (HL) LD D, $00 SLA E RL D SLA E RL D SLA E RL D LD HL, =Attack_List LD A, L ADD E LD L, A LD A, H ADC D LD H, A LD A, (HL+) .CHANGE_BANK_TO_A ; Printing txt into dialogue buffer LD A, (HL+) LD B, A LD A, (HL+) LD C, A LD E, L LD D, H LD HL, $dialogue_buffer CALL =Print_str LD H, D LD L, E ; Setting up choice routine LD A, (HL+) LD B, A LD A, (HL+) LD C, A LD D, H LD E, L LD HL, $choice_routine LD A, B LD (HL+), A LD A, C LD (HL), A POP HL INC HL .END .SETUP_NEXT_ATTACK_MENU $dialogue_menu_choice1, $dialogue_menu_choice1_routine .SETUP_NEXT_ATTACK_MENU $dialogue_menu_choice2, $dialogue_menu_choice2_routine .SETUP_NEXT_ATTACK_MENU $dialogue_menu_choice3, $dialogue_menu_choice3_routine .SETUP_NEXT_ATTACK_MENU $dialogue_menu_choice4, $dialogue_menu_choice4_routine LD A, $mem_number_of_attacks LD $mem_cursor_max_position, 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_current_focused_attack_ep_cost LD B, A LD A, $mem_bunny_mana CP B LD H, $f2 JR NC, =.Skip_Disable_cursor_setting LD H, $f3 .Skip_Disable_cursor_setting: LD A, $mem_menu_cursor_position LD BC, $0000 LD DE, $0000 CP $00 JR NZ, =.choice1_false LD B, H .choice1_false: CP $01 JR NZ, =.choice2_false LD C, H .choice2_false: CP $02 JR NZ, =.choice3_false LD D, H .choice3_false: CP $03 JR NZ, =.choice4_false LD E, H .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_menu_cursor_position LD D, A LD A, $mem_cursor_max_position LD C, A 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 CP C JR NC, =.Sound_effect LD $mem_menu_cursor_position, A JR =Reload_EP_Cost .Vertical_axis: LD A, $mem_menu_cursor_position XOR $01 CP C JR NC, =.Sound_effect LD $mem_menu_cursor_position, A .Sound_effect: LD A, $mem_menu_cursor_position CP D JR NZ, =.moved_sound_effect .fail_move_sound_effect: .SET_SOUND_EFFECT =_sound_effect_Move_arrow_failed .moved_sound_effect: Reload_EP_Cost: LD A, $mem_menu_cursor_position ADD low($mem_bunny_attacks) LD L, A LD A, high($mem_bunny_attacks) ADC $00 LD H, A ; Getting Attack list pointer from index LD E, (HL) LD D, $00 SLA E RL D SLA E RL D SLA E RL D LD HL, =Attack_List LD A, L ADD E LD L, A LD A, H ADC D LD H, A LD A, L ADD $05 LD L, A LD A, H ADC $00 LD H, A LD A, (HL) LD $mem_current_focused_attack_ep_cost, A RET Check_dialogue_action: LD A, $mem_display_flag AND 0b00010100 CP $00 RET NZ LD A, $mem_current_mode CP $enum_dungeon_menu_mode JR Z, =.Dungeon_Menu CP $enum_dungeon_dialogue_mode JR Z, =.Dialogue_Box LD A, $mem_button_action LD B, A LD A, $mem_last_button_action XOR B AND B CP $00 RET Z ; Wait for the music to stop to restart game when button pressed LD A, $mem_sound_flags AND 0b01000001 RET NZ JP =Start RET .Dialogue_Box: LD A, $mem_button_action LD B, A LD A, $mem_last_button_action XOR B AND B CP $00 RET Z BIT 0, A RET Z .SET_SOUND_EFFECT =_sound_effect_Click JP =Dialogue_script_step .Dungeon_Menu: LD A, $mem_button_action LD B, A LD A, $mem_last_button_action XOR B AND B CP $00 RET Z BIT 3, A JR Z, =.test_attack_chosen .SET_SOUND_EFFECT =_sound_effect_Menu_Close LD A, $69 JP =Exit_Menu .test_attack_chosen: BIT 0, A RET Z LD A, $mem_current_focused_attack_ep_cost LD B, A LD A, $mem_bunny_mana CP B RET C SUB B DAA LD $mem_bunny_mana, A LD HL, $dialogue_menu_choice1_routine LD A, $mem_menu_cursor_position SLA A ADD L LD L, A .moved_sound_effect: LD A, (HL+) LD D, A LD A, (HL+) LD E, A .CALL_DE RET Check_Open_Menu_button: LD A, $mem_dungeon_flags BIT 4, A RET Z LD A, $mem_current_mode CP $enum_dungeon_mode RET NZ LD A, $mem_requested_mode CP $enum_dungeon_mode RET NZ LD A, $mem_bunny_status BIT 0, A 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_Attack_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, $mem_display_flag BIT 0, A RET NZ LD A, $mem_display_flag AND $40 ; Keeping object additional tile OR $0d LD $mem_display_flag, A .SET_SOUND_EFFECT =_sound_effect_Menu_Open RET Dialogue_Arrow_Animation: LD A, $mem_display_flag BIT 0, A RET Z LD A, $mem_current_mode CP $enum_dungeon_dialogue_mode JR Z, =.dialogue CP $enum_dead_mode JR Z, =.dead .not_dialogue: LD A, $18 LD ($9d05), A LD A, $14 LD ($9d06), A RET .dead: LD A, $mem_sound_flags AND 0b01000001 JR NZ, =.not_dialogue .dialogue: LD A, $mem_loop_frame_timer AND $7f CP $4e JR C, =.normal CP $5a JR C, =.down CP $66 JR C, =.normal CP $72 JR C, =.down .normal: LD A, $19 LD ($9d05), A LD A, $1a LD ($9d06), A RET .down: LD A, $1b LD ($9d05), A LD A, $1c LD ($9d06), A RET