call call_hl
+ pop hl ; hl = original actor ptr = dst
+
; if routine returns
; a new ptr in bc
; set state to this pointer
; otherwise use state's next
+ ld a, b
+ or a, c
+ cp a, 0
+ jr z, @set_next_state_default REL
- pop de
- ret
+ ; set returned state
+ push bc
+ pop de ; de = src
+
+ ld bc, st_size
+ jp memset
+@set_next_state_default:
+
+ ; set default state
+ ; hl = actor ptr
+ push hl
+
+ inc hl
+ inc hl
+ ; hl = st_next
+ ld a, [hl+]
+ ld d, a
+ ld a, [hl]
+ ld e, a ; de = next state ptr
+
+ pop hl
+
+ ld bc, st_size
+ jp memset
+ ; null state
+ ; do nothing and return
st_null_fn:
+ xor a, a
+ ld b, a
+ ld c, a
ret
st_null: