Код:
ld ix,obj ;думаю проще с индексами будет, но может медленнее, хотя хз
ld b,24
nxt_object
push bc
ld a,[ix+i_obj_id]
cp id_work_neutral ;>= id_work_neutral? это не fort
jr nc,no_fort
;----тут обработка fort
;...
;----
no_fort
cp id_flag_neutral
jr nc,no_work ;>= id_flag_neutral? это не work
;----тут обработка work
;...
;----
no_work
;остаётся только flag(если будут идентификаторы больше id_flag_enemy, нужно добавлять новые проверки)
;----тут обработка flag
ld de,40 ;смещение от FLAG_01 до FLAG_02
ld hl,FLAG_01-40
ld b,cycle_4phase
inc b
add_flag
add hl,de ;прибавляем к FLAG_01 до нужной фазы
djnz add_flag
;в hl FLAG_01 .. FLAG_04
;тут xput, y_put посчитать
;Как вызывать? В какие регистры что, хз
SpritePutClear(hl, ......)
ld de,20
add hl,de
SpritePutClear(hl, ......)
ld hl,7
add ix,jl
pop bc
djnz nxt_object