.db BAT_TILE_IDLE2
.db BAT_TILE_IDLE2
+ ; loads initial actor target positions
+ ; inputs:
+ ; bc: actor_ptr
+ ; returns:
+ ; actors current y/x pos in target_y/x
+actor_ld_anim_target:
+ ; bc = actor type
+
+ inc bc ; bc = y
+ ld a, [bc]
+ ld [anim_target_y], a
+
+ inc bc ; bc = x
+ ld a, [bc]
+ ld [anim_target_x], a
+
+ dec bc
+ dec bc ; bc = back to origin
+ ret
+
; generic actor movement calls
; up, down, left, right
; inputs:
xor a, a
ld [anim_step_x], a
ld [anim_move_x], a
+
+ ; calculate target position
+ ld d, ANIM_MOVE_TILE_SIZE
+ ld a, [anim_target_y]
+ sub a, d
+ ld [anim_target_y], a
+
ret
actor_down:
xor a, a
ld [anim_step_x], a
ld [anim_move_x], a
+
+ ; calculate target position
+ ld d, ANIM_MOVE_TILE_SIZE
+ ld a, [anim_target_y]
+ add a, d
+ ld [anim_target_y], a
+
ret
actor_left:
xor a, a
ld [anim_step_y], a
ld [anim_move_y], a
+
+ ; calculate target position
+ ld d, ANIM_MOVE_TILE_SIZE
+ ld a, [anim_target_x]
+ sub a, d
+ ld [anim_target_x], a
+
ret
actor_right:
xor a, a
ld [anim_step_y], a
ld [anim_move_y], a
+
+ ; calculate target position
+ ld d, ANIM_MOVE_TILE_SIZE
+ ld a, [anim_target_x]
+ add a, d
+ ld [anim_target_x], a
+
ret
; verify actor animation
; clear anim memory if check fails
; inputs:
; bc: actor ptr
+ ; anim_target_y/x: target position
actor_anim_verify:
- inc bc ; bc = y/x
- ld a, [bc]
-
+ push bc
+
; TODO implement
+ ld a, [anim_target_y]
+ sub a, ANIM_MOVE_TILE_SIZE / 2 ; -8 to be in center
+ ld d, a
+ ld a, [anim_target_x]
+ sub a, ANIM_MOVE_TILE_SIZE / 2 ; -8 to be in center
+ ld e, a
+ ld a, RF_WALL | RF_DOOR
+ call room_get_flag_masked
- dec bc
+ pop bc
+
+ ret z
+ call anim_clear
ret
; function ptrs for each actor type
call anim_clear
jr @skip REL ; darw update
@no_anim:
+ ; set up movement
+ call actor_ld_anim_target
+
; move bat in random direction
call rand
and a, 0b11 ; rnadom direction 0-3
ld [anim_move_x], a
ld [anim_step_y], a
ld [anim_step_x], a
+ ld [anim_target_y], a
+ ld [anim_target_x], a
ret
; advance to the next actor if end_turn != 0
#define ANIM_MOVE_TILE_SIZE 16
; -TILE_SIZE
-#define ANIM_MOVE_TILE_SIZE_N 0xFF - ANIM_MOVE_TILE_SIZE +1
+#define ANIM_MOVE_TILE_SIZE_N 0xFF - ANIM_MOVE_TILE_SIZE + 1
#define ANIM_STEP_DOWN 1
#define ANIM_STEP_LEFT 0xFF
#define ANIM_STEP_UP 0xFF