aboutsummaryrefslogtreecommitdiff
path: root/entity
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-03-11 18:46:42 +0900
committerAstatin <[email protected]>2025-03-11 18:46:42 +0900
commitab45947d3fdc9885c497d9fc3dd124c7986f6ea4 (patch)
tree6800a9c3ebaebb5f35d54fd5ed1e0e8214953544 /entity
parent957834ffafd4c82700e27fd9d69b695bb2247d97 (diff)
Add invincible friendly bunny you can talk to
Diffstat (limited to 'entity')
-rw-r--r--entity/actions.gbasm64
-rw-r--r--entity/bunny.gbasm8
-rw-r--r--entity/init.gbasm10
-rw-r--r--entity/list.gbasm39
-rw-r--r--entity/questgoal.gbasm119
5 files changed, 176 insertions, 64 deletions
diff --git a/entity/actions.gbasm b/entity/actions.gbasm
index 7032766..051b488 100644
--- a/entity/actions.gbasm
+++ b/entity/actions.gbasm
@@ -136,6 +136,10 @@ Turn_Jump_table:
JP =Penguin_Turn
NOP
+ ; 05
+ JP =QuestGoal_Turn
+ NOP
+
Interaction_Jump_table:
; 00
RET
@@ -151,66 +155,6 @@ Interaction_Jump_table:
JP =Open_Dialogue
NOP
-Open_Dialogue:
- LD A, L
- AND $f0
- LD L, A
-
- INC HL
-
- LD A, $mem_bunny_x
- CP (HL)
- JR Z, =.Vertical_check
-
- .Horizontal_check:
- INC A
- CP (HL)
- JR Z, =.Left
- .Right:
- INC HL
- INC HL
- LD (HL), $enum_direction_right
- JR =.Check_end
- .Left:
- INC HL
- INC HL
- LD (HL), $enum_direction_left
- JR =.Check_end
- .Vertical_check:
- INC HL
- LD A, $mem_bunny_y
- INC A
- CP (HL)
- JR Z, =.Up
- .Down:
- INC HL
- LD (HL), $enum_direction_down
- JR =.Check_end
- .Up:
- INC HL
- LD (HL), $enum_direction_up
- JR =.Check_end
- .Check_end:
-
- LD HL, $dialogue_first_line
- LD BC, =Bunny_Prefix
- CALL =Print_str
-
- LD HL, $dialogue_third_line
- LD BC, =Text_1
- CALL =Print_str
-
- LD A, $07
- LD $mem_display_flag, A
-
- LD A, $mem_bunny_direction
- AND $0f
- LD $mem_bunny_direction, A
-
- LD A, $enum_dungeon_dialogue_mode
- LD $mem_requested_mode, A
- RET
-
Enemy_Interaction:
LD A, L
AND $f0
diff --git a/entity/bunny.gbasm b/entity/bunny.gbasm
index d2b9148..8438d3e 100644
--- a/entity/bunny.gbasm
+++ b/entity/bunny.gbasm
@@ -106,10 +106,12 @@ Move_Bunny:
JR =.Start_action_or_movement.end
.Start_action_or_movement.test_action:
- LD A, $mem_last_button_action
- LD B, A
LD A, $mem_button_action
- CP B
+ LD B, A
+ LD A, $mem_last_button_action
+ XOR B
+ AND B
+ CP $00
JR Z, =.Start_action_or_movement.end
BIT 0, A
JR Z, =.Start_action_or_movement.end
diff --git a/entity/init.gbasm b/entity/init.gbasm
index 970607b..d263248 100644
--- a/entity/init.gbasm
+++ b/entity/init.gbasm
@@ -95,6 +95,8 @@ Initialize_Entities:
LD A, $ff
LD $mem_bunny_current_room_idx, A
+ LD A, $07
+ CALL =Initialize_Entity
CALL =Initialize_Enemy
CALL =Initialize_Enemy
CALL =Initialize_Enemy
@@ -133,6 +135,9 @@ Initialize_Enemy: ; HL => pointer to entity struct
CALL =RNG_Step
AND $03
ADD $03
+
+Initialize_Entity: ; HL => pointer to entity struct, A => entity loaded index
+ DBG
LD E, A
SLA A
SLA A
@@ -215,7 +220,6 @@ Initialize_Enemy: ; HL => pointer to entity struct
LD (HL-), A
LD (HL), A
-
POP BC
RET
@@ -262,9 +266,13 @@ Initialize_Enemy: ; HL => pointer to entity struct
LD A, (BC)
LD (HL+), A
+ INC BC
+
XOR A
; flags & status
LD (HL+), A
+
+ LD A, (BC)
LD (HL+), A
INC BC
diff --git a/entity/list.gbasm b/entity/list.gbasm
index acbe12d..7f09455 100644
--- a/entity/list.gbasm
+++ b/entity/list.gbasm
@@ -12,6 +12,9 @@ Entity_list:
; Starting health
.DB $02
+ ; Starting status
+ .DB $00
+
; Starting mana
.DB $05
@@ -30,6 +33,9 @@ Entity_list:
; Starting health
.DB $02
+ ; Starting status
+ .DB $00
+
; Starting mana
.DB $00
@@ -48,6 +54,9 @@ Entity_list:
; Starting health
.DB $02
+ ; Starting status
+ .DB $00
+
; Starting mana
.DB $00
@@ -66,6 +75,9 @@ Entity_list:
; Starting health
.DB $01
+ ; Starting status
+ .DB $00
+
; Starting mana
.DB $03
@@ -84,6 +96,9 @@ Entity_list:
; Starting health
.DB $00
+ ; Starting status
+ .DB $00
+
; Starting mana
.DB $00
@@ -102,7 +117,31 @@ Entity_list:
; Starting health
.DB $00
+ ; Starting status
+ .DB $00
+
; Starting mana
.DB $00
.PADTO =.Fimsh+8
+
+ .QuestGoalBunny:
+ ; Sprite address
+ .DB =OBJ_Tile_Image_Data.Bunny
+
+ ; Turn Jump Table index
+ .DB $05
+
+ ; Interaction Jump Table index
+ .DB $02
+
+ ; Starting health
+ .DB $00
+
+ ; Starting status
+ .DB $02
+
+ ; Starting mana
+ .DB $00
+
+ .PADTO =.QuestGoalBunny+8
diff --git a/entity/questgoal.gbasm b/entity/questgoal.gbasm
new file mode 100644
index 0000000..d39f786
--- /dev/null
+++ b/entity/questgoal.gbasm
@@ -0,0 +1,119 @@
+Open_Dialogue:
+ LD A, L
+ AND $f0
+ LD L, A
+
+ INC HL
+
+ LD A, $mem_bunny_x
+ CP (HL)
+ JR Z, =.Vertical_check
+
+ .Horizontal_check:
+ INC A
+ CP (HL)
+ JR Z, =.Left
+ .Right:
+ INC HL
+ INC HL
+ LD (HL), $enum_direction_right
+ JR =.Check_end
+ .Left:
+ INC HL
+ INC HL
+ LD (HL), $enum_direction_left
+ JR =.Check_end
+ .Vertical_check:
+ INC HL
+ LD A, $mem_bunny_y
+ INC A
+ CP (HL)
+ JR Z, =.Up
+ .Down:
+ INC HL
+ LD (HL), $enum_direction_down
+ JR =.Check_end
+ .Up:
+ INC HL
+ LD (HL), $enum_direction_up
+ JR =.Check_end
+ .Check_end:
+
+ LD HL, $dialogue_first_line
+ LD BC, =Bunny_Prefix
+ CALL =Print_str
+
+ LD HL, $dialogue_third_line
+ LD BC, =Text_1
+ CALL =Print_str
+
+ LD A, $07
+ LD $mem_display_flag, A
+
+ LD A, $mem_bunny_direction
+ AND $0f
+ LD $mem_bunny_direction, A
+
+ LD A, $enum_dungeon_dialogue_mode
+ LD $mem_requested_mode, A
+ RET
+
+QuestGoal_Turn:
+ LD A, $mem_map_loading_flags
+ BIT 3, A
+ RET Z
+
+ PUSH HL
+ PUSH BC
+ PUSH DE
+ INC HL
+ LD A, (HL+)
+ LD B, A
+ LD A, (HL+)
+ LD C, A
+ LD A, (HL+)
+ LD D, A
+
+ .Start_action_or_movement:
+ LD A, $mem_moving_animation_step
+ CP $00
+ JP NZ, =.Start_action_or_movement.end
+
+ .Try_Walking:
+
+ CALL =RNG_Step
+ BIT 0, A
+ JR Z, =.Start_action_or_movement.end
+
+ CALL =Walking.Random_walker
+ .Start_action_or_movement.end:
+
+ .End_movement:
+ LD A, $mem_moving_animation_step
+ CP $0f
+ JP NZ, =.End_movement.end
+ LD A, D
+ AND $07
+ BIT 3, D
+ LD D, A
+ JR Z, =.End_movement.end
+ LD A, $01
+ .ADD_A_TO_DIRECTION_BC
+
+ .End_movement.end:
+
+ .Skip_Turn:
+ LD A, L
+ AND $f0
+ LD L, A
+ INC HL
+ LD A, B
+ LD (HL+), A
+ LD A, C
+ LD (HL+), A
+ LD A, D
+ LD (HL+), A
+ POP DE
+ POP BC
+ POP HL
+ RET