;генератор скрипта вывода спрайтов + скрипта стирания спрайтов
;x=0 ;                 ;MMssSSSS SSSSSSss MM......
;x=2 ;                 ;MMMMssSS SSSSSSSS ssMMM...
;x=4 ;inc_l_beforeattr ;...MMMss SSSSSSSS SSssMMMM
;x=8 ;inc_l_beforeattr ;......MM ssSSSSSS SSSSssMM

;на входе: x,y, sprtype (gfxdescraddr? там 4 адреса hgfx в зависимости от фазы X, а в начале hgfx лежит f(sprhgt8))
;брать из объекта (в объекте сразу номер глифа спрайта (из 64) - или лучше проходить по анимациям? но хотелось бы при стирании спрайта ту же высоту, для скорости)
;y задан для верхнего края спрайта

;ещё надо оптимизировать анимацию - она генерирует адрес gfxdescraddr (можно не каждый фрейм, но надо согласовать, какие спрайты анимируются в одном фрейме, какие в другом - тупо чётные-нечётные записи в списке объектов?)

;в графике спрайта можно положить фазу x и высоту (сейчас там только высота)
;чтобы перейти на нужный prspr, нужны фаза x, фаза y и высота
;надо:
;push gfx
;push scr
;push f(yphase),pg

        macro GENPRSCRIPT obj,genrescrpatch
;CY=1
        ;ld hl,(obj+OBJ_Y) ;l=y/2 ;h=gfxdescraddrLSB ;на каждую фазу X 3 байта: gfx16, pg, хотя по идее pg должны быть общие
        ld a,(obj+OBJ_X) ;x/2
        rra
        rl h
        rra
        rl h
         ld e,h
;57
;a=x/8 + 0x40
;l=y/2
        ld h,tytoscr/256
        add a,(hl)
        inc h
        ld d,(hl)
         ld l,e
        ld e,a ;de=scr
        ld a,d ;scrH
        push de ;scr
         ;ld (genrescrpatch),de ;для генератора восстановителя
;48
        inc h ;ld h,gfxdescr/256
        ld e,(hl)
        inc h
        ld d,(hl)
        push de ;gfx
       if SPRPAGED
        inc h
        ld e,(hl) ;pg
       else       
        ld e,pgspr+PAGEOR ;pg
       endif
;44
        or c;0b11111001
        add a,b;prspr/256+7 ;ветвление по x&4 будет уже в самом prspr (благодаря xphase внутри gfx) ;одна y-фаза prspr занимает 512 байт
        ld d,a ;f(yphase)
        push de ;f(yphase),pg
;23;29
;192t/спрайт
_=_+OBJSIZE
        endm

;genprscript
;sp=script end
;        ld (genprscript_sp),sp
;        ld sp,hl
       
_=objects
        ld bc,+(prspr_y0/256+7)*256 + 0xf9;0b11111001
        scf
        ld hl,(_+OBJ_Y) ;l=y/2 ;h=gfxdescraddrLSB ;на каждую фазу X 3 байта: gfx16, pg, хотя по идее pg должны быть общие
        GENPRSCRIPT _,rescrpatch0
        ld hl,(_+OBJ_Y) ;l=y/2 ;h=gfxdescraddrLSB ;на каждую фазу X 3 байта: gfx16, pg, хотя по идее pg должны быть общие
        GENPRSCRIPT _,rescrpatch1
        ld hl,(_+OBJ_Y) ;l=y/2 ;h=gfxdescraddrLSB ;на каждую фазу X 3 байта: gfx16, pg, хотя по идее pg должны быть общие
        GENPRSCRIPT _,rescrpatch2
        ld hl,(_+OBJ_Y) ;l=y/2 ;h=gfxdescraddrLSB ;на каждую фазу X 3 байта: gfx16, pg, хотя по идее pg должны быть общие
        GENPRSCRIPT _,rescrpatch3
        ld hl,(_+OBJ_Y) ;l=y/2 ;h=gfxdescraddrLSB ;на каждую фазу X 3 байта: gfx16, pg, хотя по идее pg должны быть общие
        GENPRSCRIPT _,rescrpatch4
        ld hl,(_+OBJ_Y) ;l=y/2 ;h=gfxdescraddrLSB ;на каждую фазу X 3 байта: gfx16, pg, хотя по идее pg должны быть общие
        GENPRSCRIPT _,rescrpatch5
        ld hl,(_+OBJ_Y) ;l=y/2 ;h=gfxdescraddrLSB ;на каждую фазу X 3 байта: gfx16, pg, хотя по идее pg должны быть общие
        GENPRSCRIPT _,rescrpatch6

        ld hl,(_+OBJ_Y) ;l=y/2 ;h=gfxdescraddrLSB ;на каждую фазу X 3 байта: gfx16, pg, хотя по идее pg должны быть общие
         ;bit 2,(ix+OBJ_FLAGS) ;blink
         ld a,(_+OBJ_FLAGS)
         bit 2,a ;keep CY
         jr z,genscrpt_noblink
         ld a,(timer)
         bit 1,a
         jr z,genscrpt_noblink
         ld h,ID_HARDYBLINK
genscrpt_noblink        
        GENPRSCRIPT _,rescrpatch7
;genprscript_sp=$+1
;        ld sp,0
;        ret
