; bc: actor_ptr
; actor_soam_ptr: next soam item
actor_up:
+ ld a, ANIM_MOVE_TILE_SIZE
+ ld [anim_move_y], a
+ ld a, ANIM_STEP_UP
+ ld [anim_step_y], a
+
+ xor a, a
+ ld [anim_step_x], a
+ ld [anim_move_x], a
ret
actor_down:
ret
actor_left:
+ ld a, ANIM_MOVE_TILE_SIZE
+ ld [anim_move_x], a
+ ld a, ANIM_STEP_LEFT
+ ld [anim_step_x], a
+
+ xor a, a
+ ld [anim_step_y], a
+ ld [anim_move_y], a
ret
actor_right:
+ ld a, ANIM_MOVE_TILE_SIZE
+ ld [anim_move_x], a
+ ld a, ANIM_STEP_RIGHT
+ ld [anim_step_x], a
+
+ xor a, a
+ ld [anim_step_y], a
+ ld [anim_move_y], a
ret
; function ptrs for each actor type
ld a, c
ld l, a
inc hl ; hl = y/x ptr
+ push bc
call anim_move
+ pop bc
cp a, 0 ; is animation done?
jr nz, @skip REL
; play animation at end of turn
call who_next
+ call anim_clear
jr @skip REL ; darw update
@no_anim:
; move bat in random direction
ret
+ ; clear anim memory
+anim_clear:
+ xor a, a
+ ld [anim_move_y], a
+ ld [anim_move_x], a
+ ld [anim_step_y], a
+ ld [anim_step_x], a
+ ret
; advance to the next actor if end_turn != 0
; effectively ending the current actor's turn
; inits the random seed
rand_init:
xor a, a
- ldhi a, rand_table
ld a, [srand]
- ldlo a, rand_table
ld a, [srand+1]
ret
; gets a pseudo-random number
; and advances to the next seed
; uses:
- ; hl, a, b
+ ; hl, a, b, de
; returns:
; a: random value
rand:
ld a, h
and a, ((rand_table_end - rand_table - 1) >> 8); overflow at max size
ld [srand], a
-
+
+ ld de, rand_table
+ add hl, de
ld a, [hl] ; next value
ret