aboutsummaryrefslogtreecommitdiff
path: root/playerattacks
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-01-16 18:13:21 +0900
committerAstatin <[email protected]>2025-01-16 18:13:21 +0900
commit02038990a93c0b4cf58269b5456327ea64b998b7 (patch)
tree8f23c7270bc705d17d9d380d3a927f12f20ca1fa /playerattacks
parentdc5a9431bf4438000dcd028aa6b9c17c9ca492d8 (diff)
Move basic enemy attack & walker AI to enemiesattacks
Diffstat (limited to 'playerattacks')
-rw-r--r--playerattacks/earcoptr.gbasm94
-rw-r--r--playerattacks/freeze.gbasm113
-rw-r--r--playerattacks/heal.gbasm29
-rw-r--r--playerattacks/hop.gbasm189
4 files changed, 425 insertions, 0 deletions
diff --git a/playerattacks/earcoptr.gbasm b/playerattacks/earcoptr.gbasm
new file mode 100644
index 0000000..7e74802
--- /dev/null
+++ b/playerattacks/earcoptr.gbasm
@@ -0,0 +1,94 @@
+Earcoptr_Attack_Loading_VBlank:
+ LD A, $mem_loading_step
+ INC A
+ AND $1f
+ 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_map_loading_flags
+ SET 3, A
+ LD $mem_map_loading_flags, A
+ RET
+
+Earcoptr_Attack_Loading_Regular:
+ LD A, $mem_loading_step
+ CP $00
+ RET Z
+ CP $11
+ RET C
+
+ SUB $10
+ LD BC, $mem_entities_list
+ SLA A
+ SLA A
+ SLA A
+ SLA A
+ INC A
+ LD C, A
+
+ LD A, (BC)
+ LD E, A
+
+ LD A, $mem_bunny_x
+ SUB E
+ .ABS
+ CP $02
+ RET NC
+
+ INC C
+
+ LD A, (BC)
+ LD E, A
+
+ LD A, $mem_bunny_y
+ SUB E
+ .ABS
+ CP $02
+ RET NC
+
+ INC C
+ LD A, (BC)
+ AND $0f
+ OR $50
+ LD (BC), A
+
+ LD A, C
+ ADD $03
+ LD C, A
+ LD A, (BC)
+ SUB $01
+ RET C
+ LD (BC), A
+ RET
+
+Earcoptr_Attack:
+ PUSH BC
+ LD A, $mem_bunny_x
+ LD B, A
+ LD A, $mem_bunny_y
+ LD C, A
+ LD A, $02
+ CALL =Try_Launch_Animation
+ POP BC
+
+ LD BC, =Earcoptr_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, =Earcoptr_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
+
+ .CLOSE_DIALOGUE
+ RET
diff --git a/playerattacks/freeze.gbasm b/playerattacks/freeze.gbasm
new file mode 100644
index 0000000..936bf47
--- /dev/null
+++ b/playerattacks/freeze.gbasm
@@ -0,0 +1,113 @@
+Freeze_Attack_Loading_VBlank:
+ LD A, $mem_prepared_viewport_x
+ LD B, A
+ LD A, $mem_loading_step
+ SRA A
+ AND $03
+ BIT 1, A
+ RES 1, A
+ JR NZ, =.Shaking_Animation.skip_invert
+ CPL
+ INC A
+ .Shaking_Animation.skip_invert:
+ ADD B
+ LD $mem_prepared_viewport_x, A
+
+ LD A, $mem_loading_step
+ SRA A
+ SRA A
+ BIT 0, A
+ JR Z, =.Blink_Animation.dark_palette
+ LD A, $palette_normal
+ LD $mem_prepared_color_palette, A
+ JR =.end
+
+ .Blink_Animation.dark_palette:
+ LD A, $palette_white
+ LD $mem_prepared_color_palette, A
+
+ .end:
+ 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_map_loading_flags
+ SET 3, A
+ LD $mem_map_loading_flags, A
+ RET
+
+Freeze_Attack_Loading_Regular:
+ LD A, $mem_loading_step
+ CP $00
+ RET Z
+
+ LD BC, $mem_entities_list
+ SLA A
+ SLA A
+ SLA A
+ SLA A
+ INC A
+ LD C, A
+
+ LD A, (BC)
+ LD E, A
+
+ LD A, $mem_bunny_x
+ SUB E
+ .ABS
+
+ LD D, A
+
+ INC C
+
+ LD A, (BC)
+ LD E, A
+
+ LD A, $mem_bunny_y
+ SUB E
+ .ABS
+
+ ADD D
+ LD D, A
+
+ LD A, $02
+ CP D
+
+ RET C
+
+ LD A, C
+ ADD $05
+ LD C, A
+ LD A, (BC)
+ SET 1, A
+ LD (BC), A
+
+ INC C
+ LD A, $01
+ LD (BC), A
+ RET
+
+Freeze_Attack:
+ LD BC, =Freeze_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, =Freeze_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
+
+ .CLOSE_DIALOGUE
+ RET
diff --git a/playerattacks/heal.gbasm b/playerattacks/heal.gbasm
new file mode 100644
index 0000000..281726a
--- /dev/null
+++ b/playerattacks/heal.gbasm
@@ -0,0 +1,29 @@
+Heal_Attack:
+ LD A, $mem_bunny_health
+ ADD $03
+ DAA
+ CP $20
+ JR C, =.Set_health
+ LD A, $20
+ .Set_health:
+ LD $mem_bunny_health, A
+
+ PUSH BC
+ LD A, $mem_bunny_x
+ LD B, A
+ LD A, $mem_bunny_y
+ LD C, A
+ LD A, $01
+ CALL =Try_Launch_Animation
+ POP BC
+
+ LD A, $enum_dungeon_mode
+ LD $mem_requested_mode, A
+ LD $mem_current_mode, A
+
+ .CLOSE_DIALOGUE
+
+ LD A, $mem_map_loading_flags
+ SET 3, A
+ LD $mem_map_loading_flags, A
+ RET
diff --git a/playerattacks/hop.gbasm b/playerattacks/hop.gbasm
new file mode 100644
index 0000000..cd69763
--- /dev/null
+++ b/playerattacks/hop.gbasm
@@ -0,0 +1,189 @@
+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, =.Map_Load.vertical
+
+ .Map_Load.horizontal:
+ CALL =Load_Next_Block_Column
+ JR =.Map_Load.End
+
+ .Map_Load.vertical:
+ CALL =Load_Next_Block_Row
+
+ .Map_Load.End:
+RET
+
+Hop_Attack_Loading_VBlank:
+ LD A, $mem_loading_step
+ CP $00
+ JP Z, =.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
+
+ .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
+ 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
+ LD C, A
+ 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
+
+ .CLOSE_DIALOGUE
+ LD A, $00
+ LD $mem_loading_step, A
+ RET
+
+