diff options
-rw-r--r-- | attacks.gbasm | 2 | ||||
-rw-r--r-- | attacks/freeze.gbasm | 114 | ||||
-rw-r--r-- | attacks/heal.gbasm | 4 | ||||
-rw-r--r-- | attacks/hop.gbasm | 1 | ||||
-rw-r--r-- | definitions.gbasm | 14 | ||||
-rw-r--r-- | entity/actions.gbasm | 28 | ||||
-rw-r--r-- | entity/bunny.gbasm | 6 | ||||
-rw-r--r-- | gui.gbasm | 2 | ||||
-rw-r--r-- | init.gbasm | 7 | ||||
-rw-r--r-- | main.gbasm | 5 |
10 files changed, 155 insertions, 28 deletions
diff --git a/attacks.gbasm b/attacks.gbasm index ae836d2..864e7e2 100644 --- a/attacks.gbasm +++ b/attacks.gbasm @@ -70,10 +70,10 @@ Canceled_Attack: LD $mem_map_loading_flags, A LD A, $mem_bunny_direction - AND $07 OR $40 LD $mem_bunny_direction, A RET .INCLUDE "attacks/hop.gbasm" .INCLUDE "attacks/heal.gbasm" +.INCLUDE "attacks/freeze.gbasm" diff --git a/attacks/freeze.gbasm b/attacks/freeze.gbasm new file mode 100644 index 0000000..c4bb392 --- /dev/null +++ b/attacks/freeze.gbasm @@ -0,0 +1,114 @@ +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, =Freeze_Attack_Loading_VBlank.Shaking_Animation.skip_invert + CPL + INC A + Freeze_Attack_Loading_VBlank.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, =Freeze_Attack_Loading_VBlank.Blink_Animation.dark_palette + LD A, $palette_normal + LD $mem_prepared_color_palette, A + JR =Freeze_Attack_Loading_VBlank.end + + Freeze_Attack_Loading_VBlank.Blink_Animation.dark_palette: + LD A, $palette_white + LD $mem_prepared_color_palette, A + + Freeze_Attack_Loading_VBlank.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 + + LD A, $00 + LD $mem_display_flag, A + RET diff --git a/attacks/heal.gbasm b/attacks/heal.gbasm index fc0f2b9..81de6a1 100644 --- a/attacks/heal.gbasm +++ b/attacks/heal.gbasm @@ -1,8 +1,4 @@ Heal_Attack: - LD A, $mem_bunny_direction - AND $07 - LD $mem_bunny_direction, A - LD A, $mem_bunny_health ADD $03 DAA diff --git a/attacks/hop.gbasm b/attacks/hop.gbasm index 11f6095..e8bde55 100644 --- a/attacks/hop.gbasm +++ b/attacks/hop.gbasm @@ -94,7 +94,6 @@ Hop_Attack_Loading_VBlank: 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 diff --git a/definitions.gbasm b/definitions.gbasm index 988128f..2d2746c 100644 --- a/definitions.gbasm +++ b/definitions.gbasm @@ -67,8 +67,7 @@ .DEFINE enum_dungeon_menu_mode $01 .DEFINE enum_dungeon_dialogue_mode $02 .DEFINE enum_loading_mode $03 -.DEFINE enum_dead_mode $04 - +.DEFINE enum_dead_mode $0 .DEFINE mem_menu_cursor_position ($c016) .DEFINE mem_last_button_direction ($c017) @@ -89,6 +88,8 @@ .DEFINE mem_loading_mode_regular_func_pointer_high ($c027) .DEFINE mem_loading_mode_regular_func_pointer_low ($c028) +.DEFINE mem_prepared_color_palette ($c029) + .DEFINE next_free_head_higher_bytes $c7 .DEFINE mem_next_free_head_lower_bytes ($c6ff) @@ -165,7 +166,9 @@ ; flags: u8 ; bit 0: speed 2x ; bit 1: shadow mode -; _padding: u64 +; status: u8 +; ; bit 0: whether or not turns should be skipped +; _padding: u56 ; ; # SANTA CHRISTMAS LIST PLEASE # ; health, max health, list of possible attacks, maybe remaining attacks ? AI status (blind, scared, slow, etc..) @@ -177,9 +180,14 @@ .DEFINE enum_direction_down $04 .DEFINE palette_normal $e4 +.DEFINE palette_black $ff +.DEFINE palette_white $94 .DEFINE palette_bold_font $f4 .DEFINE palette_thin_font $c4 +.DEFINE obj_palette_normal $d3 +.DEFINE obj_palette_frozen $ab + .DEFINE lcdc_window_enabled $8d .DEFINE lcdc_window_disabled $87 diff --git a/entity/actions.gbasm b/entity/actions.gbasm index 1225ab2..f7a6e77 100644 --- a/entity/actions.gbasm +++ b/entity/actions.gbasm @@ -152,6 +152,10 @@ Open_Dialogue: RET Fox_Turn: + LD A, $mem_map_loading_flags + BIT 3, A + RET Z + PUSH HL PUSH BC PUSH DE @@ -163,10 +167,16 @@ Fox_Turn: LD A, (HL+) LD D, A + Fox_Turn.Should_turn_be_skipped: + LD A, L + AND $f0 + ADD $08 + LD L, A + + BIT 0, (HL) + JP NZ, =Fox_Turn.Skip_turn + Fox_Turn.Start_action_or_movement: - LD A, $mem_map_loading_flags - BIT 3, A - JP Z, =Fox_Turn.Start_action_or_movement.end LD A, $mem_moving_animation_step CP $00 JP NZ, =Fox_Turn.Start_action_or_movement.end @@ -372,23 +382,19 @@ Fox_Turn: Fox_Turn.Start_action_or_movement.end: Fox_Turn.End_movement: - LD A, $mem_map_loading_flags - BIT 3, A - JP Z, =Fox_Turn.End_movement.end LD A, $mem_moving_animation_step CP $0f JP NZ, =Fox_Turn.End_movement.end + LD A, D + AND $07 BIT 3, D + LD D, A JR Z, =Fox_Turn.End_movement.end LD A, $01 .ADD_A_TO_DIRECTION_BC Fox_Turn.End_movement.end: Fox_Turn.Health_check: - LD A, $mem_map_loading_flags - BIT 3, A - JP Z, =Fox_Turn.Health_check.end - LD A, $mem_moving_animation_step CP $03 JR NZ, =Fox_Turn.Health_check.end @@ -419,6 +425,8 @@ Fox_Turn: LD (HL+), A LD A, D LD (HL+), A + + Fox_Turn.Skip_Turn: POP DE POP BC POP HL diff --git a/entity/bunny.gbasm b/entity/bunny.gbasm index e5106e2..7d5a5d0 100644 --- a/entity/bunny.gbasm +++ b/entity/bunny.gbasm @@ -100,10 +100,12 @@ Move_Bunny: CP $0f JP NZ, =End_movement.end LD A, $mem_bunny_direction - BIT 3, A + LD D, A + AND $07 + BIT 3, D + LD $mem_bunny_direction, A JR Z, =End_movement.end - LD D, A LD A, $mem_bunny_x LD B, A LD A, $mem_bunny_y @@ -47,7 +47,7 @@ Init_Menu: LD A, C LD (HL+), A - LD BC, =Nothing + LD BC, =Freeze_Attack LD A, B LD (HL+), A LD A, C @@ -52,15 +52,16 @@ Empty_VRAM: ; (Clear screen) JR NZ, =Empty_VRAM.loop ; BG Palette - LD A, $e4 + LD A, $palette_normal LD $reg_bg_palette, A + LD $mem_prepared_color_palette, A ; OBJ0 Palette - LD A, $d3 ; $e4 + LD A, $obj_palette_normal LD $reg_obj0_palette, A ; OBJ1 Palette (frozen, shadow) - LD A, $ab + LD A, $obj_palette_frozen LD $reg_obj1_palette, A Initialize_Window_GUI: @@ -38,7 +38,7 @@ LD $reg_viewport_x, A LD A, C LD $reg_viewport_y, A - LD A, $palette_normal + LD A, $mem_prepared_color_palette LD $reg_bg_palette, A LD A, $lcdc_window_disabled LD $reg_lcd_controller, A @@ -83,9 +83,8 @@ New_Dungeon: CALL =Load_Map CALL =Load_Objects - LD A, $02 - LD $mem_bunny_flags, A LD A, $00 + LD $mem_bunny_flags, A LD $mem_display_flag, A LD A, $enum_dungeon_mode |