aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAstatin <[email protected]>2024-11-29 18:11:43 +0900
committerAstatin <[email protected]>2024-11-29 18:11:43 +0900
commit20422f9a4a180f2c148d93e68930f57379311ca7 (patch)
tree9e58002ad6bd9bd0b6243828f55aa03e1c6c9ab7
parentc050a27b278df2efb4baf81b5e8c7e2f7dfd7e00 (diff)
Add animation display
-rw-r--r--animation.gbasm103
-rw-r--r--attacks.gbasm1
-rw-r--r--attacks/heal.gbasm25
-rw-r--r--definitions.gbasm12
-rw-r--r--dialogues.gbasm2
-rw-r--r--dialogues.gbtxt2
-rw-r--r--entity/display.gbasm76
-rw-r--r--gui.gbasm2
-rw-r--r--init.gbasm1
-rw-r--r--main.gbasm12
-rw-r--r--scripts/generate-tiledata.py6
-rw-r--r--sprites/animations/sparkle1.pngbin0 -> 184 bytes
-rw-r--r--sprites/animations/sparkle2.pngbin0 -> 159 bytes
-rw-r--r--tiles.gbasm5
-rw-r--r--tileset.gbasm8
-rw-r--r--utils.gbasm68
16 files changed, 249 insertions, 74 deletions
diff --git a/animation.gbasm b/animation.gbasm
new file mode 100644
index 0000000..eed1923
--- /dev/null
+++ b/animation.gbasm
@@ -0,0 +1,103 @@
+Display_Animation_List:
+ LD HL, $mem_animation_list
+ CALL =Display_Animation
+ CALL =Display_Animation
+ CALL =Display_Animation
+ JP =Display_Animation
+
+Display_Animation:
+ PUSH HL
+
+ LD A, (HL)
+ LD BC, =Animation_Jump_table
+ .JUMP_TABLE
+
+ POP HL
+ LD A, L
+ ADD $04
+ LD L, A
+
+ RET
+
+Animation_Jump_table:
+ ; 00
+ RET
+ NOP
+ NOP
+ NOP
+
+ ; 01
+ JP =Sparkle_Animation
+ NOP
+
+Sparkle_Animation:
+ INC HL
+
+ LD A, (HL+)
+ ADD $80
+ LD D, A
+ LD A, $mem_viewport_x
+ LD B, A
+ SUB $82
+ CP D
+ RET NC
+ ADD $0e
+ CP D
+ RET C
+ LD A, D
+ SUB $80
+ SUB B
+ AND $0f
+ SWAP A
+ LD B, A
+
+
+ LD A, (HL+)
+ ADD $80
+ LD D, A
+ LD A, $mem_viewport_y
+ LD C, A
+ SUB $82
+ CP D
+ RET NC
+ ADD $0d
+ CP D
+ RET C
+ LD A, D
+ SUB $80
+ SUB C
+ AND $0f
+ SWAP A
+ ADD $06
+ LD C, A
+
+ LD E, (HL)
+ INC E
+ LD (HL), E
+
+ .ADD_MOVING_ANIMATION_OFFSET
+
+ PUSH HL
+ LD HL, $mem_oam_buffer
+ LD A, $mem_oam_buffer_low
+ LD L, A
+ ADD $04
+ LD $mem_oam_buffer_low, A
+
+ LD A, C
+ LD (HL+), A
+ LD A, B
+ LD (HL+), A
+ LD A, E
+ SRA A
+ SRA A
+ AND $02
+ ADD $60
+
+ LD (HL+), A
+ LD A, $10
+ LD (HL+), A
+
+ POP HL
+
+ RET
diff --git a/attacks.gbasm b/attacks.gbasm
index 03c6f66..ae836d2 100644
--- a/attacks.gbasm
+++ b/attacks.gbasm
@@ -76,3 +76,4 @@ Canceled_Attack:
RET
.INCLUDE "attacks/hop.gbasm"
+.INCLUDE "attacks/heal.gbasm"
diff --git a/attacks/heal.gbasm b/attacks/heal.gbasm
new file mode 100644
index 0000000..fd4bf6f
--- /dev/null
+++ b/attacks/heal.gbasm
@@ -0,0 +1,25 @@
+Heal_Attack:
+ LD A, $mem_bunny_direction
+ AND $07
+ LD $mem_bunny_direction, A
+
+ LD A, $mem_bunny_health
+ ADD $03
+ DAA
+ CP $20
+ JR C, =Heal_Attack.Set_health
+ LD A, $20
+ Heal_Attack.Set_health:
+ LD $mem_bunny_health, A
+
+ LD A, $enum_dungeon_mode
+ LD $mem_requested_mode, A
+ LD $mem_current_mode, A
+
+ LD A, $00
+ LD $mem_display_flag, A
+
+ LD A, $mem_map_loading_flags
+ SET 3, A
+ LD $mem_map_loading_flags, A
+ RET
diff --git a/definitions.gbasm b/definitions.gbasm
index d122f42..86a99f2 100644
--- a/definitions.gbasm
+++ b/definitions.gbasm
@@ -7,6 +7,7 @@
.DEFINE reg_viewport_x ($43)
.DEFINE reg_bg_palette ($47)
.DEFINE reg_obj0_palette ($48)
+.DEFINE reg_obj1_palette ($49)
.DEFINE reg_interrupt_enable ($ff)
.DEFINE VRAM_start $8000
@@ -125,6 +126,7 @@
.DEFINE mem_oam_buffer $ca00 ; Until $ca9f
.DEFINE mem_oam_buffer_high $ca
+.DEFINE mem_oam_buffer_low ($c980)
.DEFINE dialogue_buffer $caa0 ; Until $cad6
.DEFINE dialogue_first_line $caa0
@@ -141,6 +143,16 @@
.DEFINE dialogue_menu_choice3_cursor ($cac4)
.DEFINE dialogue_menu_choice4_cursor ($cacd)
+.DEFINE mem_last_animation_low_pointer ($cadf)
+
+.DEFINE mem_animation_list $cae0; Until $caef
+; struct animation {
+; jump_table_index: u8,
+; x: u8,
+; y: u8,
+; step: u8,
+; }
+
.DEFINE mem_entities_list $cb00 ; Until cbff
; struct entity {
; sprite: u8,
diff --git a/dialogues.gbasm b/dialogues.gbasm
index 9a9aa1c..66e5c0b 100644
--- a/dialogues.gbasm
+++ b/dialogues.gbasm
@@ -5,7 +5,7 @@ Text_1:
Menu_Choice_1:
.DB 0x91, 0x98, 0x99, 0xff
Menu_Choice_2:
-.DB 0x9c, 0x9d, 0x8a, 0x96, 0x99, 0xff
+.DB 0x91, 0x8e, 0x8a, 0x95, 0xff
Menu_Choice_3:
.DB 0x8f, 0x9b, 0x8e, 0x8e, 0xa3, 0x8e, 0xff
Menu_Choice_4:
diff --git a/dialogues.gbtxt b/dialogues.gbtxt
index d9b5942..23676d8 100644
--- a/dialogues.gbtxt
+++ b/dialogues.gbtxt
@@ -1,6 +1,6 @@
Bunny_Prefix: Bunny:
Text_1: Hello !
Menu_Choice_1: Hop
-Menu_Choice_2: Stamp
+Menu_Choice_2: Heal
Menu_Choice_3: Freeze
Menu_Choice_4: Earcoptr
diff --git a/entity/display.gbasm b/entity/display.gbasm
index 934d02f..80c1140 100644
--- a/entity/display.gbasm
+++ b/entity/display.gbasm
@@ -1,6 +1,4 @@
Display_Entities:
- LD A, $00
- LD $tmp_var_1, A
LD HL, $mem_entities_list
CALL =Display_Entity
CALL =Display_Entity
@@ -21,11 +19,11 @@ Display_Entities:
LD BC, $00a0
LD HL, $mem_oam_buffer
- LD A, $tmp_var_1
+ LD A, $mem_oam_buffer_low
ADD L
LD L, A
- LD A, $tmp_var_1
+ LD A, $mem_oam_buffer_low
XOR $ff
INC A
ADD C
@@ -80,71 +78,7 @@ Display_Entity:
ADD $06
LD C, A
- LD A, $mem_map_loading_flags
- BIT 3, A
- JR Z, =Display_Entity.Viewport_offset_end
- LD A, $mem_bunny_direction
- BIT 3, A
- JR Z, =Display_Entity.Viewport_offset_end
- LD A, $mem_bunny_direction
- AND $07
- CP $enum_direction_down
- JR Z, =Display_Entity.Viewport_offset_down
- CP $enum_direction_right
- JR Z, =Display_Entity.Viewport_offset_right
- CP $enum_direction_up
- JR Z, =Display_Entity.Viewport_offset_up
-
- Display_Entity.Viewport_offset_left:
- LD A, $mem_prepared_viewport_x
- SUB $09
- AND $0f
- INC A
- XOR $ff
- INC A
- ADD $10
- ADD B
-
- LD B, A
- JR =Display_Entity.Viewport_offset_end
-
- Display_Entity.Viewport_offset_right:
- LD A, $mem_prepared_viewport_x
- SUB $08
- AND $0f
- XOR $ff
- INC A
- ADD B
-
- LD B, A
-
- JR =Display_Entity.Viewport_offset_end
-
- Display_Entity.Viewport_offset_up:
- LD A, $mem_prepared_viewport_y
- SUB $09
- AND $0f
- INC A
- XOR $ff
- INC A
- ADD $10
- ADD C
-
- LD C, A
-
- JR =Display_Entity.Viewport_offset_end
-
- Display_Entity.Viewport_offset_down:
- LD A, $mem_prepared_viewport_y
- SUB $08
- AND $0f
- XOR $ff
- INC A
- ADD C
-
- LD C, A
-
- Display_Entity.Viewport_offset_end:
+ .ADD_MOVING_ANIMATION_OFFSET
LD A, (HL+)
BIT 3, A
@@ -295,7 +229,7 @@ Display_Entity:
PUSH HL
; First OBJ (left)
LD HL, $mem_oam_buffer
- LD A, $tmp_var_1
+ LD A, $mem_oam_buffer_low
LD L, A
LD A, C
LD (HL+), A
@@ -323,7 +257,7 @@ Display_Entity:
LD A, D
LD (HL+), A
LD A, L
- LD $tmp_var_1, A
+ LD $mem_oam_buffer_low, A
POP HL
Display_Entity.skip:
diff --git a/gui.gbasm b/gui.gbasm
index 157cded..6406536 100644
--- a/gui.gbasm
+++ b/gui.gbasm
@@ -41,7 +41,7 @@ Init_Menu:
LD A, C
LD (HL+), A
- LD BC, =Stairs_action
+ LD BC, =Heal_Attack
LD A, B
LD (HL+), A
LD A, C
diff --git a/init.gbasm b/init.gbasm
index c36af82..e382510 100644
--- a/init.gbasm
+++ b/init.gbasm
@@ -54,6 +54,7 @@ Empty_VRAM: ; (Clear screen)
; BG Palette
LD A, $e4
LD $reg_bg_palette, A
+ LD $reg_obj1_palette, A
; OBJ0 Palette
LD A, $d3 ; $e4
diff --git a/main.gbasm b/main.gbasm
index 385d4cd..02b6e94 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -83,6 +83,13 @@ New_Dungeon:
CALL =Load_Map
CALL =Load_Objects
+ LD HL, $mem_animation_list
+ LD A, $01
+ LD (HL+), A
+ LD A, $10
+ LD (HL+), A
+ LD (HL+), A
+
LD A, $00
LD $mem_display_flag, A
@@ -148,6 +155,10 @@ VBLANK_Entrypoint:
CALL =Check_Open_Menu_button
CALL =Move_dialogue_cursor
CALL =Check_dialogue_action
+
+ LD A, $00
+ LD $mem_oam_buffer_low, A
+ CALL =Display_Animation_List
CALL =Display_Entities
.ENABLE_VBLANK_INTERRUPTS
@@ -207,6 +218,7 @@ STAT_Entrypoint:
.INCLUDE "entity/actions.gbasm"
.INCLUDE "entity/collisions.gbasm"
.INCLUDE "entity/display.gbasm"
+.INCLUDE "animation.gbasm"
.INCLUDE "attacks.gbasm"
.INCLUDE "gui.gbasm"
.INCLUDE "tileset.gbasm"
diff --git a/scripts/generate-tiledata.py b/scripts/generate-tiledata.py
index 13e7295..88b0b85 100644
--- a/scripts/generate-tiledata.py
+++ b/scripts/generate-tiledata.py
@@ -48,3 +48,9 @@ print("\n\t; Fox back")
get_sprite_png_parse_output("./sprites/fox/fox-back.png", tallmode=True)
print("\n\t; Fox front")
get_sprite_png_parse_output("./sprites/fox/fox-front.png", tallmode=True)
+
+sprite_idx = 0x60
+print("\nAnimation_Sprites_Data:")
+print("\n\t; Sparkles")
+get_sprite_png_parse_output("./sprites/animations/sparkle1.png", tallmode=True)
+get_sprite_png_parse_output("./sprites/animations/sparkle2.png", tallmode=True)
diff --git a/sprites/animations/sparkle1.png b/sprites/animations/sparkle1.png
new file mode 100644
index 0000000..3e552c5
--- /dev/null
+++ b/sprites/animations/sparkle1.png
Binary files differ
diff --git a/sprites/animations/sparkle2.png b/sprites/animations/sparkle2.png
new file mode 100644
index 0000000..429c035
--- /dev/null
+++ b/sprites/animations/sparkle2.png
Binary files differ
diff --git a/tiles.gbasm b/tiles.gbasm
index b5da2a3..35262bc 100644
--- a/tiles.gbasm
+++ b/tiles.gbasm
@@ -17,6 +17,11 @@ Load_Tile:
LD DE, =BG_Tile_Image_Data
LD BC, $04a0
CALL =memcpy
+
+ LD HL, $8600
+ LD DE, =Animation_Sprites_Data
+ LD BC, $0040
+ CALL =memcpy
RET
Dialogue_Box_Tilemap_data:
diff --git a/tileset.gbasm b/tileset.gbasm
index 7b745c9..967a38b 100644
--- a/tileset.gbasm
+++ b/tileset.gbasm
@@ -177,3 +177,11 @@ OBJ_Tile_Image_Data:
.DB $0f, $0c, $13, $1f, $10, $1f, $1b, $1f, $1f, $1b, $0f, $0b, $0f, $0b, $0c, $0c ; 0x17
.DB $00, $00, $8e, $8e, $de, $d2, $de, $d2, $7e, $e2, $46, $fa, $e2, $be, $e2, $3e ; 0x18
.DB $c2, $fe, $22, $fe, $24, $fc, $64, $fc, $dc, $5c, $c0, $40, $c0, $40, $c0, $c0 ; 0x19
+
+Animation_Sprites_Data:
+
+ ; Sparkles
+ .DB $00, $00, $44, $10, $10, $28, $38, $44, $10, $28, $44, $10, $00, $00, $00, $00 ; 0x60
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0x61
+ .DB $00, $10, $00, $10, $10, $28, $38, $c6, $10, $28, $00, $10, $00, $10, $00, $00 ; 0x62
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0x63
diff --git a/utils.gbasm b/utils.gbasm
index b24608b..b32d3ea 100644
--- a/utils.gbasm
+++ b/utils.gbasm
@@ -58,6 +58,74 @@ bzero: ; dest = HL, n = BC
.CALL_DE
.END
+.MACRODEF ADD_MOVING_ANIMATION_OFFSET ; Add current moving animation offset to BC, also uses A
+ LD A, $mem_map_loading_flags
+ BIT 3, A
+ JR Z, =$end
+ LD A, $mem_bunny_direction
+ BIT 3, A
+ JR Z, =$end
+ LD A, $mem_bunny_direction
+ AND $07
+ CP $enum_direction_down
+ JR Z, =$down
+ CP $enum_direction_right
+ JR Z, =$right
+ CP $enum_direction_up
+ JR Z, =$up
+
+ $left:
+ LD A, $mem_prepared_viewport_x
+ SUB $09
+ AND $0f
+ INC A
+ XOR $ff
+ INC A
+ ADD $10
+ ADD B
+
+ LD B, A
+ JR =$end
+
+ $right:
+ LD A, $mem_prepared_viewport_x
+ SUB $08
+ AND $0f
+ XOR $ff
+ INC A
+ ADD B
+
+ LD B, A
+
+ JR =$end
+
+ $up:
+ LD A, $mem_prepared_viewport_y
+ SUB $09
+ AND $0f
+ INC A
+ XOR $ff
+ INC A
+ ADD $10
+ ADD C
+
+ LD C, A
+
+ JR =$end
+
+ $down:
+ LD A, $mem_prepared_viewport_y
+ SUB $08
+ AND $0f
+ XOR $ff
+ INC A
+ ADD C
+
+ LD C, A
+
+ $end:
+.END
+
Print_8bit: ; Number in A, Memory Tilemap position in HL
PUSH AF
PUSH BC