aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAstatin <[email protected]>2024-12-09 16:09:02 +0900
committerAstatin <[email protected]>2024-12-09 16:09:02 +0900
commit0aebab4bd7a436a0a20168c573b87cb77d86def9 (patch)
tree9b888a66a87f242958644dd30e172e38a02fe380
parenta0cc9155572b22ac1afd4636593f72a18372187b (diff)
Add freeze status on enemies near bunny when freeze used
-rw-r--r--attacks.gbasm2
-rw-r--r--attacks/freeze.gbasm114
-rw-r--r--attacks/heal.gbasm4
-rw-r--r--attacks/hop.gbasm1
-rw-r--r--definitions.gbasm14
-rw-r--r--entity/actions.gbasm28
-rw-r--r--entity/bunny.gbasm6
-rw-r--r--gui.gbasm2
-rw-r--r--init.gbasm7
-rw-r--r--main.gbasm5
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
diff --git a/gui.gbasm b/gui.gbasm
index 6406536..e9e6402 100644
--- a/gui.gbasm
+++ b/gui.gbasm
@@ -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
diff --git a/init.gbasm b/init.gbasm
index aba0282..a284fc1 100644
--- a/init.gbasm
+++ b/init.gbasm
@@ -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:
diff --git a/main.gbasm b/main.gbasm
index 519e9fb..ad326fa 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -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