diff options
-rw-r--r-- | definitions.gbasm | 11 | ||||
-rw-r--r-- | gui.gbasm | 32 | ||||
-rw-r--r-- | init.gbasm | 4 | ||||
-rw-r--r-- | main.gbasm | 57 | ||||
-rw-r--r-- | tiles.gbasm | 10 | ||||
-rw-r--r-- | utils.gbasm | 73 |
6 files changed, 106 insertions, 81 deletions
diff --git a/definitions.gbasm b/definitions.gbasm index 72eca2e..832377d 100644 --- a/definitions.gbasm +++ b/definitions.gbasm @@ -161,10 +161,10 @@ .DEFINE dialogue_menu_choice3 $cac5 .DEFINE dialogue_menu_choice4 $cace -.DEFINE dialogue_menu_choice1_cursor ($9dc1) -.DEFINE dialogue_menu_choice2_cursor ($9dca) -.DEFINE dialogue_menu_choice3_cursor ($9e01) -.DEFINE dialogue_menu_choice4_cursor ($9e0a) +.DEFINE dialogue_menu_choice1_cursor ($9cb4) +.DEFINE dialogue_menu_choice2_cursor ($9cbd) +.DEFINE dialogue_menu_choice3_cursor ($9cf4) +.DEFINE dialogue_menu_choice4_cursor ($9cfd) .DEFINE mem_last_animation_low_pointer ($cadf) @@ -215,8 +215,7 @@ .DEFINE obj_palette_frozen $ab .DEFINE lcdc_guibg_tilemap $8d -.DEFINE lcdc_mapbg_no_window_tilemap $87 -.DEFINE lcdc_mapbg_window_tilemap $e7 +.DEFINE lcdc_mapbg_tilemap $87 ; HIGH_RAM: ; @@ -17,20 +17,20 @@ Copy_Dialogue_Buffer: RET Z RES 2, A LD $mem_display_flag, A - LD HL, $9dc1 + LD HL, $9cb4 LD DE, $dialogue_first_line - LD BC, $12 - CALL =memcpy + LD C, $12 + CALL =tilemap_memcpy - ; LD HL, $9de1 + ; LD HL, $9cd4 ; LD DE, $dialogue_second_line - ; LD BC, $12 - ; CALL =memcpy + ; LD C, $12 + ; CALL =tilemap_memcpy - LD HL, $9e01 + LD HL, $9cf4 LD DE, $dialogue_third_line - LD BC, $12 - JP =memcpy + LD C, $12 + JP =tilemap_memcpy Init_Menu: LD HL, $dialogue_menu_choice1 @@ -207,9 +207,19 @@ Check_Open_Menu_button: 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 - LD A, $enum_dungeon_menu_mode - LD $mem_requested_mode, A RET @@ -75,11 +75,11 @@ Initialize_Window_GUI: LD (HL+), A LD A, L - CP $40 + CP $94 LD $reg_lcd_status, A JR NZ, =.top_bar_loop - LD HL, $9da0 + LD HL, $9c80 LD BC, $00a0 LD DE, =Dialogue_Box_Tilemap_data CALL =memcpy @@ -13,6 +13,15 @@ $HBlank_Wait.End: .END +.MACRODEF SET_WINDOW_LCDC_E + LD A, $mem_display_flag + BIT 3, A + LD E, $00 + JR Z, =$No_Window + LD E, $60 + $No_Window: +.END + .MACRODEF ENABLE_TOP_BAR XOR A LD $reg_viewport_x, A @@ -20,38 +29,23 @@ LD $reg_viewport_y, A LD A, $lcdc_guibg_tilemap + OR E LD $reg_lcd_controller, A .END .MACRODEF ENABLE_DIALOGUE .HBLANK_WAIT - XOR A + LD A, $98 LD $reg_viewport_x, A + LD A, $b8 LD $reg_viewport_y, A LD A, $lcdc_guibg_tilemap + OR E LD $reg_lcd_controller, A .END -.MACRODEF DISABLE_DIALOGUE_NO_WINDOW - PUSH BC - LD A, $mem_prepared_viewport_x - LD B, A - LD A, $mem_prepared_viewport_y - LD C, A - .HBLANK_WAIT - LD A, B - LD $reg_viewport_x, A - LD A, C - LD $reg_viewport_y, A - LD A, $mem_prepared_color_palette - LD $reg_bg_palette, A - LD A, $lcdc_mapbg_no_window_tilemap - LD $reg_lcd_controller, A - POP BC -.END - -.MACRODEF DISABLE_DIALOGUE_WINDOW +.MACRODEF DISABLE_DIALOGUE PUSH BC LD A, $mem_prepared_viewport_x LD B, A @@ -64,7 +58,8 @@ LD $reg_viewport_y, A LD A, $mem_prepared_color_palette LD $reg_bg_palette, A - LD A, $lcdc_mapbg_window_tilemap + LD A, $lcdc_mapbg_tilemap + OR E LD $reg_lcd_controller, A POP BC .END @@ -131,6 +126,7 @@ New_Dungeon: LD A, $6a LD ($9d66), A + .SET_WINDOW_LCDC_E .ENABLE_TOP_BAR .ENABLE_VBLANK_INTERRUPTS EI @@ -140,6 +136,7 @@ New_Dungeon: JP =Wait_for_Interrupt.loop VBLANK_Entrypoint: + .SET_WINDOW_LCDC_E .ENABLE_TOP_BAR LD A, $palette_bold_font @@ -205,6 +202,7 @@ VBLANK_Entrypoint: CALL =Loading_Mode_Regular CALL =Animation_Wait_Mode CALL =Update_Animation_Steps + CALL =Open_dialogue_on_dungeon_menu_mode CALL =Check_Open_Menu_button CALL =Move_dialogue_cursor CALL =Check_dialogue_action @@ -219,6 +217,9 @@ VBLANK_Entrypoint: STAT_Entrypoint: PUSH AF + PUSH DE + .SET_WINDOW_LCDC_E + LD A, $reg_lyc CP $0a JR Z, =.End_Top_Bar @@ -242,28 +243,22 @@ STAT_Entrypoint: LD A, $77 LD $reg_lyc, A .RESET_STAT_INTERRUPT + POP DE POP AF RETI .skip_dialogue: .DISABLE_LYC_INTERRUPT + POP DE POP AF RET .End_Top_Bar: - LD A, $mem_display_flag - BIT 3, A - JR Z, =.No_Window - .Window: - .DISABLE_DIALOGUE_WINDOW - JR =.Setup_dialogue_lyc - .No_Window: - .DISABLE_DIALOGUE_NO_WINDOW - - .Setup_dialogue_lyc: + .DISABLE_DIALOGUE LD A, $67 LD $reg_lyc, A .RESET_STAT_INTERRUPT + POP DE POP AF RETI diff --git a/tiles.gbasm b/tiles.gbasm index 449f9b9..da3d821 100644 --- a/tiles.gbasm +++ b/tiles.gbasm @@ -78,11 +78,11 @@ Reload_Entities_Tile_Data: RET Dialogue_Box_Tilemap_data: - .DB 0x11, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .DB 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .DB 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .DB 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .DB 0x12, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .DB 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, + .DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .DB 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 Cost_Window_Tilemap_data: .DB 0x11, 0x17, 0x17, 0x17, 0x17, 0x17, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 diff --git a/utils.gbasm b/utils.gbasm index 4f7e7f7..47fec5a 100644 --- a/utils.gbasm +++ b/utils.gbasm @@ -1,26 +1,47 @@ memcpy: ; src = DE, dest = HL, n = BC - memcpy.loop: + .loop: LD A, (DE) LD (HL+), A INC DE DEC BC XOR A CP B - JR NZ =memcpy.loop + JR NZ =.loop + CP C + JR NZ =.loop + RET + +tilemap_memcpy: ; src = DE, dest = HL, n = C + .loop: + LD A, (DE) + LD (HL), A + LD A, L + + INC A + AND $1f + LD B, A + LD A, L + AND $e0 + OR B + LD L, A + + INC DE + DEC C + XOR A CP C - JR NZ =memcpy.loop + JR NZ =.loop RET bzero: ; dest = HL, n = BC LD A, $00 - bzero.loop: + .loop: LD (HL+), A INC DE DEC BC CP B - JR NZ =bzero.loop + JR NZ =.loop CP C - JR NZ =bzero.loop + JR NZ =.loop RET .MACRODEF ABS @@ -168,16 +189,16 @@ Print_str: ; Memory Tilemap position in HL, Text address in BC, FF ended PUSH AF PUSH BC - Print_str.loop: + .loop: LD A, (BC) CP $ff - JR Z, =Print_str.end + JR Z, =.end LD (HL+), A INC BC - JR =Print_str.loop + JR =.loop - Print_str.end: + .end: POP BC POP AF RET @@ -187,65 +208,65 @@ MUL: ; B x C => EA LD E, $00 BIT 7, B - JR Z, =MUL.bit7 + JR Z, =.bit7 ADD C - MUL.bit7: + .bit7: SLA A RL E BIT 6, B - JR Z, =MUL.bit6 + JR Z, =.bit6 ADD C - MUL.bit6: + .bit6: SLA A RL E BIT 5, B - JR Z, =MUL.bit5 + JR Z, =.bit5 ADD C - MUL.bit5: + .bit5: SLA A RL E BIT 4, B - JR Z, =MUL.bit4 + JR Z, =.bit4 ADD C - MUL.bit4: + .bit4: SLA A RL E BIT 3, B - JR Z, =MUL.bit3 + JR Z, =.bit3 ADD C - MUL.bit3: + .bit3: SLA A RL E BIT 2, B - JR Z, =MUL.bit2 + JR Z, =.bit2 ADD C - MUL.bit2: + .bit2: SLA A RL E BIT 1, B - JR Z, =MUL.bit1 + JR Z, =.bit1 ADD C - MUL.bit1: + .bit1: SLA A RL E BIT 0, B - JR Z, =MUL.bit0 + JR Z, =.bit0 ADD C - MUL.bit0: + .bit0: RET VBlank_Wait: |