aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--definitions.gbasm5
-rw-r--r--dialogues.gbasm8
-rw-r--r--dialogues.gbtxt8
-rw-r--r--entity/init.gbasm5
-rw-r--r--gui.gbasm154
-rw-r--r--main.gbasm15
-rw-r--r--playerattacks.gbasm49
-rw-r--r--scripts/generate-tiledata.py2
-rw-r--r--sprites/gui/disabled-cursor.pngbin0 -> 126 bytes
-rw-r--r--tiles.gbasm2
-rw-r--r--tileset.gbasm3
11 files changed, 192 insertions, 59 deletions
diff --git a/definitions.gbasm b/definitions.gbasm
index 832377d..054ea4e 100644
--- a/definitions.gbasm
+++ b/definitions.gbasm
@@ -85,7 +85,7 @@
.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 dialogue_menu_choice4_routine $c01e ; Takes also $c01f
.DEFINE mem_last_button_action ($c020)
.DEFINE mem_loading_step ($c021)
@@ -111,6 +111,9 @@
.DEFINE mem_bunny_status_clear_turn_counter ($c02f)
+.DEFINE mem_bunny_attacks $c030 ; Takes the memory from c030 to c033
+.DEFINE mem_current_focused_attack_ep_cost ($c034)
+
.DEFINE mem_next_free_head_lower_bytes ($c6ff)
.DEFINE mem_dungeon_generation_heads $c700 ; Takes the memory from c700 to c717
diff --git a/dialogues.gbasm b/dialogues.gbasm
index 7ec280e..0deea6d 100644
--- a/dialogues.gbasm
+++ b/dialogues.gbasm
@@ -4,11 +4,11 @@ Text_1:
.DB 0x91, 0x8e, 0x95, 0x95, 0x98, 0x0, 0xa5, 0xff
Debug_Text:
.DB 0x8d, 0x8b, 0x90, 0xff
-Menu_Choice_1:
+Hop_Attack_Menu_Txt:
.DB 0x91, 0x98, 0x99, 0xff
-Menu_Choice_2:
+Heal_Attack_Menu_Txt:
.DB 0x91, 0x8e, 0x8a, 0x95, 0xff
-Menu_Choice_3:
+Freeze_Attack_Menu_Txt:
.DB 0x8f, 0x9b, 0x8e, 0x8e, 0xa3, 0x8e, 0xff
-Menu_Choice_4:
+Earcoptr_Attack_Menu_Txt:
.DB 0x8e, 0x8a, 0x9b, 0x8c, 0x98, 0x99, 0x9d, 0x9b, 0xff
diff --git a/dialogues.gbtxt b/dialogues.gbtxt
index 7d42325..790b759 100644
--- a/dialogues.gbtxt
+++ b/dialogues.gbtxt
@@ -1,7 +1,7 @@
Bunny_Prefix: Bunny:
Text_1: Hello !
Debug_Text: DBG
-Menu_Choice_1: Hop
-Menu_Choice_2: Heal
-Menu_Choice_3: Freeze
-Menu_Choice_4: Earcoptr
+Hop_Attack_Menu_Txt: Hop
+Heal_Attack_Menu_Txt: Heal
+Freeze_Attack_Menu_Txt: Freeze
+Earcoptr_Attack_Menu_Txt: Earcoptr
diff --git a/entity/init.gbasm b/entity/init.gbasm
index 2bb9242..60edff6 100644
--- a/entity/init.gbasm
+++ b/entity/init.gbasm
@@ -1,4 +1,6 @@
Initialize_Entities:
+ LD A, $mem_bunny_mana
+ LD C, A
LD A, $mem_bunny_health
LD B, A
LD HL, $mem_entities_list
@@ -11,6 +13,9 @@ Initialize_Entities:
LD A, B
LD $mem_bunny_health, A
+ LD A, C
+ LD $mem_bunny_mana, A
+
LD HL, $mem_entities_list
LD A, $01
LD (HL+), A
diff --git a/gui.gbasm b/gui.gbasm
index a253a13..2e8e8f6 100644
--- a/gui.gbasm
+++ b/gui.gbasm
@@ -12,6 +12,10 @@
.END
Copy_Dialogue_Buffer:
+ LD A, $mem_current_focused_attack_ep_cost
+ LD HL, $9c43
+ CALL =Print_8bit_Thin
+
LD A, $mem_display_flag
BIT 2, A
RET Z
@@ -33,47 +37,64 @@ Copy_Dialogue_Buffer:
JP =tilemap_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, =Hop_Attack
- LD A, B
- LD (HL+), A
- LD A, C
- LD (HL+), A
-
- LD BC, =Heal_Attack
- LD A, B
- LD (HL+), A
- LD A, C
- LD (HL+), A
-
- LD BC, =Freeze_Attack
- LD A, B
- LD (HL+), A
- LD A, C
- LD (HL+), A
-
- LD BC, =Earcoptr_Attack
- LD A, B
- LD (HL+), A
- LD A, C
- LD (HL+), A
-
+ LD HL, $mem_bunny_attacks
+
+ .MACRODEF SETUP_NEXT_ATTACK_MENU dialogue_buffer choice_routine ; Attack index pointer in (HL)
+ PUSH HL
+
+ ; Getting Attack list pointer from index
+ LD E, (HL)
+ LD D, $00
+ SLA E
+ RL D
+ SLA E
+ RL D
+ SLA E
+ RL D
+
+ LD HL, =Attack_List
+ LD A, L
+ ADD E
+ LD L, A
+ LD A, H
+ ADC D
+ LD H, A
+
+ ; Printing txt into dialogue buffer
+ LD A, (HL+)
+ LD B, A
+ LD A, (HL+)
+ LD C, A
+
+ LD E, L
+ LD D, H
+ LD HL, $dialogue_buffer
+ CALL =Print_str
+ LD H, D
+ LD L, E
+
+ ; Setting up choice routine
+ LD A, (HL+)
+ LD B, A
+ LD A, (HL+)
+ LD C, A
+
+ LD D, H
+ LD E, L
+ LD HL, $choice_routine
+ LD A, B
+ LD (HL+), A
+ LD A, C
+ LD (HL), A
+
+ POP HL
+ INC HL
+ .END
+
+ .SETUP_NEXT_ATTACK_MENU $dialogue_menu_choice1, $dialogue_menu_choice1_routine
+ .SETUP_NEXT_ATTACK_MENU $dialogue_menu_choice2, $dialogue_menu_choice2_routine
+ .SETUP_NEXT_ATTACK_MENU $dialogue_menu_choice3, $dialogue_menu_choice3_routine
+ .SETUP_NEXT_ATTACK_MENU $dialogue_menu_choice4, $dialogue_menu_choice4_routine
RET
Nothing:
@@ -91,28 +112,38 @@ Display_dialogue_cursor:
LD A, $mem_current_mode
CP $enum_dungeon_menu_mode
RET NZ
+
+ LD A, $mem_current_focused_attack_ep_cost
+ LD B, A
+ LD A, $mem_bunny_mana
+ CP B
+ LD H, $69
+ JR NC, =.Skip_Disable_cursor_setting
+ LD H, $6b
+ .Skip_Disable_cursor_setting:
+
LD A, $mem_menu_cursor_position
LD BC, $0000
LD DE, $0000
CP $00
JR NZ, =.choice1_false
- LD B, $69
+ LD B, H
.choice1_false:
CP $01
JR NZ, =.choice2_false
- LD C, $69
+ LD C, H
.choice2_false:
CP $02
JR NZ, =.choice3_false
- LD D, $69
+ LD D, H
.choice3_false:
CP $03
JR NZ, =.choice4_false
- LD E, $69
+ LD E, H
.choice4_false:
LD A, B
@@ -144,12 +175,43 @@ Move_dialogue_cursor:
LD A, $mem_menu_cursor_position
XOR $02
LD $mem_menu_cursor_position, A
- RET
+ JR =Reload_EP_Cost
.Vertical_axis:
LD A, $mem_menu_cursor_position
XOR $01
LD $mem_menu_cursor_position, A
+
+Reload_EP_Cost:
+ LD A, $mem_menu_cursor_position
+ ADD low($mem_bunny_attacks)
+ LD L, A
+ LD A, high($mem_bunny_attacks)
+ ADC $00
+ LD H, A
+
+ ; Getting Attack list pointer from index
+ LD E, (HL)
+ LD D, $00
+ SLA E
+ RL D
+ SLA E
+ RL D
+ SLA E
+ RL D
+
+ LD HL, =Attack_List
+ LD A, L
+ ADD E
+ ADD $04
+ LD L, A
+ LD A, H
+ ADC D
+ LD H, A
+
+ LD A, (HL)
+ LD $mem_current_focused_attack_ep_cost, A
+
RET
Check_dialogue_action:
diff --git a/main.gbasm b/main.gbasm
index e09949c..c3edbcf 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -93,6 +93,8 @@ Entrypoint:
CALL =Initialize_RNG
LD A, $20
LD $mem_bunny_health, A
+ LD A, $3
+ LD $mem_bunny_mana, A
New_Dungeon:
LD SP, $fffe
LD HL, $mem_loaded_enemies_indices
@@ -102,6 +104,16 @@ New_Dungeon:
LD (HL+), A
LD A, $03
LD (HL+), A
+ LD HL, $mem_bunny_attacks
+ LD A, $00
+ LD (HL+), A
+ INC A
+ LD (HL+), A
+ INC A
+ LD (HL+), A
+ INC A
+ LD (HL+), A
+ CALL =Reload_EP_Cost
CALL =Dungeon_Generation
CALL =Initialize_Entities
CALL =Initialize_Objects
@@ -145,9 +157,6 @@ VBLANK_Entrypoint:
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
diff --git a/playerattacks.gbasm b/playerattacks.gbasm
index 6f1eead..2257e54 100644
--- a/playerattacks.gbasm
+++ b/playerattacks.gbasm
@@ -73,6 +73,55 @@ Canceled_Attack:
LD $mem_bunny_direction, A
RET
+Attack_List:
+ .Hop:
+ ; Attack menu name string
+ .DB =Hop_Attack_Menu_Txt
+
+ ; Attack function
+ .DB =Hop_Attack
+
+ ; Energy point cost
+ .DB $01
+
+ .PADTO =.Hop+8
+
+ .Heal:
+ ; Attack menu name string
+ .DB =Heal_Attack_Menu_Txt
+
+ ;Attack function
+ .DB =Heal_Attack
+
+ ; Energy point cost
+ .DB $03
+
+ .PADTO =.Heal+8
+
+ .Freeze:
+ ; Attack menu name string
+ .DB =Freeze_Attack_Menu_Txt
+
+ ; Attack function
+ .DB =Freeze_Attack
+
+ ; Energy point cost
+ .DB $03
+
+ .PADTO =.Freeze+8
+
+ .Earcoptr:
+ ; Attack menu name string
+ .DB =Earcoptr_Attack_Menu_Txt
+
+ ; Attack function
+ .DB =Earcoptr_Attack
+
+ ; Energy point cost
+ .DB $04
+
+ .PADTO =.Earcoptr+8
+
.INCLUDE "playerattacks/hop.gbasm"
.INCLUDE "playerattacks/heal.gbasm"
.INCLUDE "playerattacks/freeze.gbasm"
diff --git a/scripts/generate-tiledata.py b/scripts/generate-tiledata.py
index 2562e73..a743261 100644
--- a/scripts/generate-tiledata.py
+++ b/scripts/generate-tiledata.py
@@ -30,6 +30,8 @@ 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")
+print("\n\t; Disabled Cursor")
+get_sprite_png_parse_output("./sprites/gui/disabled-cursor.png")
sprite_idx = 0x80
print("\nFont_Data:")
diff --git a/sprites/gui/disabled-cursor.png b/sprites/gui/disabled-cursor.png
new file mode 100644
index 0000000..6364522
--- /dev/null
+++ b/sprites/gui/disabled-cursor.png
Binary files differ
diff --git a/tiles.gbasm b/tiles.gbasm
index da3d821..0ef0425 100644
--- a/tiles.gbasm
+++ b/tiles.gbasm
@@ -16,7 +16,7 @@ Load_Tile:
LD HL, $9200
LD DE, =BG_Tile_Image_Data
- LD BC, $04b0
+ LD BC, $04c0
CALL =memcpy
LD HL, $8600
diff --git a/tileset.gbasm b/tileset.gbasm
index 204b13e..7c950a4 100644
--- a/tileset.gbasm
+++ b/tileset.gbasm
@@ -98,6 +98,9 @@ Small_sprites:
; Energy
.DB $70, $70, $f8, $88, $fe, $be, $ff, $91, $ff, $b5, $ff, $81, $7e, $76, $08, $08 ; 0x6a
+ ; Disabled Cursor
+ .DB $00, $00, $22, $00, $36, $00, $1c, $00, $1c, $00, $36, $00, $22, $00, $00, $00 ; 0x6b
+
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