Andrew771, Попытался переписать на асм put_object
Чёт похоже не осилю, тут дофига чего не понятного
put object рисует на экран?(или теневой?)
x_cur, y_cur что за значения? current? cursor? относительно чего?
xput, yput - куда по ним вставляется?
x_map_scr - что там?
SpritePut чем оперируют, какие регистры меняе, принимает на вход
короче дофига чего непонятного, в чём разбираться дольше, чем заново написать)))

Скрытый текст

Код:
		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
[свернуть]