jp @done
@not_top:
+ cp a, DOOR_TILE_LEFT
+ jr nz, @not_left REL
+
+ ld de, st_objanim_door_open_left
+ ld hl, objanim
+ ld bc, st_size
+ call memcpy
+ jp @done
+@not_left:
+
+ cp a, DOOR_TILE_RIGHT
+ jr nz, @not_right REL
+ ld de, st_objanim_door_open_right
+ ld hl, objanim
+ ld bc, st_size
+ call memcpy
+ jp @done
+@not_right:
+
; default to down
ld de, st_objanim_door_open_down
ld hl, objanim
ret
+objanim_door_open_left_fn:
+ ld a, [objanim+obja_timer] ; read timer before calling handler
+ push af
+ call objanim_door_open_generic_fn
+
+ pop af
+ push bc ; save next state
+ ; hl = oam ptr
+
+ ; adjust x position based on timer
+ ; offset position by counter
+ sra a
+ ld b, a
+ ld a, [hl]
+ sub a, b
+ ; wirte adjusted obj1 y
+ ld [hl+], a ; hl = obj1 tile
+ inc hl ; skip obj1 x
+
+ ; adjust tile by 4 (next tile) and ++
+ ld a, DOOR_SPRITE_TILE + 4
+ ld [hl+], a
+
+ xor a, a
+ ld [hl+], a ; write obj1 flag and ++
+
+ ; hl = obj2 y
+ ld a, [hl]
+ add a, b
+ ; write adjusted obj2 y
+ ld [hl+], a
+ inc hl ; skip obj2 x
+
+ ; adjust tile by 4 (next tile) and ++
+ ld a, DOOR_SPRITE_TILE + 6
+ ld [hl+], a
+
+ xor a, a
+ ld [hl], a
+
+ pop bc ; restore next state
+ ldnull bc
+ ret
+
+objanim_door_open_right_fn:
+ ld a, [objanim+obja_timer] ; read timer before calling handler
+ push af
+ call objanim_door_open_generic_fn
+
+ pop af
+ push bc ; save next state
+ ; hl = oam ptr
+ inc hl ; skip obj1 y
+
+ ; adjust x position based on timer
+ ; offset position by counter
+ sra a
+ ld b, a
+ ld a, [hl]
+ sub a, b
+ ; wirte adjusted obj1 x
+ ld [hl+], a ; hl = obj1 tile
+
+ inc hl ; skip obj1 tile
+ ld a, OAM_FYFLIP
+ ld [hl+], a ; write obj1 flag and ++
+ inc hl ; skip obj2 y
+
+ ; hl = obj2 x
+ ld a, [hl]
+ add a, b
+ ; write adjusted obj2 x
+ ld [hl+], a
+
+ inc hl ; skip obj2 tile
+ ld a, OAM_FYFLIP ; write obj2 flag
+ ld [hl], a
+
+ pop bc ; restore next state
+ ret
; state function for door opening animation
; is called by more specific functions that take this base setup
; and set the right tiles and animations after
st_objanim_door_open_up:
st_def 0x00, objanim_door_open_up_fn, st_objanim_door_open_up
+
+st_objanim_door_open_left:
+ st_def 0x00, objanim_door_open_left_fn, st_objanim_door_open_left
+
+st_objanim_door_open_right:
+ st_def 0x00, objanim_door_open_right_fn, st_objanim_door_open_right