aboutsummaryrefslogtreecommitdiff
path: root/attacks
diff options
context:
space:
mode:
authorAstatin <[email protected]>2024-11-18 16:58:13 +0900
committerAstatin <[email protected]>2024-11-18 16:58:13 +0900
commitea4a115b8e640d5d17014a50fd3199ba4cc6494f (patch)
tree39bfe1c418c46445951ba9854708928f0cc027a7 /attacks
parent0a979fabc9c770834ed90e02758aadea51c889a8 (diff)
Check collisions on hop and cancel if collision
Diffstat (limited to 'attacks')
-rw-r--r--attacks/hop.gbasm188
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
+
+