diff options
author | Astatin <[email protected]> | 2024-11-29 18:11:43 +0900 |
---|---|---|
committer | Astatin <[email protected]> | 2024-11-29 18:11:43 +0900 |
commit | 20422f9a4a180f2c148d93e68930f57379311ca7 (patch) | |
tree | 9e58002ad6bd9bd0b6243828f55aa03e1c6c9ab7 | |
parent | c050a27b278df2efb4baf81b5e8c7e2f7dfd7e00 (diff) |
Add animation display
-rw-r--r-- | animation.gbasm | 103 | ||||
-rw-r--r-- | attacks.gbasm | 1 | ||||
-rw-r--r-- | attacks/heal.gbasm | 25 | ||||
-rw-r--r-- | definitions.gbasm | 12 | ||||
-rw-r--r-- | dialogues.gbasm | 2 | ||||
-rw-r--r-- | dialogues.gbtxt | 2 | ||||
-rw-r--r-- | entity/display.gbasm | 76 | ||||
-rw-r--r-- | gui.gbasm | 2 | ||||
-rw-r--r-- | init.gbasm | 1 | ||||
-rw-r--r-- | main.gbasm | 12 | ||||
-rw-r--r-- | scripts/generate-tiledata.py | 6 | ||||
-rw-r--r-- | sprites/animations/sparkle1.png | bin | 0 -> 184 bytes | |||
-rw-r--r-- | sprites/animations/sparkle2.png | bin | 0 -> 159 bytes | |||
-rw-r--r-- | tiles.gbasm | 5 | ||||
-rw-r--r-- | tileset.gbasm | 8 | ||||
-rw-r--r-- | utils.gbasm | 68 |
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: @@ -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 @@ -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 @@ -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 Binary files differnew file mode 100644 index 0000000..3e552c5 --- /dev/null +++ b/sprites/animations/sparkle1.png diff --git a/sprites/animations/sparkle2.png b/sprites/animations/sparkle2.png Binary files differnew file mode 100644 index 0000000..429c035 --- /dev/null +++ b/sprites/animations/sparkle2.png 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 |