aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--definitions.gbasm13
-rw-r--r--entity/init.gbasm8
-rw-r--r--init.gbasm26
-rw-r--r--main.gbasm138
-rw-r--r--map/objects.gbasm3
-rw-r--r--tiles.gbasm7
6 files changed, 136 insertions, 59 deletions
diff --git a/definitions.gbasm b/definitions.gbasm
index deb9789..a4216a1 100644
--- a/definitions.gbasm
+++ b/definitions.gbasm
@@ -1,11 +1,10 @@
.DEFINE reg_joypad ($00)
+.DEFINE reg_interrupt_flags ($0f)
.DEFINE reg_lcd_controller ($40)
.DEFINE reg_lcd_status ($41)
.DEFINE reg_lyc ($45)
.DEFINE reg_viewport_y ($42)
.DEFINE reg_viewport_x ($43)
-.DEFINE reg_window_pos_y ($4a)
-.DEFINE reg_window_pos_x ($4b)
.DEFINE reg_bg_palette ($47)
.DEFINE reg_obj0_palette ($48)
.DEFINE reg_interrupt_enable ($ff)
@@ -50,6 +49,9 @@
.DEFINE mem_prepared_viewport_x ($c011)
.DEFINE mem_prepared_viewport_y ($c012)
+.DEFINE mem_display_flag ($c013)
+; bit 0: if dialogue box is displayed
+
.DEFINE next_free_head_higher_bytes $c7
.DEFINE mem_next_free_head_lower_bytes ($c6ff)
@@ -107,6 +109,13 @@
.DEFINE enum_direction_up $03
.DEFINE enum_direction_down $04
+.DEFINE palette_normal $e4
+.DEFINE palette_bold_font $f4
+.DEFINE palette_thin_font $c4
+
+.DEFINE lcdc_window_enabled $8d
+.DEFINE lcdc_window_disabled $87
+
; HIGH_RAM:
;
; 80-85 ; Free to use as temporary variables
diff --git a/entity/init.gbasm b/entity/init.gbasm
index 188a4b9..5404ead 100644
--- a/entity/init.gbasm
+++ b/entity/init.gbasm
@@ -47,6 +47,14 @@ Initialize_Entities:
LD L, A
CALL =Initialize_Fox
+ CALL =Initialize_Fox
+ CALL =Initialize_Fox
+ CALL =Initialize_Fox
+ CALL =Initialize_Fox
+ CALL =Initialize_Fox
+ CALL =Initialize_Fox
+ CALL =Initialize_Fox
+ CALL =Initialize_Fox
Fix_Bunny_screen:
LD A, $mem_bunny_x
diff --git a/init.gbasm b/init.gbasm
index 5b01220..fee89f2 100644
--- a/init.gbasm
+++ b/init.gbasm
@@ -59,31 +59,21 @@ Empty_VRAM: ; (Clear screen)
LD A, $d3 ; $e4
LD $reg_obj0_palette, A
- ; Interrupts
- LD A, $03
- LD $reg_interrupt_enable, A
-
- ; LYC
- LD A, $09
- LD $reg_lyc, A
-
- ; Set STAT interrupt to LYC = LY
- LD A, $40
- LD $reg_lcd_status, A
-
- ; Window position
- LD A, $ff
- LD $reg_window_pos_x, A
-
Initialize_Window_GUI:
LD HL, $9c20
- Initialize_Window_GUI.loop:
+ Initialize_Window_GUI.top_bar_loop:
LD A, $10
LD (HL+), A
LD A, L
CP $40
- JR NZ, =Initialize_Window_GUI.loop
+ LD $reg_lcd_status, A
+ JR NZ, =Initialize_Window_GUI.top_bar_loop
+
+ LD HL, $9da0
+ LD BC, $00a0
+ LD DE, =Dialogue_Box_Tilemap_data
+ CALL =memcpy
Copy_OAM_DMA_Transfer_Routine_To_HRAM:
LD HL, $OAM_DMA_Transfer_routine
diff --git a/main.gbasm b/main.gbasm
index 1293e8a..a4ce1fc 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -1,6 +1,74 @@
.INCLUDE "definitions.gbasm"
.INCLUDE "init.gbasm"
+.MACRODEF HBLANK_WAIT
+ LD A, $reg_lcd_controller
+ BIT 7, A
+ JR Z, =$HBlank_Wait.End
+ $HBlank_Wait.loop:
+ LD A, $reg_lcd_status
+ AND $03
+ CP $00
+ JR NZ, =$HBlank_Wait.loop
+ $HBlank_Wait.End:
+.END
+
+.MACRODEF ENABLE_WINDOW
+ .HBLANK_WAIT
+ XOR A
+ LD $reg_viewport_x, A
+ LD $reg_viewport_y, A
+
+ LD A, $palette_bold_font
+ LD $reg_bg_palette, A
+
+ LD A, $lcdc_window_enabled
+ LD $reg_lcd_controller, A
+.END
+
+.MACRODEF DISABLE_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, $palette_normal
+ LD $reg_bg_palette, A
+ LD A, $lcdc_window_disabled
+ LD $reg_lcd_controller, A
+ POP BC
+.END
+
+.MACRODEF ENABLE_VBLANK_INTERRUPTS
+ LD A, $03
+ LD $reg_interrupt_enable, A
+.END
+
+.MACRODEF RESET_STAT_INTERRUPT
+ LD A, $reg_interrupt_flags
+ RES 1, A
+ LD $reg_interrupt_flags, A
+.END
+
+.MACRODEF ENABLE_LYC_INTERRUPT
+ .RESET_STAT_INTERRUPT
+ LD A, $02
+ LD $reg_interrupt_enable, A
+ LD A, $40
+ LD $reg_lcd_status, A
+.END
+
+.MACRODEF DISABLE_LYC_INTERRUPT
+ LD A, $reg_interrupt_enable
+ RES 1, A
+ LD $reg_interrupt_enable, A
+.END
+
Entrypoint:
CALL =Initialize_RNG
New_Dungeon:
@@ -12,27 +80,15 @@ New_Dungeon:
CALL =Load_Map
CALL =Load_Objects
- ; LCDC
- LD A, $87
- LD $reg_lcd_controller, A
-
+ .ENABLE_VBLANK_INTERRUPTS
EI
Wait_for_VRAM.loop:
HALT
+ EI
JP =Wait_for_VRAM.loop
VBLANK_Entrypoint:
- ; Window enable
- LD A, $reg_lcd_controller
- OR $60
- AND $fd
- LD $reg_lcd_controller, A
-
- LD A, $00
- LD $reg_viewport_y, A
- LD $reg_viewport_x, A
-
- LD HL, $9c01
+ LD HL, $9c00
LD A, $mem_bunny_health
CALL =Print_8bit
@@ -43,31 +99,12 @@ VBLANK_Entrypoint:
CALL =Display_Object
CALL $OAM_DMA_Transfer_routine
- ; BOLD FONT
- LD A, $f4
- ; SLIM FONT
- ; LD A, $c4
- LD $reg_bg_palette, A
-
- LD A, $mem_prepared_viewport_x
- LD B, A
- LD A, $mem_prepared_viewport_y
- LD C, A
- LD A, $reg_lcd_controller
- AND $9f
- OR $02
+ .ENABLE_WINDOW
+ ; LYC
+ LD A, $09
+ LD $reg_lyc, A
+ .ENABLE_LYC_INTERRUPT
EI
- HALT
- RETI
-
-STAT_Entrypoint:
- LD $reg_lcd_controller, A
- LD A, B
- LD $reg_viewport_x, A
- LD A, C
- LD $reg_viewport_y, A
- LD A, $e4
- LD $reg_bg_palette, A
CALL =Object_Interactions_Check
@@ -77,8 +114,31 @@ STAT_Entrypoint:
CALL =Prepare_Scrolling_Map
CALL =Display_Entities
+ .ENABLE_VBLANK_INTERRUPTS
+ RET
+
+STAT_Entrypoint:
+ PUSH AF
+ LD A, $reg_lyc
+ CP $09
+ JR Z, =STAT_Entrypoint.End_Top_Bar
+ LD A, $mem_display_flag
+ BIT 0, A
+ JR Z, =STAT_Entrypoint.skip_dialogue
+ .ENABLE_WINDOW
+ STAT_Entrypoint.skip_dialogue:
+ .DISABLE_LYC_INTERRUPT
+ POP AF
RET
+ STAT_Entrypoint.End_Top_Bar:
+ .DISABLE_WINDOW
+ LD A, $67
+ LD $reg_lyc, A
+ .RESET_STAT_INTERRUPT
+ POP AF
+ RETI
+
.INCLUDE "tiles.gbasm"
.INCLUDE "rng.gbasm"
.INCLUDE "utils.gbasm"
diff --git a/map/objects.gbasm b/map/objects.gbasm
index 2e36b12..f3ef48f 100644
--- a/map/objects.gbasm
+++ b/map/objects.gbasm
@@ -169,6 +169,9 @@ Load_Objects:
RET
Object_Interactions_Check:
+ LD A, $mem_moving_animation_step
+ CP $0d
+ JR NZ, =Object_Interactions_Check.End
LD A, $mem_map_loading_flags
BIT 1, A
JR Z, =Object_Interactions_Check.End
diff --git a/tiles.gbasm b/tiles.gbasm
index 9cfce67..dcef5a9 100644
--- a/tiles.gbasm
+++ b/tiles.gbasm
@@ -18,3 +18,10 @@ Load_Tile:
LD BC, $0490
CALL =memcpy
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