diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | attacks.gbasm | 188 | ||||
-rw-r--r-- | attacks/hop.gbasm | 188 | ||||
-rw-r--r-- | definitions.gbasm | 12 | ||||
-rw-r--r-- | entity/display.gbasm | 23 | ||||
-rw-r--r-- | gui.gbasm | 10 | ||||
-rw-r--r-- | main.gbasm | 4 |
7 files changed, 281 insertions, 146 deletions
@@ -13,7 +13,7 @@ build/main.rom: main.gbasm tileset.gbasm dialogues.gbasm gbasm $< $@ run: build/main.rom - gb $< + gb $< sameboy: build/main.rom sameboy build/main.rom diff --git a/attacks.gbasm b/attacks.gbasm index 607bbf9..03c6f66 100644 --- a/attacks.gbasm +++ b/attacks.gbasm @@ -1,158 +1,78 @@ -Preload_Map_Hop: - LD A, $mem_loading_step - LD C, A - ; Getting the +1/-1 value of the direction to B - LD A, $mem_bunny_direction - AND $07 - DEC A - AND $01 - SLA A - DEC A - LD B, A - - LD A, $mem_bunny_direction - AND $07 - DEC A - - BIT 1, A - JR NZ, =Preload_Map_Hop.Map_Load.vertical - - Preload_Map_Hop.Map_Load.horizontal: - CALL =Load_Next_Block_Column - JR =Preload_Map_Hop.Map_Load.End - - Preload_Map_Hop.Map_Load.vertical: - CALL =Load_Next_Block_Row - - Preload_Map_Hop.Map_Load.End: -RET - -Hop_Attack_Loading_VBlank: +Loading_Mode_VBlank: LD A, $mem_current_mode CP $enum_loading_mode RET NZ - LD A, $mem_loading_step - CP $00 - JP Z, =Hop_Attack_Loading_VBlank.Skip_Display_Block - - LD A, $mem_map_loading_flags - BIT 2, A - RET Z - - CALL =Display_Prepared_Block - - LD A, $mem_prepared_loading_block_tile - LD $mem_prepared_block_tile, A - LD A, $mem_prepared_loading_block_position_1 - LD $mem_prepared_block_position_1, A - LD A, $mem_prepared_loading_block_position_2 - LD $mem_prepared_block_position_2, A - - LD A, $mem_map_loading_flags - SET 2, A - LD $mem_map_loading_flags, A - - CALL =Display_Prepared_Block - - LD A, $mem_bunny_direction - AND $07 - LD D, A - LD A, $mem_viewport_x + LD A, $mem_loading_mode_vblank_func_pointer_high LD B, A - LD A, $mem_viewport_y + LD A, $mem_loading_mode_vblank_func_pointer_low LD C, A - LD A, $02 - .ADD_A_TO_DIRECTION_BC - LD A, B - LD $mem_viewport_x, A - LD A, C - LD $mem_viewport_y, A + PUSH BC + RET - CALL =Display_Object +Loading_Mode_Regular: + LD A, $mem_current_mode + CP $enum_loading_mode + RET NZ - LD A, $mem_bunny_direction - AND $07 - LD D, A - LD A, $mem_viewport_x + LD A, $mem_loading_mode_regular_func_pointer_high LD B, A - LD A, $mem_viewport_y + LD A, $mem_loading_mode_regular_func_pointer_low LD C, A - LD A, $FE - .ADD_A_TO_DIRECTION_BC - LD A, B - LD $mem_viewport_x, A - LD A, C - LD $mem_viewport_y, A - - - - Hop_Attack_Loading_VBlank.Skip_Display_Block: + PUSH BC + RET - LD A, $mem_loading_step - INC A - AND $0f - LD $mem_loading_step, A - CP $00 - RET NZ +Canceled_Attack_VBlank: + RET +Canceled_Attack_Regular: LD A, $enum_dungeon_mode - LD $mem_current_mode, A LD $mem_requested_mode, A - LD A, $mem_bunny_direction - AND $07 - OR $38 - LD $mem_bunny_direction, A - LD A, $mem_map_loading_flags - SET 3, A - LD $mem_map_loading_flags, A - LD A, $mem_bunny_flags - SET 0, A - LD $mem_bunny_flags, A RET -Hop_Attack_Loading_Regular: - LD A, $mem_current_mode - CP $enum_loading_mode - RET NZ - - CALL =Preload_Map_Hop - - LD A, $mem_prepared_block_tile - LD $mem_prepared_loading_block_tile, A - LD A, $mem_prepared_block_position_1 - LD $mem_prepared_loading_block_position_1, A - LD A, $mem_prepared_block_position_2 - LD $mem_prepared_loading_block_position_2, A +Canceled_Attack: + LD HL, $mem_entities_list + LD A, L + ADD $13 + LD L, A + Reset_Entities_Animations.loop: + LD A, (HL) + AND $07 + LD (HL), A + Reset_Entities_Animations.loop.next: + LD A, L + AND $f0 + ADD $13 + LD L, A + CP $03 + JR NZ, =Reset_Entities_Animations.loop + + LD BC, =Canceled_Attack_VBlank + LD A, B + LD $mem_loading_mode_vblank_func_pointer_high, A + LD A, C + LD $mem_loading_mode_vblank_func_pointer_low, A - LD A, $mem_bunny_direction - AND $07 - LD D, A - LD A, $mem_viewport_x - LD B, A - LD A, $mem_viewport_y - LD C, A - LD A, $01 - .ADD_A_TO_DIRECTION_BC + LD BC, =Canceled_Attack_Regular LD A, B - LD $mem_viewport_x, A + LD $mem_loading_mode_regular_func_pointer_high, A LD A, C - LD $mem_viewport_y, A + LD $mem_loading_mode_regular_func_pointer_low, A - CALL =Preload_Map_Hop + LD A, $enum_loading_mode + LD $mem_requested_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 LD A, $mem_bunny_direction AND $07 - LD D, A - LD A, $mem_viewport_x - LD B, A - LD A, $mem_viewport_y - LD C, A - LD A, $FF - .ADD_A_TO_DIRECTION_BC - LD A, B - LD $mem_viewport_x, A - LD A, C - LD $mem_viewport_y, A - + OR $40 + LD $mem_bunny_direction, A RET + +.INCLUDE "attacks/hop.gbasm" diff --git a/attacks/hop.gbasm b/attacks/hop.gbasm new file mode 100644 index 0000000..fdbf7f0 --- /dev/null +++ b/attacks/hop.gbasm @@ -0,0 +1,188 @@ +Preload_Map_Hop: + LD A, $mem_loading_step + LD C, A + ; Getting the +1/-1 value of the direction to B + LD A, $mem_bunny_direction + AND $07 + DEC A + AND $01 + SLA A + DEC A + LD B, A + + LD A, $mem_bunny_direction + AND $07 + DEC A + + BIT 1, A + JR NZ, =Preload_Map_Hop.Map_Load.vertical + + Preload_Map_Hop.Map_Load.horizontal: + CALL =Load_Next_Block_Column + JR =Preload_Map_Hop.Map_Load.End + + Preload_Map_Hop.Map_Load.vertical: + CALL =Load_Next_Block_Row + + Preload_Map_Hop.Map_Load.End: +RET + +Hop_Attack_Loading_VBlank: + LD A, $mem_loading_step + CP $00 + JP Z, =Hop_Attack_Loading_VBlank.Skip_Display_Block + + LD A, $mem_map_loading_flags + BIT 2, A + RET Z + + CALL =Display_Prepared_Block + + LD A, $mem_prepared_loading_block_tile + LD $mem_prepared_block_tile, A + LD A, $mem_prepared_loading_block_position_1 + LD $mem_prepared_block_position_1, A + LD A, $mem_prepared_loading_block_position_2 + LD $mem_prepared_block_position_2, A + + LD A, $mem_map_loading_flags + SET 2, A + LD $mem_map_loading_flags, A + + CALL =Display_Prepared_Block + + LD A, $mem_bunny_direction + AND $07 + LD D, A + LD A, $mem_viewport_x + LD B, A + LD A, $mem_viewport_y + LD C, A + LD A, $02 + .ADD_A_TO_DIRECTION_BC + LD A, B + LD $mem_viewport_x, A + LD A, C + LD $mem_viewport_y, A + + CALL =Display_Object + + LD A, $mem_bunny_direction + AND $07 + LD D, A + LD A, $mem_viewport_x + LD B, A + LD A, $mem_viewport_y + LD C, A + LD A, $FE + .ADD_A_TO_DIRECTION_BC + LD A, B + LD $mem_viewport_x, A + LD A, C + LD $mem_viewport_y, A + + Hop_Attack_Loading_VBlank.Skip_Display_Block: + + LD A, $mem_loading_step + INC A + AND $0f + LD $mem_loading_step, A + CP $00 + RET NZ + + LD A, $enum_dungeon_mode + LD $mem_current_mode, A + LD $mem_requested_mode, A + LD A, $mem_bunny_direction + AND $07 + OR $38 + LD $mem_bunny_direction, A + LD A, $mem_map_loading_flags + SET 3, A + LD $mem_map_loading_flags, A + LD A, $mem_bunny_flags + SET 0, A + LD $mem_bunny_flags, A + RET + +Hop_Attack_Loading_Regular: + CALL =Preload_Map_Hop + + LD A, $mem_prepared_block_tile + LD $mem_prepared_loading_block_tile, A + LD A, $mem_prepared_block_position_1 + LD $mem_prepared_loading_block_position_1, A + LD A, $mem_prepared_block_position_2 + LD $mem_prepared_loading_block_position_2, A + + LD A, $mem_bunny_direction + AND $07 + LD D, A + LD A, $mem_viewport_x + LD B, A + LD A, $mem_viewport_y + LD C, A + LD A, $01 + .ADD_A_TO_DIRECTION_BC + LD A, B + LD $mem_viewport_x, A + LD A, C + LD $mem_viewport_y, A + + CALL =Preload_Map_Hop + + LD A, $mem_bunny_direction + AND $07 + LD D, A + LD A, $mem_viewport_x + LD B, A + LD A, $mem_viewport_y + LD C, A + LD A, $FF + .ADD_A_TO_DIRECTION_BC + LD A, B + LD $mem_viewport_x, A + LD A, C + LD $mem_viewport_y, A + + RET + +Hop_Attack: + LD A, $mem_bunny_direction + AND $07 + LD D, A + + LD A, $mem_bunny_x + LD B, A + LD A, $mem_bunny_y + LD C, A + + LD A, $02 + .ADD_A_TO_DIRECTION_BC + LD A, B + LD B, C + CALL =Is_Collisionable + CALL =Carve_Entity_Collision_Map + CP $00 + JP NZ, =Canceled_Attack + + LD BC, =Hop_Attack_Loading_VBlank + LD A, B + LD $mem_loading_mode_vblank_func_pointer_high, A + LD A, C + LD $mem_loading_mode_vblank_func_pointer_low, A + + LD BC, =Hop_Attack_Loading_Regular + LD A, B + LD $mem_loading_mode_regular_func_pointer_high, A + LD A, C + LD $mem_loading_mode_regular_func_pointer_low, A + + LD A, $enum_loading_mode + LD $mem_requested_mode, A + + LD A, $00 + LD $mem_display_flag, A + RET + + diff --git a/definitions.gbasm b/definitions.gbasm index 97f1e93..0eb0a94 100644 --- a/definitions.gbasm +++ b/definitions.gbasm @@ -29,6 +29,13 @@ .DEFINE mem_bunny_y ($cb02) .DEFINE mem_bunny_direction ($cb03) ; aaaamddd: a = animation, m = is_moving, d = direction +; animations: +; nothing = 0 +; action = 1 +; death = 2 +; superjump = 3 +; shaking = 4 + .DEFINE mem_bunny_health ($cb06) .DEFINE mem_bunny_flags ($cb07) .DEFINE mem_viewport_x ($c008) @@ -75,6 +82,11 @@ .DEFINE mem_prepared_loading_block_position_1 ($c023) .DEFINE mem_prepared_loading_block_position_2 ($c024) +.DEFINE mem_loading_mode_vblank_func_pointer_high ($c025) +.DEFINE mem_loading_mode_vblank_func_pointer_low ($c026) +.DEFINE mem_loading_mode_regular_func_pointer_high ($c027) +.DEFINE mem_loading_mode_regular_func_pointer_low ($c028) + .DEFINE next_free_head_higher_bytes $c7 .DEFINE mem_next_free_head_lower_bytes ($c6ff) diff --git a/entity/display.gbasm b/entity/display.gbasm index ce176a4..8b5f110 100644 --- a/entity/display.gbasm +++ b/entity/display.gbasm @@ -208,6 +208,29 @@ Display_Entity: LD C, A Display_Entity.SuperJump_Animation.end: + Display_Entity.Shaking_Animation: + LD A, D + AND $f0 + CP $40 + JR NZ, =Display_Entity.Shaking_Animation.end + + LD A, $mem_moving_animation_step + CP $00 + JR Z, =Display_Entity.Shaking_Animation.end + LD A, $mem_moving_animation_step + SRA A + AND $03 + BIT 1, A + RES 1, A + JR NZ, =Display_Entity.Shaking_Animation.skip_invert + CPL + INC A + Display_Entity.Shaking_Animation.skip_invert: + DBG + ADD B + LD B, A + Display_Entity.Shaking_Animation.end: + Display_Entity.Moving_Hops: LD A, D AND $f8 @@ -35,7 +35,7 @@ Init_Menu: CALL =Print_str LD HL, $dialogue_menu_choice1_routine - LD BC, =Change_To_Loading_Mode + LD BC, =Hop_Attack LD A, B LD (HL+), A LD A, C @@ -72,14 +72,6 @@ Exit_Menu: LD $mem_display_flag, A RET -Change_To_Loading_Mode: - LD A, $enum_loading_mode - LD $mem_requested_mode, A - - LD A, $00 - LD $mem_display_flag, A - RET - Display_dialogue_cursor: LD A, $mem_current_mode CP $enum_dungeon_menu_mode @@ -112,7 +112,7 @@ VBLANK_Entrypoint: LD (HL), A CALL $OAM_DMA_Transfer_routine - CALL =Hop_Attack_Loading_VBlank + CALL =Loading_Mode_VBlank LD A, $mem_current_mode CP $enum_dungeon_mode @@ -143,7 +143,7 @@ VBLANK_Entrypoint: Skip_Dungeon_Update: - CALL =Hop_Attack_Loading_Regular + CALL =Loading_Mode_Regular CALL =Update_Animation_Steps CALL =Check_Open_Menu_button CALL =Move_dialogue_cursor |