;-----------Вывод спрайтов героев
 
        if EGA==0
 
t7tab   DEFB 23,#20 ;[**]
 
        DEFB 11,#21
 
        DEFB 12,#60
 
        DEFB 13,#40  ;           LD HL,#4060
 
        DEFB 24,#F8    ;           JR NZ,tst70
 
        DEFB 25,#21
 
        DEFB 18,#23      ;           INC HL
 
        DEFB 19,#0D      ;           DEC C
 
        DEFB 29,#C9     ;       RET
 
        DEFB 20,#20
 
        DEFB 21,#FB    ;           JR NZ,tst70
 
        DEFB 26,#FE
 
        DEFB 15,#00
 
        DEFB 16,#35  ;           LD BC,#3500
 
        DEFB 17,#AE      ;   tst70   XOR (HL)
 
        DEFB 28,#BE      ;           CP (HL)
 
        DEFB 22,#05      ;           DEC B
 
        DEFB 27,#FF  ;           LD HL,#FFFE
 
        DEFB 14,#01
 
        DEFB 0
 
 
 
;старшие байты адресов (к ним прибавляется (направление*2 + шаг)*64)
 
AT_HER  DEFB #C0,#C6,#CA,#CE,#D2
 
        DEFB #D8,#DE,#E4,#F1
 
        DEFB #C4,#CA,#D0,#D6,#DC,#DC
 
 
 
;старшие байты адресов фазы удара (к ним прибавляется (направление)*64)
 
AT_WAR  DEFB #C4,#C4,#C4,#00,#D6
 
        DEFB #DC,#E2,#ED,#FA
 
        DEFB #C8,#CE,#D4,#DA,#00,#00
 
        endif
 
 
 
        if EGA
 
theropg
 
;pg,shift in pg
 
        db 8,0 ;0=крестьянин
 
        db 8,24 ;1=крестьянин с дровами?
 
        db 8,24+16 ;2=крестьянин с мешком?
 
        db 9,0 ;3=лучник
 
        db 9,16 ;4=мечник
 
        db 10,0 ;5=священник
 
        db 10,24 ;6=волшебник
 
        db 11,0 ;7=катапульта
 
        db 12,0 ;8=всадник
 
 
 
        db 13,0 ;9=пеон
 
        db 13,24 ;10=пеон с дровами?
 
        db 13,24+16 ;11=пеон с мешком?
 
        db 14,0 ;12=лангольер
 
        db 14,16 ;13=кунг
 
        db 15,0 ;14=некромант
 
        db 15,24 ;15=варлок
 
        db 16,0 ;16=катапульта на гусеницах
 
        db 17,0 ;17=грюнвер
 
 
 
        db 18,0 ;18=паук
 
        db 18,24 ;19=скелет
 
        db 19,0 ;20=скорпион
 
        db 19,24 ;21=звезда
 
        db 20,0 ;22=князь
 
        db 20,16 ;23=гризольда
 
        db 21,0 ;24=костолом
 
        db 22,0 ;25=демон
 
        db 23,0 ;26=стеногрыз
 
        
 
;tbodypg ;все 16 рисунков в pg 24
 
;pg,shift in pg
 
 
 
;0..3=человек (меньше=дохлее)
 
;4..7=кунг (меньше=дохлее)
 
;8..10=шарик (меньше=дохлее)
 
;11=звезда
 
;12=мокрое место
 
;13=паук
 
;14=скорпион
 
;15=скелет
 
;(>=17 используется для трупа катапульты)
 
        
 
        endif
 
 
 
;для рамки
 
;в зависимости от полного ID
 
;0: 16x16, 1: 24x24, 2: 24x16
 
AT_TY_  DEFB 0,0,0,0,0, 0,0,1,1
 
;далее продолжение в AT_TYP
 
;для героя
 
;в зависимости от ID (для кунгов вычитается 9)
 
;0: 16x16, 1: 24x24, 2: 24x16
 
AT_TYP  DEFB 0,0,0,0,0, 0,0,1,1
 
        DEFB 0,0,0,0,0,0, 2,2,2
 
;0=крестьянин
 
;1=крестьянин с дровами?
 
;2=крестьянин с мешком?
 
;3=лучник
 
;4=мечник
 
;5=священник
 
;6=волшебник
 
;7=катапульта
 
;8=всадник
 
 
 
;9=пеон
 
;10=пеон с дровами?
 
;11=пеон с мешком?
 
;12=лангольер
 
;13=кунг
 
;14=некромант
 
;15=варлок
 
;16=катапульта на гусеницах
 
;17=грюнвер
 
 
 
;18=паук
 
;19=скелет
 
;20=скорпион
 
;21=звезда
 
;22=князь
 
;23=гризольда
 
;24=костолом
 
;25=демон
 
;26=стеногрыз
 
 
 
;виды трупов:
 
;0..3=человек (меньше=дохлее)
 
;4..7=кунг (меньше=дохлее)
 
;8..10=шарик (меньше=дохлее)
 
;11=звезда
 
;12=мокрое место
 
;13=паук
 
;14=скорпион
 
;15=скелет
 
;(>=17 используется для трупа катапульты)
 
 
 
XY0pos  LD A,(X0) ;выч смещ _X0pos в пикс
 
        CALL _xy0
 
        LD (_X0pos),HL
 
        LD A,(Y0)
 
        CALL _xy0
 
        LD (_Y0pos),HL
 
        RET
 
_xy0    LD L,A
 
        LD H,0
 
        LD D,H
 
        LD E,H
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,HL
 
        EX DE,HL
 
        XOR A
 
        SBC HL,DE
 
        RET
 
 
 
        if EGA==0
 
;*M+
 
        macro HENs lbl
 
        POP DE
 
        DJNZ $+5
 
        JP SET_SP
 
        INC H
 
        LD A,H
 
        AND 7
 
        JP NZ,lbl
 
        LD A,L
 
        ADD A,32
 
        LD L,A
 
        JR C,lbl
 
        LD A,H
 
        SUB 8
 
        LD H,A
 
        JR lbl
 
        ENDM
 
 
 
HE_N    DEFW HE0,HE1,HE2,HE3,HE4,HE5,HE6,HE7
 
HE_L    DEFW SET_SP,HE1L,HE2L,HE3L,HE4L,HE5L,HE6L,HE7L
 
 
 
;HE0L   EQU SET_SP
 
 
 
HE0     LD A,(HL)
 
        OR E
 
        XOR D
 
        LD (HL),A
 
        HENs HE0
 
 
 
HE1     LD A,E
 
        RRCA
 
        LD C,A
 
        AND #7F
 
        OR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #80
 
        INC L
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RRCA
 
        LD C,A
 
        AND #80
 
        XOR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #7F
 
        DEC L
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE1
 
 
 
 
 
HE2     LD A,E
 
        RRCA
 
        RRCA
 
        LD C,A
 
        AND #3F
 
        OR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #C0
 
        INC L
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RRCA
 
        RRCA
 
        LD C,A
 
        AND #C0
 
        XOR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #3F
 
        DEC L
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE2
 
 
 
HE3     LD A,E
 
        RRCA
 
        RRCA
 
        RRCA
 
        LD C,A
 
        AND #1F
 
        OR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #E0
 
        INC L
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RRCA
 
        RRCA
 
        RRCA
 
        LD C,A
 
        AND #E0
 
        XOR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #1F
 
        DEC L
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE3
 
 
 
HE4     LD A,E
 
        RRCA
 
        RRCA
 
        RRCA
 
        RRCA
 
        LD C,A
 
        AND #F
 
        OR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #F0
 
        INC L
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RRCA
 
        RRCA
 
        RRCA
 
        RRCA
 
        LD C,A
 
        AND #F0
 
        XOR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #F
 
        DEC L
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE4
 
 
 
HE5     LD A,E
 
        RLCA
 
        RLCA
 
        RLCA
 
        LD C,A
 
        AND #7
 
        OR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #F8
 
        INC L
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RLCA
 
        RLCA
 
        RLCA
 
        LD C,A
 
        AND #F8
 
        XOR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #7
 
        DEC L
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE5
 
 
 
HE6     LD A,E
 
        RLCA
 
        RLCA
 
        LD C,A
 
        AND #3
 
        OR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #FC
 
        INC L
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RLCA
 
        RLCA
 
        LD C,A
 
        AND #FC
 
        XOR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #3
 
        DEC L
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE6
 
 
 
HE7     LD A,E
 
        RLCA
 
        LD C,A
 
        AND #1
 
        OR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #FE
 
        INC L
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RLCA
 
        LD C,A
 
        AND #FE
 
        XOR (HL)
 
        LD (HL),A
 
        LD A,C
 
        AND #1
 
        DEC L
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE7
 
 
 
HE1L    LD A,E
 
        RRCA
 
        AND #80
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RRCA
 
        AND #80
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE1L
 
 
 
HE2L    LD A,E
 
        RRCA
 
        RRCA
 
        AND #C0
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RRCA
 
        RRCA
 
        AND #C0
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE2L
 
 
 
HE3L    LD A,E
 
        RRCA
 
        RRCA
 
        RRCA
 
        AND #E0
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RRCA
 
        RRCA
 
        RRCA
 
        AND #E0
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE3L
 
 
 
HE4L    LD A,E
 
        RRCA
 
        RRCA
 
        RRCA
 
        RRCA
 
        AND #F0
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RRCA
 
        RRCA
 
        RRCA
 
        RRCA
 
        AND #F0
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE4L
 
 
 
HE5L    LD A,E
 
        RLCA
 
        RLCA
 
        RLCA
 
        AND #F8
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RLCA
 
        RLCA
 
        RLCA
 
        AND #F8
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE5L
 
 
 
HE6L    LD A,E
 
        RLCA
 
        RLCA
 
        AND #FC
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RLCA
 
        RLCA
 
        AND #FC
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE6L
 
 
 
HE7L    LD A,E
 
        RLCA
 
        AND #FE
 
        OR (HL)
 
        LD (HL),A
 
        LD A,D
 
        RLCA
 
        AND #FE
 
        XOR (HL)
 
        LD (HL),A
 
        HENs HE7L
 
        
 
        endif ;~EGA
 
 
 
BCOORD  LD      A,D ;de(0-191,0-31) -- hl
 
        RRCA
 
        RRCA
 
        RRCA
 
        AND     %00011000
 
        LD      H,A
 
        LD      A,D
 
        AND     %00000111
 
        ADD     A,H
 
        ADD     A,DSCR/256
 
        LD      H,A
 
        LD      A,D
 
        RLA
 
        RLA
 
        AND     %11100000
 
        OR      E
 
        LD      L,A
 
        RET
 
 
 
XPUT    ;формированиe вывода для героя IX
 
;IY=блок координат героя
 
        XOR A
 
_XPUT   EX AF,AF ;Z-герой, NZ-(A=1:рамка/A>1:снаряд)
 
        LD L,(IY+2) ;получение Xh Yh SHIFTh
 
        LD H,(IY+3) ;Ypos
 
        LD DE,(_Y0pos)
 
        ADD HL,DE
 
        LD A,H
 
        OR A
 
        RET NZ
 
        LD A,L
 
        CP 192+32;24
 
        RET NC
 
        LD (Yh),A
 
        LD L,(IY+0)
 
        LD H,(IY+1) ;Xpos
 
        LD DE,(_X0pos)
 
        ADD HL,DE
 
        LD A,H
 
        OR A
 
        JR NZ,UT3
 
        LD A,L
 
        CP 192
 
        RET NC
 
        LD L,A
 
        SRL L
 
        JR UT2
 
UT3     INC A
 
        RET NZ
 
        LD A,L
 
        CP 192+32;40
 
        RET C
 
        LD L,A
 
        SRA L
 
UT2     AND 7
 
        LD (SHIFTh),A
 
        SRA L
 
        SRA L
 
        LD A,L
 
        JP M,UT21
 
        CP 24
 
        RET NC
 
        JR UT22
 
UT21    CP -8
 
        RET C
 
UT22    LD (Xh),A
 
        ;получть Wh,Hh,IMGh, выбрать страницу
 
        
 
        if EGA
 
 
 
        EX AF,AF
 
        JR Z,WY_0 ;героя, а не рамка/снаряд
 
        ;для рамки
 
        DEC A
 
        JP NZ,WYbull;->обр снарядов ;заполняет данные и переходит на HeF1
 
        CALL MEM1
 
        LD A,(IX+4) ;ID (0..26)
 
        LD HL,AT_TY_
 
        CALL BA ;hl+=a: A=(HL)
 
        DEC A
 
        JR Z,WYr33
 
        ;LD BC,#1002 ;HhWh
 
        ;LD DE,fr2x2h
 
        ld iy,fr2x2h;testspr+4
 
        ;ld bc,0x1002 ;HhWh
 
        JR WYr
 
WYr33   ;LD BC,#1803 ;HhWh
 
        ;LD DE,fr3x3h
 
        ld iy,fr3x3h;testspr+4
 
        ;ld bc,0x1803 ;HhWh
 
WYr     JP HeF1
 
WY_0    
 
        LD A,(IX+0) ;x героя (0=труп)
 
        OR A
 
        LD A,(IX+4) ;ID (0..26)
 
        JR NZ,WY2
 
        ;для трупа a=вид трупа
 
         add a,24
 
        add a,a
 
        ld (WYbody_where),a
 
         ld a,23;24
 
        call _128
 
WYbody_where=$+2 ;LSB
 
        ld iy,(0xc000)
 
        JP HeF1
 
        ;
 
WY2     ;для героя
 
        ;ld a,24;8
 
 
 
        ld hl,theropg ;pg, shift in pg
 
        add a,a
 
        add a,l
 
        ld l,a
 
        jr nc,$+3
 
        inc h
 
        ld a,(hl)
 
        call _128
 
        inc hl
 
 
 
        LD D,(IX+2) ;направление (0..7)
 
        LD A,(IX+3) ;фаза (=0 - целиком в квадрате) ;или (%1ibttttt, где i-удар b-назад ttttt-задержка) ;или (%10000xxx, где ххх-ожидание свободного прохода)
 
        CP #80
 
        JR C,H221 ;не бьёт
 
        CP #A0
 
        LD A,0
 
        JR C,H221 ;не фаза удара
 
        LD A,D ;направление (0..7)
 
        add a,16
 
        JR H222
 
H221    
 
        AND 1 ;шаг0 или шаг1
 
        ADD A,D
 
        ADD A,D ;a=направление*2 + шаг
 
H222
 
        add a,(hl) ;ahift in pg
 
        add a,a
 
        ld (H222_where),a
 
 
 
        ;ld iy,testspr+4
 
         ;jr $
 
H222_where=$+2 ;LSB
 
        ld iy,(0xc000)
 
        ;ld bc,0x1002 ;HhWh
 
 
 
        else
 
;       --------------------
 
        EX AF,AF
 
        JR Z,WY_0 ;героя, а не рамка/снаряд
 
        ;для рамки
 
        DEC A
 
      if EGA==0
 
        JP NZ,WYbull;->обр снарядов
 
      endif
 
        CALL MEM1
 
        LD A,(IX+4) ;ID (0..26)
 
        LD HL,AT_TY_
 
        CALL BA ;hl+=a: A=(HL)
 
        DEC A
 
        JR Z,WYr33
 
        LD BC,#1002 ;HhWh
 
        LD DE,fr2x2h
 
        JR WYr
 
WYr33   LD BC,#1803 ;HhWh
 
        LD DE,fr3x3h
 
WYr     JP HeF1
 
WY_0    LD A,(IX+0) ;x героя (0=труп)
 
        OR A
 
        LD A,(IX+4) ;ID (0..26)
 
        JR NZ,WY2
 
        ;для трупа a=вид трупа
 
        CP 17
 
        JR C,WYTr
 
        CALL MEM6 ;труп катап
 
        LD DE,WMISC3 ;gfxdata трупа катапульты
 
        LD BC,#1803 ;HhWh
 
        JP HeF1
 
WYTr    ADD A,A
 
        ADD A,A
 
        ADD A,A
 
        LD L,A
 
        LD H,0
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,HL ;вид трупа*64
 
        LD DE,WMISC2
 
        ADD HL,DE
 
        EX DE,HL ;gfxdata
 
        CALL MEM1
 
        LD BC,#1002 ;HhWh
 
        JP HeF1
 
        ;
 
WY2     ;для героя
 
        LD E,A ;ID (0..26)
 
        SUB 9
 
        JR NC,WY1
 
        if 1==0
 
        LD A,4 ;люди
 
        else
 
        call MEM_humans
 
        endif
 
        JR WY0
 
WY1     LD E,A ;ID - 9 (0..17)
 
        CP 9
 
        JR C,WY04
 
        CP 16
 
        if 1==0
 
        LD A,6 ;креат 18-24
 
        JR C,WY0
 
        XOR A   ;креат 25-26
 
        JR WY0
 
        else
 
        jr c,WY_MEM_char0
 
        call MEM_char1 ;креат 25-26
 
        JR WY0
 
WY_MEM_char0
 
        call MEM_char0 ;креат 18-24
 
        JR WY0
 
        endif
 
WY04    
 
        if 1==0
 
        LD A,3  ;кунги
 
        else
 
        call MEM_kungs
 
        endif
 
WY0     
 
        if 1==0
 
        CALL MEM ;page
 
        endif
 
        LD A,E ;ID (0..26)
 
        LD HL,AT_TYP
 
        CALL BA ;hl+=a: A=(HL)
 
        CP 1
 
        LD D,(IX+2) ;направление (0..7)
 
        LD A,(IX+3) ;фаза (=0 - целиком в квадрате) ;или (%1ibttttt, где i-удар b-назад ttttt-задержка) ;или (%10000xxx, где ххх-ожидание свободного прохода)
 
        JR Z,H3x3
 
        JP NC,H3x2
 
H2x2    CP #80
 
        JR C,H221 ;не бьёт
 
        CP #A0
 
        LD A,0
 
        JR C,H221 ;не фаза удара
 
        LD A,D ;направление (0..7)
 
        LD BC,AT_WAR
 
        JR H222
 
H221    LD BC,AT_HER
 
        AND 1 ;шаг0 или шаг1
 
        ADD A,D
 
        ADD A,D ;a=направление*2 + шаг
 
H222    ADD A,A
 
        ADD A,A
 
        ADD A,A
 
        ADD A,A
 
        LD L,A
 
        LD H,0
 
        ADD HL,HL
 
        ADD HL,HL ;*64
 
        LD A,E ;ID
 
        EX DE,HL
 
        LD L,C
 
        LD H,B
 
        LD BC,#1002 ;HhWw
 
H225    CALL BA
 
        LD H,A
 
        LD L,0
 
        ADD HL,DE
 
        EX DE,HL
 
        JR HeF1
 
        ;
 
        ;H3x2 - в WLIB2x3
 
        ;
 
H3x3    CP #80
 
        JR C,H331 ;не бьёт
 
        CP #A0
 
        LD A,0
 
        JR C,H331 ;не фаза удара
 
        LD BC,#ED00 ;gfxdata
 
        LD A,D ;направление
 
        JR H332
 
H331    LD BC,#E400 ;gfxdata
 
        AND 1 ;шаг0 или шаг1
 
        ADD A,D
 
        ADD A,D
 
        LD D,A ;направление*2 + шаг
 
H332    ADD A,A
 
        ADD A,D
 
        LD D,A
 
        ADD A,A
 
        ADD A,D
 
        LD L,A
 
        LD H,0
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,HL ;*144
 
        ADD HL,BC ;+gfxdata
 
        LD BC,#1803 ;HhWh
 
        LD A,E ;ID
 
        CP 7
 
        JR Z,H333 ;катапульта на колёсах
 
        LD DE,#D80
 
        ADD HL,DE ;катапульта на гусеницах
 
H333    EX DE,HL
 
        endif ;~EGA
 
;       --------------------
 
HeF1    ;корректировка ширины,длины и др. по границам окна
 
        if EGA
 
        ld c,(iy-4) ;Wh
 
        srl c
 
        srl c
 
        ld b,(iy-3) ;Hh
 
        endif
 
 
 
;YhXh (Xh в знакоместах)
 
;SHIFTh = 0..7 (xlow)
 
;bc=HhWh (Wh в знакоместах)
 
;de=gfxdata
 
        LD (Wh),BC
 
        LD HL,(Xh)
 
        LD A,H
 
        SUB B
 
        LD (Yh),A
 
        
 
        if EGA==0
 
        
 
        LD A,L
 
        CP 24
 
        JR NC,eF3
 
        SUB 24
 
        NEG
 
        CP C
 
        JR NC,eF4
 
        LD C,A
 
        JR eF4
 
eF3     INC A
 
        LD L,A
 
        ADD A,C
 
         RET M
 
         RET Z
 
        LD C,A
 
        LD A,-1
 
        LD (Xh),A
 
        LD A,L
 
        NEG
 
        LD L,A
 
        JR Z,eF4
 
        XOR A
 
eF5     ADD A,B
 
        ADD A,B
 
        DEC L
 
        JR NZ,eF5
 
        ADD A,E
 
        LD E,A
 
        JR NC,eF4
 
        INC D
 
eF4     
 
        LD A,(Yh)
 
        CP 192
 
        JR NC,eF1
 
        SUB 192
 
        NEG
 
        CP B
 
        JR NC,eF2
 
        LD B,A
 
        JR eF2
 
eF1     LD L,A
 
        ADD A,B
 
         RET M
 
         RET Z
 
        LD B,A
 
        XOR A
 
        LD (Yh),A
 
        LD A,L
 
        NEG
 
        ADD A,A
 
        ADD A,E
 
        LD E,A
 
        JR NC,eF2
 
        INC D
 
eF2     
 
        endif
 
 
 
;собств вывод
 
;YhXh (Xh в знакоместах)
 
;HhWh (Wh в знакоместах)
 
;SHIFTh = 0..7 (xlow)
 
;de=gfxdata
 
        if EGA
 
      ;ld iy,testspr+4
 
        jp prsprega
 
        else
 
 
 
        PUSH DE
 
        LD HL,HE_N
 
        LD DE,(Xh)
 
        BIT 7,E
 
        JR Z,HRU8
 
        LD HL,HE_L
 
        LD E,0
 
HRU8    EX AF,AF
 
        LD A,(SHIFTh)
 
        CALL WT
 
        LD (JP_SUB+1),HL
 
        CALL BCOORD
 
        POP DE
 
HRU0    PUSH HL
 
        PUSH DE
 
        PUSH BC
 
        LD (IMGh),HL
 
        CALL HRUp
 
        POP BC
 
        POP DE
 
        POP HL
 
        DEC C
 
        JR Z,HRU5
 
        EX AF,AF
 
        JR NZ,HRUm
 
        INC L
 
        JR HRUm1
 
HRUm    LD A,(SHIFTh)
 
        PUSH HL
 
        LD HL,HE_N
 
        CALL WT
 
        LD (JP_SUB+1),HL
 
        POP HL
 
HRUm1   XOR A
 
        EX AF,AF
 
        LD A,(Hh)
 
        ADD A,A
 
        ADD A,E
 
        LD E,A
 
        JR NC,HRU0
 
        INC D
 
        JR HRU0
 
 
 
HRU5    RET
 
 
 
HRUp    EX DE,HL
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        INC HL
 
        LD (SET_SP+1),SP
 
        LD SP,HL
 
        LD HL,(IMGh)
 
        JP JP_SUB
 
        endif ;~EGA
 
 
 
vBUF    EQU #7E00;BUF512
 
        ;256 - eсть в строке?(ptr+1/0); 256-1_2:IX,3_4:IY,5й:next+1/null
 
vSORT   ;видео сортировка
 
        LD HL,vBUF
 
        LD DE,vBUF+1
 
        LD BC,192+24
 
        LD (HL),0
 
        LDIR
 
        ;
 
        EXX
 
        LD HL,vBUF+1+256
 
        EXX
 
        LD IX,HUMAN
 
        LD B,102
 
        LD IY,XY ;зачем отдельный массив? в каждом проходе прибавляем 4
 
vS0     LD A,(IX+0) ;x героя (0=труп)
 
        OR A
 
        JR Z,vS6 ;???
 
        LD L,(IY+0)
 
        LD H,(IY+1) ;Xpos
 
        LD DE,(_X0pos)
 
        ADD HL,DE
 
        LD A,H
 
        OR A
 
        JR NZ,vS3
 
        LD A,L
 
        CP 192
 
        JR NC,vS1
 
        JR vS4
 
vS6     LD A,(IX+1) ;y героя (0=пусто)
 
        OR A
 
        JR Z,vS1 ;нет героя
 
        LD L,0
 
        JR vS4_
 
vS3     INC A
 
        JR NZ,vS1
 
        LD A,L
 
        CP 192+40
 
        JR C,vS1
 
vS4     LD L,(IY+2)
 
        LD H,(IY+3) ;Ypos
 
        LD DE,(_Y0pos)
 
        ADD HL,DE
 
        LD A,H
 
        OR A
 
        JR NZ,vS1
 
        LD A,L
 
        CP 192+24
 
        JR NC,vS1
 
vS4_    LD H,vBUF/256
 
        LD A,(HL)
 
        OR A
 
        JR Z,vS5
 
        LD H,vBUF/256+1
 
vSM6    LD L,A
 
        LD A,(HL)
 
        OR A
 
        JR NZ,vSM6
 
vS5     EXX
 
        PUSH IX
 
        POP DE
 
        LD (HL),E
 
        INC L
 
        LD (HL),D
 
        INC L
 
        PUSH IY
 
        POP DE
 
        LD (HL),E
 
        INC L
 
        LD (HL),D
 
        INC L
 
        LD A,L
 
        LD (HL),0
 
        INC L
 
        EXX
 
        LD (HL),A
 
        RET Z ;более 51 героя в экране
 
vS1     LD DE,16
 
        ADD IX,DE ;следующий герой
 
        LD E,4
 
        ADD IY,DE ;следующий блок координат
 
        DJNZ vS0
 
        RET
 
 
 
vXPUT   ;отсорт вывод
 
        CALL outSEL
 
        LD HL,vBUF
 
vX0     LD A,(HL)
 
        OR A
 
        JR Z,vX1
 
        PUSH HL
 
        LD H,vBUF/256+1
 
vX2     LD L,A
 
        PUSH HL
 
        DEC L
 
        LD D,(HL)
 
        DEC L
 
        LD E,(HL)
 
        PUSH DE
 
        POP IY ;адрес в блоке координат
 
        DEC L
 
        LD D,(HL)
 
        DEC L
 
        LD E,(HL)
 
        PUSH DE
 
        POP IX ;адрес героя
 
        CALL XPUT
 
        POP HL
 
        LD A,(HL)
 
        OR A
 
        JR NZ,vX2
 
        POP HL
 
vX1     INC L
 
        LD A,L
 
        CP 192+24
 
        JR C,vX0
 
        RET
 
 
 
vrYLF   LD A,#D8 ;ограничители
 
        LD HL,#1000
 
        JR vrYs
 
vrYRT   LD A,#FF
 
        LD HL,#C098
 
vrYs    LD DE,#D800
 
        JR vr_
 
vrXUP   LD DE,#2800
 
        JR vrXs
 
vrXDW   LD DE,#D8B0
 
vrXs    LD A,#D8
 
        LD HL,#C000
 
vr_     CALL vrSET
 
        CALL XY0pos
 
        ;сортировка по окну
 
        LD HL,vBUF
 
        LD DE,vBUF+1
 
        LD BC,256
 
        LD (HL),0
 
        LDIR
 
        ;
 
        EXX
 
        LD HL,vBUF+256
 
        EXX
 
        LD IX,HUMAN
 
        LD B,102
 
        LD IY,XY
 
vrS0    LD A,(IX)
 
        OR A
 
        JR Z,vrS6
 
        LD L,(IY+0)
 
        LD H,(IY+1)
 
        LD DE,(_X0pos)
 
        ADD HL,DE
 
        LD A,H
 
        OR A
 
        JR NZ,vrS3
 
        LD A,L
 
vrH     CP 0    ;<-H
 
        JR NC,vrS1
 
vrL     CP 0    ;<-L
 
        JR C,vrS1
 
        JR vrS4
 
vrS6    LD A,(IX+1)
 
        OR A
 
        JR Z,vrS1
 
        LD L,0
 
        JR vrS4_
 
vrS3    INC A
 
        JR NZ,vrS1
 
        LD A,L
 
vrA     CP 0    ;<-A
 
        JR C,vrS1
 
vrS4    LD L,(IY+2)
 
        LD H,(IY+3)
 
        LD DE,(_Y0pos)
 
        ADD HL,DE
 
        LD A,H
 
        OR A
 
        JR NZ,vrS1
 
        LD A,L
 
vrD     CP 0    ;<-D
 
        JR NC,vrS1
 
vrE     CP 0    ;<-E
 
        JR C,vrS1
 
vrS4_   LD H,vBUF/256
 
        LD A,(HL)
 
        OR A
 
        JR Z,vrS5
 
        LD H,vBUF/256+1
 
vrSM6   LD L,A
 
        LD A,(HL)
 
        OR A
 
        JR NZ,vrSM6
 
vrS5    EXX
 
        PUSH IX
 
        POP DE
 
        LD (HL),E
 
        INC L
 
        LD (HL),D
 
        INC L
 
        PUSH IY
 
        POP DE
 
        LD (HL),E
 
        INC L
 
        LD (HL),D
 
        INC L
 
        LD A,L
 
        LD (HL),0
 
        INC L
 
        EXX
 
        LD (HL),A
 
        RET Z ;более 51 героя в экране
 
vrS1    LD DE,16
 
        ADD IX,DE
 
        LD E,4
 
        ADD IY,DE
 
        DJNZ vrS0
 
vrS51   XOR A
 
        LD L,A
 
        LD H,A
 
        LD D,A
 
        LD E,A
 
vrSET   LD (vrA+1),A
 
        LD A,L
 
        LD (vrL+1),A
 
        LD A,H
 
        LD (vrH+1),A
 
        LD A,E
 
        LD (vrE+1),A
 
        LD A,D
 
        LD (vrD+1),A
 
        RET
 
 
 
outSEL  ;выв выбр об'ектов и рамки цели
 
        CALL STD
 
        LD HL,sel_ti
 
        LD A,(HL)
 
        OR A
 
        JR Z,uS3
 
        DEC (HL)
 
        LD A,(TIC)
 
        RRCA
 
        JR C,uS3
 
        DEC HL
 
        LD A,(HL)
 
        BIT 7,A
 
        JR NZ,uS5
 
        ;рамка героя-цели
 
        CALL N_IXIY
 
        LD A,(IX+0)
 
        OR A
 
        JR Z,uS3
 
        LD A,1 ;nz,A=1
 
        CALL _XPUT
 
        JR uS3
 
uS5     ;рамка здания-цели
 
        AND #7F
 
        CALL uS6
 
uS3     LD A,(SEL_T) ;объекты
 
        OR A
 
        RET Z
 
        LD HL,SEL_N
 
        CP 7
 
        JR C,uS4
 
        JR NZ,uS1
 
        LD A,1
 
uS4     LD B,A
 
uS0     PUSH BC
 
        PUSH HL
 
        LD A,(HL)
 
        CALL N_IXIY
 
        XOR A
 
        INC A ;nz,A=1
 
        CALL _XPUT
 
        POP HL
 
        INC HL
 
        POP BC
 
        DJNZ uS0
 
        RET
 
uS1     ;выд.здания
 
        LD A,(HL)
 
uS6     CALL B_IX
 
        LD A,(IX+0)
 
        OR A
 
        JP NZ,_BPUT
 
        RET
 
 
 
B_IX    ;получить IX здания по номеру А
 
        PUSH HL
 
        PUSH DE
 
        ADD A,A
 
        LD L,A
 
        LD H,0
 
        ADD HL,HL
 
        ADD HL,HL
 
        LD DE,MINE
 
        ADD HL,DE
 
        PUSH HL
 
        POP IX
 
        POP DE
 
        POP HL
 
        RET
 
 
 
N_IXIY  ;получить IX,IY героя по номеру А
 
        PUSH AF
 
        ADD A,A
 
        LD L,A
 
        LD H,0
 
        ADD HL,HL
 
        LD A,L
 
        ADD A,XY&255
 
        LD L,A
 
        LD A,XY/256
 
        ADC A,H
 
        LD H,A
 
        PUSH HL
 
        POP IY
 
        POP AF
 
N_IX    ADD A,A
 
        LD L,A
 
        LD H,0
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,HL
 
        LD A,HUMAN/256
 
        ADD A,H
 
        LD H,A
 
        PUSH HL
 
        POP IX
 
        RET
 
 
 
 
 
_BPUT   ;выв рамки выбора зд
 
 
 
        if EGA
 
        CALL HL_IX0
 
        LD A,(IX+2)
 
        CP 8
 
        ld c,4*8-1
 
        JR Z,_Bsmal
 
        CP 18
 
        JR Z,_Bsmal
 
        ld c,6*8-1
 
_Bsmal
 
;h,l=координаты центра здания на карте
 
        LD de,(X0)
 
        LD A,L
 
        SUB e
 
        ;CP 12
 
        ;RET NC
 
         inc a
 
         cp 12+2
 
         dec a
 
         ret nc
 
        dec a
 
        add a,a
 
        add a,a
 
        add a,a
 
        add a,a
 
        ld e,a
 
        add a,c
 
        ld l,a
 
        
 
        LD A,H
 
        SUB d
 
        ;CP 12
 
        ;RET NC
 
         inc a
 
         cp 12+2
 
         dec a
 
         ret nc
 
        dec a
 
        add a,a
 
        add a,a
 
        add a,a
 
        add a,a
 
        ld d,a
 
        add a,c
 
        ld h,a
 
        
 
        ld a,0xff
 
        ex af,af'
 
;de=top left
 
;hl=bottom right
 
;a'=pattern
 
        jp outBOXsolid
 
        
 
        else
 
 
 
        CALL HL_IX0
 
        LD A,(IX+2)
 
        CP 8
 
        JR Z,_Bsmal
 
        CP 18
 
        JR Z,_Bsmal
 
        DEC L
 
        INC H;/8
 
        PUSH HL
 
        LD DE,#40C0
 
        CALL bJ0v
 
        LD DE,#8000
 
        CALL C,bJ1h_
 
        POP HL
 
        INC L;/7
 
        PUSH HL
 
        LD D,#00
 
        CALL bJ0h_
 
        POP HL
 
        INC L;/6
 
        PUSH HL
 
        LD DE,#0203
 
        CALL bJ1v
 
        LD DE,#0001
 
        DEC L
 
        CALL C,bJ1h_
 
        POP HL
 
        DEC H;/5
 
        PUSH HL
 
        LD DE,#0203
 
        CALL bJ1v
 
        POP HL
 
        DEC H;/4
 
        PUSH HL
 
        CALL bJ1v
 
        LD DE,#0001
 
        DEC L
 
        CALL C,bJ1h
 
        POP HL
 
        DEC L;/3
 
        PUSH HL
 
        LD DE,#0000
 
        CALL bJ0h
 
        POP HL
 
        DEC L;/2
 
        PUSH HL
 
        LD DE,#40C0
 
        CALL bJ0v
 
        LD DE,#8000
 
        CALL C,bJ1h
 
        POP HL
 
        INC H;/1
 
        LD DE,#40C0
 
        JP bJ0v
 
_Bsmal  DEC L;\4
 
        PUSH HL
 
        LD DE,#40C0
 
        CALL bJ0v
 
        LD DE,#8000
 
        CALL C,bJ1h_
 
        POP HL
 
        INC L;\3
 
        PUSH HL
 
        LD DE,#0203
 
        CALL bJ1v
 
        LD DE,#0001
 
        DEC L
 
        CALL C,bJ1h_
 
        POP HL
 
        DEC H;\2
 
        PUSH HL
 
        LD DE,#0203
 
        CALL bJ1v
 
        LD DE,#0001
 
        DEC L
 
        CALL C,bJ1h
 
        POP HL
 
        DEC L;\1
 
        LD DE,#40C0
 
        CALL bJ0v
 
        LD DE,#8000
 
        JP C,bJ1h
 
        RET
 
 
 
bJ0h_   ;снизу
 
        CALL bJadr
 
        RET NC
 
bJ1h_   LD A,L
 
        ADD A,32
 
        LD L,A
 
        LD A,H
 
        ADD A,6
 
        LD H,A
 
        CALL bJ100
 
        LD D,E
 
        DEC H
 
        INC L
 
bJ100   XOR A
 
        XOR D
 
        LD (HL),A
 
        INC H
 
        LD (HL),#FF
 
        SCF
 
        RET
 
 
 
bJ0h    CALL bJadr;выв гориз
 
        RET NC
 
bJ1h    CALL bJ200
 
        LD D,E
 
        DEC H
 
        INC L
 
bJ200   LD (HL),#FF
 
        INC H
 
        XOR A
 
        XOR D
 
        LD (HL),A
 
        SCF
 
        RET
 
 
 
bJ1v    CALL bJadr
 
        RET NC
 
        INC L
 
        JR bJ002
 
bJ0v    ;выв верт лин для здан (HL-adr в map;DE-изобр/маска)
 
        CALL bJadr
 
        RET NC
 
bJ002   PUSH HL
 
        CALL bJ000
 
        LD A,H
 
        SUB 8
 
        LD H,A
 
        LD A,L
 
        ADD A,32
 
        LD L,A
 
        CALL bJ000
 
        POP HL
 
        SCF
 
        RET
 
bJ000   LD B,2
 
bJ001   LD A,(HL)       ;
 
        OR E
 
        XOR D
 
        LD (HL),A
 
        INC H
 
        LD A,(HL)       ;
 
        OR E
 
        XOR D
 
        LD (HL),A
 
        INC H
 
        LD A,(HL)       ;
 
        OR E
 
        XOR D
 
        LD (HL),A
 
        INC H
 
        LD A,(HL)       ;
 
        OR E
 
        XOR D
 
        LD (HL),A
 
        INC H
 
        DJNZ bJ001
 
        RET
 
 
 
bJadr   LD BC,(X0) ;выч адр (NC/C-out/ok)
 
        LD A,L
 
        SUB C
 
        CP 12
 
        RET NC
 
        LD L,A
 
        LD A,H
 
        SUB B
 
        CP 12
 
        RET NC
 
        LD H,A
 
        ADD HL,HL
 
        PUSH DE
 
        EX DE,HL
 
        CALL SCOORD
 
        POP DE
 
        XOR A
 
        CCF
 
        RET
 
 
 
        endif ;~EGA
 
 
 
        if 1==0
 
_TST#7   LD HL,dummy+0 ;isTST7[**]
 
        LD A,(HL) ;mem7!
 
        OR A
 
        RET NZ
 
        PUSH HL
 
        LD HL,(t7pos)
 
        CALL GMAP
 
        LD A,(HL)
 
        POP HL
 
        CP #7F
 
        RET NC
 
        SET 7,(HL)
 
        CALL t7dt ;7
 
        RET Z
 
        LD HL,BULL+72
 
        LD B,72
 
t7er    SET 7,(HL)
 
        INC HL
 
        DJNZ t7er
 
        RET
 
        ;
 
t7dt    LD HL,BUF512
 
        PUSH HL
 
        LD DE,t7tab
 
t7d0    LD A,(DE)
 
        INC DE
 
        OR A
 
        JR Z,t7de
 
        POP HL
 
        SUB 11
 
        PUSH HL
 
        CALL BA
 
        LD A,(DE)
 
        INC DE
 
        LD (HL),A
 
        JR t7d0
 
t7de    XOR A
 
        RET
 
        endif