ToScrMenu   ld a,(vsego)
            or a
           ret z
            ld ix,FtoScr
            ld a,(ix+3)
            or (ix+9)
            or (ix+15)
           ret z   ; нет выводимых параметров

            ld hl,SpriteS.n0    ; замена возврата на это
            ex (sp),hl
1           call .ramka
           ret c
            call ramAdd
            call .outspos_
            call SAVESCR
            call NOKEY_
           jr 1B

.outspos_
             ld a,0    ; определяем режим
.modeOut_  EQU $-1
             or a
            jr nz,2F

            ;  out sprite
             ld hl,SPRT.Mput
             ld a,(FtoScr+9)  ; флаг маски
             or a
            jr z,1F
             ld hl,SPRT.Mand
             ld (SPRT.mode),hl
             ld hl,(CreatWspr.mskOUT)
             call  .outpix
             ld hl,SPRT.Mor
1            ld (SPRT.mode),hl
             ld hl,(CreatWspr.pixOUT)
             ld a,(FtoScr+3)  ; флаг пикселей
             or a
             call nz, .outpix
            jr .col

2             ld hl,SPRT.Mput
              dec a          ; spr
             jr z,1F
              ld hl,SPRT.Mor
              dec a          ; or
             jr z,1F
              ld hl,SPRT.Mres
              dec a          ; and
             jr z,1F
              ld hl,SPRT.Mxor
              dec a          ; xor
             jr z,1F
             ret nz
1             ld (SPRT.mode),hl
              ld hl,(CreatWspr.pixOUT)
              ld a,(FtoScr+3)  ; флаг пикселей
              or a
             jr nz,1F
              ld hl,(CreatWspr.mskOUT)
              ld a,(FtoScr+9)  ; флаг маски
              or a
             jr z, .col
1             call  .outpix
.col          ld hl,(CreatWspr.atrOUT)
              ld a,(FtoScr+15)  ; флаг цвета
              or a
             ret z
.outattr       ; hl - addr
               call 1F
              ret z
              jp SPRT.putA_full_
.outpix        ; hl - addr
               call 1F
              ret z
              jp SPRT.put_full_
1              ld a,h
               or l
              jr nz,1F
               pop af   ; delete return addr
              ret
1              ld a,(.outIX)
               ld d,a
               ld a,(.outIX+1)
               ld e,a
               ld bc,(.outIX+2)
               call SPRT.q_full
              ret

.ramka      call ERASE_ALLW
            call LOADSCR
            ld hl,(Sz_X)
            ld (.outIX+2),hl
            ld ix,.outIX
            ld hl,(ARW_XC)
            ld (.outIX),hl
            xor a
           jp Ramka8


.outIX     DB 0,0,1,1



.Smode     ld ix,WmodeS_
           call POPUP
           ld (ix+6),%1110
           call Win_
           call CLOSENK_
           cp 5
          ret nc
           ld (.modeOut_),a
           ld e,a
           add a,a
           add a,a
           ld c,a
           ld b,0
           ld hl,mPut
           add hl,bc
           ld (TSpr.md),hl
           ld a,e
           or a
          ret nz
.s_mode_   ld a,#FF
           ld (FtoScr+3),a
           ld (FtoScr+9),a
           ld (FtoScr+15),a
          ret



WmodeS_   DB 0,0,4,7,7*8,7,%1110
; Bit 0 - окно с заголовком/без (window with title)
; Bit 1 - "перерисовать" окно да/нет (redraw window)
; Bit 2 - тискать окно по экрану да/нет (movable window)
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL by clicking outside the window)
; Bit 4 - запрет выхода по клику за пределами окна (добавлено для BGE 4.xx работает при Bit 3 = 1 ) / Dart Alver
         DB 0          ; запасной байт-флаг (reserved for flags)
         DW .Tmd    ; объект-текст (text object)
         DW .Smd     ; объект-подсветка (выборка) (highlighting object)
         DW #FFFF

.Tmd     DB #0A : DW mPut
         DB #0A : DW mSpr
         DB #0A : DW mOR
         DB #0A : DW mAND
         DB #0A : DW mXOR
         DB 0

.Smd     DB 1,1,2,128+5,%11
         DB #FF




 ;------- animation procedures ---------  ;  TSpr.frameN


Animation
.addrNum     ld a,(FrmNum)
.addrHL    ; in a - number - out hl - addr
             cp 0
.frmAll  EQU $-1     ; всего кадров
             ccf
            ret c
.addrHL_     push bc
             ld c,a
             call .chVsego
             ld a,c
            jr c,1F
             push af
             add a,a
             add a,a
             ld c,a
             ld b,0
             ld hl,AniBuff
             add hl,bc
             pop af
1            pop bc
            ret
.chVsego     ld a,(vsego)
             or a
            ret nz
             call .clear
             scf
            ret

.addFRM      ld a,(.frmAll)
             cp MaxFrame
            ret nc
             ld c,a
             call .addrHL_
            ret c
             call .insNums_
             dec a
             ld (FrmNum),a
            call .updFRM_
             ld a,(vsego)
             ld c,a
             ld a,(SprNum)
             inc a
             cp c
            jr c,1F
             xor a
1           jp SpriteS.selNumA_
.updFRM
             call .addrNum
            ret c
.updFRM_     ld a,(FrmPause)
             ld (hl),a
             inc hl
             ld a,(SprNum)
             ld (hl),a
             inc hl
             ld de,(FrmXY)
             ld (hl),e
             inc hl
             ld (hl),d
            ret

.insFRM      ld a,(.frmAll)
             cp MaxFrame
            ret nc
             ld a,(FrmNum)
             ld b,a
             ld a,MaxFrame-1
             sub b
            ret c
            ret z
             add a,a
             add a,a
             ld c,a
          ;   ld a,b
             ld b,0
             ld hl,AniBuff+(MaxFrame*4)-4
             ld de,AniBuff+(MaxFrame*4)
             lddr
             call .updFRM_
.insNums_    ld a,(.frmAll)
             inc a
             ld (.frmAll),a
            ret

.delFRM      call .addrNum
            ret c
1            push hl
             inc hl
             inc hl
             inc hl
             inc hl
             ex de,hl
             ld hl,AniBuff+(MaxFrame*4)
             or a
             sbc hl,de
             ld b,h
             ld c,l
             ex de,hl
             pop de
             ld a,b
             or c
            jr z,1F
             ldir
1            ld hl,00
             ld (AniBuff+(MaxFrame*4)-4),hl
             ld (AniBuff+(MaxFrame*4)-2),hl
             ld a,(.frmAll)
             dec a
             ld (.frmAll),a
             ld c,a
             ld a,(FrmNum)
             or a
            jr z,.selFrm
             dec a
             ld (FrmNum),a
            ret

.clearYN    ld a,(FrmAll)
            ld hl,.TclearAni
            or a
            call nz, AskQ
           ret c
.clear      ld hl,AniBuff
            ld b,80
1           ld (hl),0
            inc hl
           djnz 1B
            xor a
            ld (FrmAll),a
2           ld (FrmNum),a
           ret


.selXY      ld hl,SpriteS.n0    ; замена возврата на это
            ex (sp),hl
            call ToScrMenu.ramka
           ret c
            ld hl,(ToScrMenu.outIX)
            ld (FrmXY),hl
           ret


.edPause   ld bc,FrmPause
           ld hl,TSpr.pause_
           ld de,11*256+20
           ld a,100
          jp EditSY.e


.selFrmN
           ld hl,.TselFrN+2
           push hl
           ld b,20
1          ld (hl),13
           inc hl
           inc hl
           inc hl
          djnz 1B
           pop hl
           ld a,(FrmAll)
           ld c,a
           or a
          ret z
           or 128
           ld (.SselFrN+3),a
           ld a,2
           add a,c
           ld (.WselFrmN+3),a
           dec c
           ld a,c
           add a,a
           add a,c
           ld c,a
           add hl,bc
           ld (hl),0
           ld ix,.WselFrmN
           call POPUP
           ld (ix+6),%1110
           call Win_
           call CLOSENK_
           cp #FF
          ret z
           ld (FrmNum),a
         ; выбор спрайта из параметров анимации
.selFrm      ; in a - number - out vars
             call .addrHL
            ret c
             ld a,(vsego)
             ld c,a
             ld a,(hl)     ; pause
             cp 100
            jr c,1F
             xor a
1            or a
            jr nz,1F
             ld a,10
1            ld (FrmPause),a
             ld (hl),a
             inc hl
             ld a,(hl)     ; num
             cp c
            jr c,1F
             ld a,c
             dec a
             ld (hl),a
1            push hl
             call SpriteS.selNumA_
             pop hl
             inc hl
             ld e,(hl)
             inc hl
             ld d,(hl)
             ld a,e
             cp 32
            jr c,1F
             ld e,31
1            ld a,d
             cp 24
            jr c,1F
             ld d,23
1            ld (FrmXY),de
             ld (hl),d
             dec hl
             ld (hl),e
            ret


.ani
           ld a,(FrmAll)
           or a
          ret z
           ld hl,SpriteS.n0    ; замена возврата на это
           ex (sp),hl
           call ERASE_ALLW
           ld a,(BgAtr)
           call cls_a
           ld a,(FtoScr+21)   ; флаг очистки экрана
           or a
           call z,LOADSCR
           ld a,SuxPage
           call SAVESCR.save

.LaniB      ld (.SP_),sp
            ld hl,65535-243
            add hl,sp   ; ld hl,sp-244
            ld sp,hl
            inc hl
            inc hl
            push hl
            pop ix
            ld (.aniBix_),hl
            ld b,200      ; обнуление буфера
1           ld (hl),0
            inc hl
           djnz 1B
            ld de,.retSP
           push de           ; адрес возврата
            ld a,(FrmAll)
            ld b,a
            ld hl,AniBuff
.laniB_     ld a,(hl)
            inc hl          ; pause
            or a
           jp z,.errAni
            ld (ix+0),a
            ld a,(hl)       ; num of sprite
            inc hl
            push hl
            push bc
            call SeachSPR
           jp c,.errAni
            rra
           jr nc,1F
            ld (ix+1),l
            ld (ix+2),h   ; spr adr
            add hl,de
1           rra
           jr nc,1F
            ld (ix+3),l
            ld (ix+4),h  ; msk adr
            add hl,de
1           rra
           jr nc,1F
            ld (ix+5),l
            ld (ix+6),h  ; attr adr
1           rra
           jr nc,1F
            set 7,(ix+0) ; transparent attr flag to 7-bit of pause
1           ex af,af'
            ld (ix+7),a  ; attr mask
            ld (ix+8),c  ; Size x
            ld (ix+9),b  ; Size y
            pop bc
            pop hl
            ld a,(hl)
            inc hl
            ld (ix+10),a  ; x
            ld a,(hl)
            inc hl
            ld (ix+11),a  ; y
            ld de,12
            add ix,de
           djnz .laniB_         ; буфер заполнен
              halt

.Lani         ld a,(FrmAll)
              ld ix,0
.aniBix_    EQU $-2
.lpani1       ld (.stpA_),a

              ld d,(ix+10)
              ld e,(ix+11)
              ld c,(ix+8)
              ld b,(ix+9)
              call  SPRT.q_full  ; in de -  d=x e=y, bc - размер спрайта
             jr z,.errAni
              ld (.putFilA_),a
            push bc
              ld hl,SPRT.Mand
              ld (SPRT.mode),hl
              ld l,(ix+3)
              ld h,(ix+4)  ; hl = msk adr
              call .putFul
              ld hl,SPRT.Mput
             jr z,1F
              ld hl,SPRT.Mor
1             ld (SPRT.mode),hl
              ld l,(ix+1)
              ld h,(ix+2) ; hl = sprt adr
              call .putFul
              ld a,(ix+7)
              ex af,af'
              ld a,(ix+0)
              and #80
              call  SPRT.q_Amode      ; in A' = Amsk, a = trans flg
              ld l,(ix+5)
              ld h,(ix+6)  ; attr addr
              ld a,h
              or l
              call nz,SPRT.putA_full_

              ld a,(ix+0)    ; пауза
              and #7F
              call PausA_
            pop bc
             ret nz
              ld hl,(SPRT.putScrAdr)
              ld a,(SPRT.dXbyte)
              ld c,a
              call ForAniLdPrtScr     ; восстановление фона

              ld bc,12
              add ix,bc
              ld a,0     ; шаг
.stpA_      EQU $-1
              dec a
             jr nz,.lpani1
            jr .Lani

.errAni       call .clear
.retSP        ld sp,0
.SP_    EQU $-2
             ret

.putFul       ld a,h
              or l
             ret z
              push de
              push bc
              ld a,0
.putFilA_ EQU $-1
              call SPRT.put_full_
              pop bc
              pop de
              xor a
              inc a
             ret


.TclearAni  MSG_AniDel : DB 0

.WselFrmN     DB 0,0,4,7,7*8,7,%1110
; Bit 0 - окно с заголовком/без (window with title)
; Bit 1 - "перерисовать" окно да/нет (redraw window)
; Bit 2 - тискать окно по экрану да/нет (movable window)
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL by clicking outside the window)
; Bit 4 - запрет выхода по клику за пределами окна (добавлено для BGE 4.xx работает при Bit 3 = 1 ) / Dart Alver
             DB 0          ; запасной байт-флаг (reserved for flags)
            DW .TselFrN   ; объект-текст (text object)
            DW .SselFrN   ; объект-подсветка (выборка) (highlighting object)
            DW #FFFF

.TselFrN     DB "0 ",13
             DB "1 ",13
             DB "2 ",13
             DB "3 ",13
             DB "4 ",13
             DB "5 ",13
             DB "6 ",13
             DB "7 ",13
             DB "8 ",13
             DB "9 ",13
             DB "10",13
             DB "11",13
             DB "12",13
             DB "13",13
             DB "14",13
             DB "15",13
             DB "16",13
             DB "17",13
             DB "18",13
             DB "19",13
             DB 0

.SselFrN     DB 1,1,2,128+20,%11
             DB #FF


; --------------------------------------------

aEdposX    ld bc,FrmXY
           ld hl,TSpr.Xframe_
           ld de,3*256+20
           ld a,32
          jr 1F
aEdposY    ld bc,FrmXY+1
           ld hl,TSpr.Yframe_
           ld de,5*256+20
           ld a,24
1          call EditSY.ee
          ret c
           ld (hl),a
          ret

aDecPX      ld hl,FrmXY
          jr 1F
aDecPY      ld hl,FrmXY+1
1           ld a,(hl)
            or a
           jr z,a100quit
            dec (hl)
a100quit    ld a,100
            or a
           ret
aIncPX      ld hl,FrmXY
            ld c,31
           jr 1F
aIncPY      ld hl,FrmXY+1
            ld c,23
1           ld a,(hl)
            cp c
           jr nc,a100quit
            inc (hl)
           jr  a100quit

;aInkPause    ld a,(FrmPause)
;             inc a
;             cp 99
;            jr 1F
;aDecPause    ld a,(FrmPause)
;             dec a
;1           jr z, a100quit
;             ld (FrmPause),a
;            jr  a100quit

aSetPauses    ld a,(FrmAll)
              or a
             ret z
              ld b,a
              ld a,(FrmPause)
              ld hl,AniBuff
1             ld (hl),a
              inc hl
              inc hl
              inc hl
              inc hl
             djnz 1B
             ret

PausA_         ld b,a              ; in: a= frames
        ;      ld hl,LAST_KEY      ; out z for times / nz for press key
1       ;      xor a               ; out a=0 for times / a=key for keyboard
        ;      ld (hl),a
        ;      halt
        ;      ld a,(hl)
        ;      or a
        ;     ret nz
        ;     djnz 1B
        ;     ret
              halt
              push hl,de,bc
              ld a,BUTTON
              call GUI
              pop bc,de,hl
              or a
             ret nz
             djnz 1B
             ret

FrmNum      DB 0     ; номер кадра
FrmAll    EQU Animation.frmAll  ; всего кадров
FrmXY       DB 0,0   ; позиция спрайта в кадре
FrmPause    DB 10    ; пауза в фреймах после вывода кадра
MaxFrame  EQU 20     ; максимальное число кадров
