diff options
author | Astatin <[email protected]> | 2024-11-11 17:56:54 +0900 |
---|---|---|
committer | Astatin <[email protected]> | 2024-11-11 17:56:54 +0900 |
commit | d605c2900ae7c62f1937e250a2ae489678d99214 (patch) | |
tree | 4c1fc76f3b9e50b5f8461784fc349bff685e465a | |
parent | 5eb8b27696e9fa2f60fd75ffb1b31fe049fcc772 (diff) |
Add dungeon menu choice selection mode
-rw-r--r-- | buttons.gbasm | 4 | ||||
-rw-r--r-- | definitions.gbasm | 19 | ||||
-rw-r--r-- | dialogues.gbasm | 8 | ||||
-rw-r--r-- | dialogues.gbtxt | 4 | ||||
-rw-r--r-- | entity/actions.gbasm | 19 | ||||
-rw-r--r-- | entity/bunny.gbasm | 6 | ||||
-rw-r--r-- | gui.gbasm | 148 | ||||
-rw-r--r-- | init.gbasm | 2 | ||||
-rw-r--r-- | main.gbasm | 7 | ||||
-rw-r--r-- | tiles.gbasm | 2 | ||||
-rw-r--r-- | utils.gbasm | 15 |
11 files changed, 216 insertions, 18 deletions
diff --git a/buttons.gbasm b/buttons.gbasm index fd17f71..175f95d 100644 --- a/buttons.gbasm +++ b/buttons.gbasm @@ -2,6 +2,10 @@ Pad_Button_Check: PUSH AF PUSH BC + LD A, $mem_button_direction + LD $mem_last_button_direction, A + LD A, $mem_button_action + LD $mem_last_button_action, A LD A, $20 LD $reg_joypad, A LD A, $reg_joypad diff --git a/definitions.gbasm b/definitions.gbasm index 081192a..626cd2a 100644 --- a/definitions.gbasm +++ b/definitions.gbasm @@ -56,8 +56,17 @@ .DEFINE mem_requested_mode ($c015) .DEFINE enum_dungeon_mode $00 .DEFINE enum_dungeon_menu_mode $01 +.DEFINE enum_dungeon_dialogue_mode $02 .DEFINE mem_menu_cursor_position ($c016) +.DEFINE mem_last_button_direction ($c017) + +.DEFINE dialogue_menu_choice1_routine $c018 ; Takes also $c019 +.DEFINE dialogue_menu_choice2_routine $c01a ; Takes also $c01b +.DEFINE dialogue_menu_choice3_routine $c01c ; Takes also $c01d +.DEFINE dialogue_menu_choice3_routine $c01e ; Takes also $c01f + +.DEFINE mem_last_button_action ($c020) .DEFINE next_free_head_higher_bytes $c7 .DEFINE mem_next_free_head_lower_bytes ($c6ff) @@ -102,6 +111,16 @@ .DEFINE dialogue_second_line $cab2 .DEFINE dialogue_third_line $cac4 +.DEFINE dialogue_menu_choice1 $caa1 +.DEFINE dialogue_menu_choice2 $caaa +.DEFINE dialogue_menu_choice3 $cac5 +.DEFINE dialogue_menu_choice4 $cace + +.DEFINE dialogue_menu_choice1_cursor ($caa0) +.DEFINE dialogue_menu_choice2_cursor ($caa9) +.DEFINE dialogue_menu_choice3_cursor ($cac4) +.DEFINE dialogue_menu_choice4_cursor ($cacd) + .DEFINE mem_entities_list $cb00 ; Until cbff ; struct entity { ; sprite: u8, diff --git a/dialogues.gbasm b/dialogues.gbasm index d16181a..416acfa 100644 --- a/dialogues.gbasm +++ b/dialogues.gbasm @@ -2,3 +2,11 @@ Bunny_Prefix: .DB 0x8b, 0x9e, 0x97, 0x97, 0xa2, 0xaa, 0xff Text_1: .DB 0x91, 0x8e, 0x95, 0x95, 0x98, 0x0, 0xa5, 0xff +Menu_Choice_1: +.DB 0x95, 0x9e, 0x97, 0x8a, 0xff +Menu_Choice_2: +.DB 0x8a, 0xa3, 0x9e, 0x9b, 0x8e, 0xff +Menu_Choice_3: +.DB 0xa0, 0x92, 0x9d, 0x8c, 0x91, 0xff +Menu_Choice_4: +.DB 0x98, 0xa0, 0x95, 0xff diff --git a/dialogues.gbtxt b/dialogues.gbtxt index ae3374c..f367f49 100644 --- a/dialogues.gbtxt +++ b/dialogues.gbtxt @@ -1,2 +1,6 @@ Bunny_Prefix: Bunny: Text_1: Hello ! +Menu_Choice_1: Luna +Menu_Choice_2: Azure +Menu_Choice_3: Witch +Menu_Choice_4: Owl diff --git a/entity/actions.gbasm b/entity/actions.gbasm index 9c696e0..b1e48a8 100644 --- a/entity/actions.gbasm +++ b/entity/actions.gbasm @@ -53,7 +53,7 @@ Entity_Action: Update_Animation_Steps: LD A, $mem_map_loading_flags BIT 3, A - JR Z, =Update_Animation_Steps.end + JR Z, =Update_Animation_Steps.update_mode LD A, $mem_moving_animation_step INC A @@ -68,6 +68,8 @@ Update_Animation_Steps: SET 1, A LD $mem_map_loading_flags, A + Update_Animation_Steps.update_mode: + LD A, $mem_requested_mode LD $mem_current_mode, A @@ -116,15 +118,16 @@ Fox_Interaction: RET Open_Dialogue: - LD HL, $dialogue_first_line - LD BC, =Bunny_Prefix - CALL =Print_str + CALL =Init_Menu + ; LD HL, $dialogue_first_line + ; LD BC, =Bunny_Prefix + ; CALL =Print_str - LD HL, $dialogue_third_line - LD BC, =Text_1 - CALL =Print_str + ; LD HL, $dialogue_third_line + ; LD BC, =Text_1 + ; CALL =Print_str - LD A, $03 + LD A, $01 LD $mem_display_flag, A LD A, $mem_bunny_direction diff --git a/entity/bunny.gbasm b/entity/bunny.gbasm index 4e27929..01206e8 100644 --- a/entity/bunny.gbasm +++ b/entity/bunny.gbasm @@ -26,13 +26,11 @@ Move_Bunny: SET 3, A LD $mem_map_loading_flags, A - PUSH BC LD A, D CALL =Get_Position_After_Move LD A, C CALL =Is_Collisionable CALL =Carve_Entity_Collision_Map - POP BC CP $00 JR Z, =Start_action_or_movement.not_collision RES 3, D @@ -48,7 +46,11 @@ Move_Bunny: JR =Start_action_or_movement.end Start_action_or_movement.test_action: + LD A, $mem_last_button_action + LD B, A LD A, $mem_button_action + CP B + JR Z, =Start_action_or_movement.end BIT 0, A JR Z, =Start_action_or_movement.end LD A, $mem_bunny_direction @@ -16,3 +16,151 @@ Copy_Dialogue_Buffer: LD DE, $dialogue_third_line LD BC, $12 JP =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, =Exit_Menu + LD A, B + LD (HL+), A + LD A, C + LD (HL+), A + + LD BC, =Stairs_action + LD A, B + LD (HL+), A + LD A, C + LD (HL+), A + + LD BC, =Nothing + LD A, B + LD (HL+), A + LD A, C + LD (HL+), A + + LD BC, =Exit_Menu + 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 + + LD A, $00 + LD $mem_display_flag, A + 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, =Display_dialogue_cursor.choice1_false + LD B, $69 + Display_dialogue_cursor.choice1_false: + + CP $01 + JR NZ, =Display_dialogue_cursor.choice2_false + LD C, $69 + Display_dialogue_cursor.choice2_false: + + CP $02 + JR NZ, =Display_dialogue_cursor.choice3_false + LD D, $69 + Display_dialogue_cursor.choice3_false: + + CP $03 + JR NZ, =Display_dialogue_cursor.choice4_false + LD E, $69 + Display_dialogue_cursor.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, =Move_dialogue_cursor.Vertical_axis + LD A, $mem_menu_cursor_position + XOR $02 + LD $mem_menu_cursor_position, A + RET + + Move_dialogue_cursor.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 + RET NZ + + LD A, $mem_last_button_action + LD B, A + LD A, $mem_button_action + CP B + RET Z + BIT 0, A + RET Z + + 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 @@ -67,7 +67,7 @@ Initialize_Window_GUI: LD A, L CP $40 - LD $reg_lcd_status, A + LD $reg_lcd_status, A JR NZ, =Initialize_Window_GUI.top_bar_loop LD HL, $9da0 @@ -84,6 +84,10 @@ New_Dungeon: LD A, $00 LD $mem_display_flag, A + LD A, $enum_dungeon_mode + LD $mem_current_mode, A + LD $mem_requested_mode, A + .ENABLE_WINDOW_NO_WAIT_HBLANK .ENABLE_VBLANK_INTERRUPTS EI @@ -108,6 +112,7 @@ VBLANK_Entrypoint: CALL =Display_Prepared_Block CALL =Display_Object CALL =Copy_Dialogue_Buffer + CALL =Display_dialogue_cursor CALL $OAM_DMA_Transfer_routine ; LYC @@ -130,6 +135,8 @@ VBLANK_Entrypoint: Skip_Dungeon_Update: CALL =Update_Animation_Steps + CALL =Move_dialogue_cursor + CALL =Check_dialogue_action CALL =Display_Entities .ENABLE_VBLANK_INTERRUPTS diff --git a/tiles.gbasm b/tiles.gbasm index dcef5a9..b5da2a3 100644 --- a/tiles.gbasm +++ b/tiles.gbasm @@ -15,7 +15,7 @@ Load_Tile: LD HL, $9200 LD DE, =BG_Tile_Image_Data - LD BC, $0490 + LD BC, $04a0 CALL =memcpy RET diff --git a/utils.gbasm b/utils.gbasm index cb1822a..b24608b 100644 --- a/utils.gbasm +++ b/utils.gbasm @@ -31,6 +31,14 @@ bzero: ; dest = HL, n = BC $end: .END +.MACRODEF CALL_DE + LD BC, =$end + PUSH BC + PUSH DE + RET + $end: +.END + .MACRODEF JUMP_TABLE ; Jump table pointer in BC, index in A, also overwrites DE LD E, A LD D, $00 @@ -47,12 +55,7 @@ bzero: ; dest = HL, n = BC ADC B LD D, A - ; CALL DE - LD BC, =$end - PUSH BC - PUSH DE - RET - $end: + .CALL_DE .END Print_8bit: ; Number in A, Memory Tilemap position in HL |