aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--definitions.gbasm10
-rw-r--r--entity/display.gbasm12
-rw-r--r--gui.gbasm2
-rw-r--r--init.gbasm11
-rw-r--r--main.gbasm93
-rw-r--r--scripts/generate-tiledata.py2
-rw-r--r--sprites/font.pngbin418 -> 504 bytes
-rw-r--r--sprites/gui/energy-points.pngbin0 -> 169 bytes
-rw-r--r--sprites/gui/heart.pngbin126 -> 132 bytes
-rw-r--r--tiles.gbasm10
-rw-r--r--tileset.gbasm22
-rw-r--r--utils.gbasm19
13 files changed, 149 insertions, 34 deletions
diff --git a/Makefile b/Makefile
index 1f2ccc5..00aed1f 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@ all: run
.PHONY: build/main.rom clean
-tileset.gbasm: ./scripts/generate-tiledata.py $(wildcard ./sprites/**/*)
+tileset.gbasm: ./scripts/generate-tiledata.py $(wildcard ./sprites/**/* ./sprites/*)
python ./scripts/generate-tiledata.py > tileset.gbasm
dialogues.gbasm: ./dialogues.gbtxt ./scripts/generate_from_gbtxt.py
diff --git a/definitions.gbasm b/definitions.gbasm
index 045a01b..72eca2e 100644
--- a/definitions.gbasm
+++ b/definitions.gbasm
@@ -8,6 +8,8 @@
.DEFINE reg_bg_palette ($47)
.DEFINE reg_obj0_palette ($48)
.DEFINE reg_obj1_palette ($49)
+.DEFINE reg_window_y ($4a)
+.DEFINE reg_window_x ($4b)
.DEFINE reg_interrupt_enable ($ff)
.DEFINE VRAM_start $8000
@@ -42,6 +44,8 @@
.DEFINE mem_bunny_health ($cb06)
.DEFINE mem_bunny_flags ($cb07)
.DEFINE mem_bunny_status ($cb08)
+.DEFINE mem_bunny_mana ($cb09)
+
.DEFINE mem_viewport_x ($c008)
.DEFINE mem_viewport_y ($c009)
.DEFINE mem_rng_state_1 ($c00a) ; 2 bytes
@@ -65,6 +69,7 @@
; bit 0: if dialogue box is displayed
; bit 1: dialogue box first line should be bold
; bit 2: if dialogue box text should be refreshed
+; bit 3: if side window box should be displayed
.DEFINE mem_current_mode ($c014)
.DEFINE mem_requested_mode ($c015)
@@ -209,8 +214,9 @@
.DEFINE obj_palette_normal $d3
.DEFINE obj_palette_frozen $ab
-.DEFINE lcdc_window_enabled $8d
-.DEFINE lcdc_window_disabled $87
+.DEFINE lcdc_guibg_tilemap $8d
+.DEFINE lcdc_mapbg_no_window_tilemap $87
+.DEFINE lcdc_mapbg_window_tilemap $e7
; HIGH_RAM:
;
diff --git a/entity/display.gbasm b/entity/display.gbasm
index d9baff7..69da0ab 100644
--- a/entity/display.gbasm
+++ b/entity/display.gbasm
@@ -78,6 +78,18 @@ Display_Entity:
ADD $06
LD C, A
+ .Check_Window_Overlap:
+ LD A, $mem_display_flag
+ BIT 3, A
+ JR Z, =.Check_Window_Overlap.end
+ LD A, $6f
+ CP B
+ JR NC, =.Check_Window_Overlap.end
+ LD A, $55
+ CP C
+ JP C, =.skip
+ .Check_Window_Overlap.end:
+
.ADD_MOVING_ANIMATION_OFFSET
LD A, (HL+)
diff --git a/gui.gbasm b/gui.gbasm
index cb52506..957b67d 100644
--- a/gui.gbasm
+++ b/gui.gbasm
@@ -207,7 +207,7 @@ Check_Open_Menu_button:
CALL =Init_Menu
- LD A, $05
+ LD A, $0d
LD $mem_display_flag, A
LD A, $enum_dungeon_menu_mode
diff --git a/init.gbasm b/init.gbasm
index 283217b..798a545 100644
--- a/init.gbasm
+++ b/init.gbasm
@@ -65,7 +65,11 @@ Empty_VRAM: ; (Clear screen)
LD $reg_obj1_palette, A
Initialize_Window_GUI:
- LD HL, $9c20
+ LD A, $48
+ LD $reg_window_y, A
+ LD A, $6f
+ LD $reg_window_x, A
+ LD HL, $9d80
.top_bar_loop:
LD A, $10
LD (HL+), A
@@ -80,6 +84,11 @@ Initialize_Window_GUI:
LD DE, =Dialogue_Box_Tilemap_data
CALL =memcpy
+ LD HL, $9c00
+ LD BC, $0080
+ LD DE, =Cost_Window_Tilemap_data
+ CALL =memcpy
+
Copy_OAM_DMA_Transfer_Routine_To_HRAM:
LD HL, $OAM_DMA_Transfer_routine
LD DE, =OAM_DMA_Transfer_routine_src
diff --git a/main.gbasm b/main.gbasm
index 6f2dc5c..b676844 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -13,21 +13,27 @@
$HBlank_Wait.End:
.END
-.MACRODEF ENABLE_WINDOW_NO_WAIT_HBLANK
+.MACRODEF ENABLE_TOP_BAR
XOR A
LD $reg_viewport_x, A
+ LD A, $57
LD $reg_viewport_y, A
- LD A, $lcdc_window_enabled
+ LD A, $lcdc_guibg_tilemap
LD $reg_lcd_controller, A
.END
-.MACRODEF ENABLE_WINDOW
+.MACRODEF ENABLE_DIALOGUE
.HBLANK_WAIT
- .ENABLE_WINDOW_NO_WAIT_HBLANK
+ XOR A
+ LD $reg_viewport_x, A
+ LD $reg_viewport_y, A
+
+ LD A, $lcdc_guibg_tilemap
+ LD $reg_lcd_controller, A
.END
-.MACRODEF DISABLE_WINDOW
+.MACRODEF DISABLE_DIALOGUE_NO_WINDOW
PUSH BC
LD A, $mem_prepared_viewport_x
LD B, A
@@ -40,7 +46,25 @@
LD $reg_viewport_y, A
LD A, $mem_prepared_color_palette
LD $reg_bg_palette, A
- LD A, $lcdc_window_disabled
+ LD A, $lcdc_mapbg_no_window_tilemap
+ LD $reg_lcd_controller, A
+ POP BC
+.END
+
+.MACRODEF DISABLE_DIALOGUE_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_window_tilemap
LD $reg_lcd_controller, A
POP BC
.END
@@ -101,9 +125,13 @@ New_Dungeon:
; Heart
LD A, $68
- LD ($9c02), A
+ LD ($9d62), A
- .ENABLE_WINDOW_NO_WAIT_HBLANK
+ ; Energy points
+ LD A, $6a
+ LD ($9d66), A
+
+ .ENABLE_TOP_BAR
.ENABLE_VBLANK_INTERRUPTS
EI
Wait_for_Interrupt.loop:
@@ -112,14 +140,17 @@ New_Dungeon:
JP =Wait_for_Interrupt.loop
VBLANK_Entrypoint:
- .ENABLE_WINDOW_NO_WAIT_HBLANK
+ .ENABLE_TOP_BAR
LD A, $palette_bold_font
LD $reg_bg_palette, A
- LD HL, $9c12
+ LD HL, $9d72
LD A, $dbg_VBLANK_STATE
CALL =Print_8bit
+ LD HL, $9c43
+ LD A, $dbg_VBLANK_STATE
+ CALL =Print_8bit_Thin
CALL $OAM_DMA_Transfer_routine
CALL =Loading_Mode_VBlank
@@ -127,15 +158,18 @@ VBLANK_Entrypoint:
LD A, $mem_current_mode
CP $enum_dungeon_mode
JR NZ, =Skip_VBlank_Dungeon_Update
- LD HL, $9c00
+ LD HL, $9d60
LD A, $mem_bunny_health
CALL =Print_8bit
+ LD HL, $9d64
+ LD A, $mem_bunny_mana
+ CALL =Print_8bit
+
CALL =Display_Prepared_Block
CALL =Display_Object
Skip_VBlank_Dungeon_Update:
-
CALL =Copy_Dialogue_Buffer
CALL =Display_dialogue_cursor
@@ -144,7 +178,7 @@ VBLANK_Entrypoint:
LD $dbg_VBLANK_STATE, A
; LYC
- LD A, $09
+ LD A, $0a
LD $reg_lyc, A
.ENABLE_LYC_INTERRUPT
.RESET_STAT_INTERRUPT
@@ -186,23 +220,23 @@ VBLANK_Entrypoint:
STAT_Entrypoint:
PUSH AF
LD A, $reg_lyc
- CP $09
- JR Z, =STAT_.End_Top_Bar
+ CP $0a
+ JR Z, =.End_Top_Bar
CP $67
- JR Z, =STAT_.Start_dialogue
- STAT_.Thin_font:
+ JR Z, =.Start_dialogue
+ .Thin_font:
LD A, $palette_thin_font
LD $reg_bg_palette, A
- JR =STAT_.skip_dialogue
+ JR =.skip_dialogue
- STAT_.Start_dialogue:
+ .Start_dialogue:
LD A, $mem_display_flag
BIT 0, A
- JR Z, =STAT_.skip_dialogue
- .ENABLE_WINDOW
+ JR Z, =.skip_dialogue
+ .ENABLE_DIALOGUE
LD A, $mem_display_flag
BIT 1, A
- JR Z, =STAT_.Thin_font
+ JR Z, =.Thin_font
LD A, $palette_bold_font
LD $reg_bg_palette, A
LD A, $77
@@ -211,13 +245,22 @@ STAT_Entrypoint:
POP AF
RETI
- STAT_.skip_dialogue:
+ .skip_dialogue:
.DISABLE_LYC_INTERRUPT
POP AF
RET
- STAT_.End_Top_Bar:
- .DISABLE_WINDOW
+ .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:
LD A, $67
LD $reg_lyc, A
.RESET_STAT_INTERRUPT
diff --git a/scripts/generate-tiledata.py b/scripts/generate-tiledata.py
index 547e9e5..2562e73 100644
--- a/scripts/generate-tiledata.py
+++ b/scripts/generate-tiledata.py
@@ -28,6 +28,8 @@ print("\n\t; Heart")
get_sprite_png_parse_output("./sprites/gui/heart.png")
print("\n\t; Cursor")
get_sprite_png_parse_output("./sprites/gui/cursor.png")
+print("\n\t; Energy")
+get_sprite_png_parse_output("./sprites/gui/energy-points.png")
sprite_idx = 0x80
print("\nFont_Data:")
diff --git a/sprites/font.png b/sprites/font.png
index ea05ca9..ff62605 100644
--- a/sprites/font.png
+++ b/sprites/font.png
Binary files differ
diff --git a/sprites/gui/energy-points.png b/sprites/gui/energy-points.png
new file mode 100644
index 0000000..ed628a1
--- /dev/null
+++ b/sprites/gui/energy-points.png
Binary files differ
diff --git a/sprites/gui/heart.png b/sprites/gui/heart.png
index cd787da..9509acf 100644
--- a/sprites/gui/heart.png
+++ b/sprites/gui/heart.png
Binary files differ
diff --git a/tiles.gbasm b/tiles.gbasm
index c9489ea..449f9b9 100644
--- a/tiles.gbasm
+++ b/tiles.gbasm
@@ -6,7 +6,7 @@ Load_Tile:
LD HL, $8800
LD DE, =Font_Data
- LD BC, $2b0
+ LD BC, $3a0
CALL =memcpy
LD HL, $9100
@@ -16,7 +16,7 @@ Load_Tile:
LD HL, $9200
LD DE, =BG_Tile_Image_Data
- LD BC, $04a0
+ LD BC, $04b0
CALL =memcpy
LD HL, $8600
@@ -83,3 +83,9 @@ Dialogue_Box_Tilemap_data:
.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
+
+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
+ .DB 0x15, 0xab, 0xac, 0xad, 0xae, 0xaf, 0x16, 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
+ .DB 0x15, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x16, 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
+ .DB 0x12, 0x18, 0x18, 0x18, 0x18, 0x18, 0x14, 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/tileset.gbasm b/tileset.gbasm
index 27150f8..204b13e 100644
--- a/tileset.gbasm
+++ b/tileset.gbasm
@@ -90,11 +90,14 @@ BG_Tile_Image_Data:
Small_sprites:
; Heart
- .DB $00, $00, $6c, $6c, $fe, $fe, $fe, $fe, $7c, $7c, $38, $38, $10, $10, $00, $00 ; 0x68
+ .DB $00, $00, $6c, $6c, $fe, $92, $fe, $82, $7c, $44, $38, $28, $10, $10, $00, $00 ; 0x68
; Cursor
.DB $00, $00, $60, $60, $78, $78, $7e, $7e, $7e, $7e, $78, $78, $60, $60, $00, $00 ; 0x69
+ ; Energy
+ .DB $70, $70, $f8, $88, $fe, $be, $ff, $91, $ff, $b5, $ff, $81, $7e, $76, $08, $08 ; 0x6a
+
Font_Data:
.DB $00, $00, $38, $3c, $44, $46, $44, $46, $44, $46, $44, $46, $38, $3c, $00, $00 ; 0x80
.DB $00, $00, $10, $18, $30, $38, $10, $18, $10, $18, $10, $18, $7c, $7e, $00, $00 ; 0x81
@@ -124,7 +127,7 @@ Font_Data:
.DB $00, $00, $78, $7c, $44, $46, $44, $46, $78, $7c, $40, $40, $40, $40, $00, $00 ; 0x99
.DB $00, $00, $38, $3c, $44, $46, $44, $46, $54, $56, $4c, $4e, $3c, $3c, $00, $02 ; 0x9a
.DB $00, $00, $78, $7c, $44, $46, $44, $46, $78, $7c, $44, $46, $44, $46, $00, $00 ; 0x9b
- .DB $00, $00, $3c, $3e, $60, $60, $38, $3c, $04, $06, $04, $06, $78, $7c, $00, $00 ; 0x9c
+ .DB $00, $00, $3c, $3e, $40, $60, $38, $3c, $04, $06, $04, $06, $78, $7c, $00, $00 ; 0x9c
.DB $00, $00, $7c, $7e, $10, $18, $10, $18, $10, $18, $10, $18, $10, $18, $00, $00 ; 0x9d
.DB $00, $00, $44, $46, $44, $46, $44, $46, $44, $46, $44, $46, $38, $3c, $00, $00 ; 0x9e
.DB $00, $00, $44, $46, $44, $46, $44, $46, $28, $2c, $28, $2c, $10, $18, $00, $00 ; 0x9f
@@ -139,6 +142,21 @@ Font_Data:
.DB $00, $00, $10, $18, $10, $18, $20, $30, $00, $00, $00, $00, $00, $00, $00, $00 ; 0xa8
.DB $00, $00, $28, $2c, $28, $2c, $28, $2c, $00, $00, $00, $00, $00, $00, $00, $00 ; 0xa9
.DB $00, $00, $00, $18, $10, $18, $00, $00, $00, $00, $10, $18, $00, $18, $00, $00 ; 0xaa
+ .DB $00, $00, $3c, $3c, $40, $40, $40, $40, $40, $40, $40, $40, $3c, $3c, $00, $00 ; 0xab
+ .DB $00, $00, $38, $38, $44, $44, $44, $44, $44, $44, $44, $44, $38, $38, $00, $00 ; 0xac
+ .DB $00, $00, $3c, $3c, $40, $40, $38, $38, $04, $04, $04, $04, $78, $78, $00, $00 ; 0xad
+ .DB $00, $00, $7c, $7c, $10, $10, $10, $10, $10, $10, $10, $10, $10, $10, $00, $00 ; 0xae
+ .DB $00, $00, $00, $00, $10, $10, $00, $00, $00, $00, $10, $10, $00, $00, $00, $00 ; 0xaf
+ .DB $00, $00, $38, $38, $44, $44, $44, $44, $44, $44, $44, $44, $38, $38, $00, $00 ; 0xb0
+ .DB $00, $00, $10, $10, $30, $30, $10, $10, $10, $10, $10, $10, $7c, $7c, $00, $00 ; 0xb1
+ .DB $00, $00, $38, $38, $44, $44, $04, $04, $18, $18, $20, $20, $7c, $7c, $00, $00 ; 0xb2
+ .DB $00, $00, $78, $78, $04, $04, $38, $38, $04, $04, $04, $04, $78, $78, $00, $00 ; 0xb3
+ .DB $00, $00, $08, $08, $18, $18, $28, $28, $48, $48, $7c, $7c, $08, $08, $00, $00 ; 0xb4
+ .DB $00, $00, $78, $78, $40, $40, $78, $78, $04, $04, $04, $04, $78, $78, $00, $00 ; 0xb5
+ .DB $00, $00, $38, $38, $40, $40, $78, $78, $44, $44, $44, $44, $38, $38, $00, $00 ; 0xb6
+ .DB $00, $00, $7c, $7c, $04, $04, $08, $08, $10, $10, $10, $10, $10, $10, $00, $00 ; 0xb7
+ .DB $00, $00, $38, $38, $44, $44, $38, $38, $44, $44, $44, $44, $38, $38, $00, $00 ; 0xb8
+ .DB $00, $00, $38, $38, $44, $44, $44, $44, $3c, $3c, $04, $04, $38, $38, $00, $00 ; 0xb9
OBJ_Tile_Image_Data:
diff --git a/utils.gbasm b/utils.gbasm
index 8291ac2..4f7e7f7 100644
--- a/utils.gbasm
+++ b/utils.gbasm
@@ -145,6 +145,25 @@ Print_8bit: ; Number in A, Memory Tilemap position in HL
POP AF
RET
+Print_8bit_Thin: ; Number in A, Memory Tilemap position in HL
+ PUSH AF
+ PUSH BC
+
+ LD C, A
+ SWAP A ; We start by the highest nibble
+ AND $0f
+ OR $b0
+ LD (HL+), A
+
+ LD A, C
+ AND $0f ; Then the lowest
+ OR $b0
+ LD (HL+), A
+
+ POP BC
+ POP AF
+ RET
+
Print_str: ; Memory Tilemap position in HL, Text address in BC, FF ended
PUSH AF
PUSH BC