aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--attacks.gbasm188
-rw-r--r--attacks/hop.gbasm188
-rw-r--r--definitions.gbasm12
-rw-r--r--entity/display.gbasm23
-rw-r--r--gui.gbasm10
-rw-r--r--main.gbasm4
7 files changed, 281 insertions, 146 deletions
diff --git a/Makefile b/Makefile
index 7b56703..1f2ccc5 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/gui.gbasm b/gui.gbasm
index cd1b946..ef877aa 100644
--- a/gui.gbasm
+++ b/gui.gbasm
@@ -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
diff --git a/main.gbasm b/main.gbasm
index a46165a..385d4cd 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -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