aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAstatin <[email protected]>2024-11-11 17:56:54 +0900
committerAstatin <[email protected]>2024-11-11 17:56:54 +0900
commitd605c2900ae7c62f1937e250a2ae489678d99214 (patch)
tree4c1fc76f3b9e50b5f8461784fc349bff685e465a
parent5eb8b27696e9fa2f60fd75ffb1b31fe049fcc772 (diff)
Add dungeon menu choice selection mode
-rw-r--r--buttons.gbasm4
-rw-r--r--definitions.gbasm19
-rw-r--r--dialogues.gbasm8
-rw-r--r--dialogues.gbtxt4
-rw-r--r--entity/actions.gbasm19
-rw-r--r--entity/bunny.gbasm6
-rw-r--r--gui.gbasm148
-rw-r--r--init.gbasm2
-rw-r--r--main.gbasm7
-rw-r--r--tiles.gbasm2
-rw-r--r--utils.gbasm15
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
diff --git a/gui.gbasm b/gui.gbasm
index cb0f50a..515f48f 100644
--- a/gui.gbasm
+++ b/gui.gbasm
@@ -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
diff --git a/init.gbasm b/init.gbasm
index fee89f2..c36af82 100644
--- a/init.gbasm
+++ b/init.gbasm
@@ -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
diff --git a/main.gbasm b/main.gbasm
index 27d9ac7..a888b70 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -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