diff options
author | Astatin <[email protected]> | 2024-11-18 16:58:13 +0900 |
---|---|---|
committer | Astatin <[email protected]> | 2024-11-18 16:58:13 +0900 |
commit | ea4a115b8e640d5d17014a50fd3199ba4cc6494f (patch) | |
tree | 39bfe1c418c46445951ba9854708928f0cc027a7 /attacks | |
parent | 0a979fabc9c770834ed90e02758aadea51c889a8 (diff) |
Check collisions on hop and cancel if collision
Diffstat (limited to 'attacks')
-rw-r--r-- | attacks/hop.gbasm | 188 |
1 files changed, 188 insertions, 0 deletions
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 + + |