;-----ЧВ Работа со спрайтами ---
 
step_B  EQU     0 ;нач шаг курс
 
oumDEL  EQU     3 ;задержка на вывод карты
 
ouFAST  EQU     5 ;ускорение вывода экрана
 
 
 
;---выв.спрайтов карты----
 
SQROUT  ;hl-adr spr ;DE-scr adr
 
        if EGA
 
        call setpgsscr40008000
 
        endif
 
        LD B,D
 
        LD C,E
 
        LD E,(HL)
 
        INC L
 
        LD D,(HL)
 
        INC L
 
        
 
        if EGA
 
 
 
        LD (SQUsp),SP
 
        LD SP,HL
 
        LD L,C
 
        LD H,B
 
        
 
        ld hx,16/4
 
        jp prtile16columngo
 
prtile16column
 
        POP DE
 
prtile16columngo
 
        ld bc,40
 
        
 
        LD (HL),E ;0
 
        add hl,bc
 
        LD (HL),D
 
        add hl,bc
 
        POP DE
 
        LD (HL),E ;1
 
        add hl,bc
 
        LD (HL),D
 
        add hl,bc
 
        POP DE
 
        LD (HL),E ;2
 
        add hl,bc
 
        LD (HL),D
 
        add hl,bc
 
        POP DE
 
        LD (HL),E ;3
 
        add hl,bc
 
        LD (HL),D
 
        add hl,bc
 
        POP DE
 
        LD (HL),E ;+0
 
        add hl,bc
 
        LD (HL),D
 
        add hl,bc
 
        POP DE
 
        LD (HL),E ;+1
 
        add hl,bc
 
        LD (HL),D
 
        add hl,bc
 
        POP DE
 
        LD (HL),E ;+2
 
        add hl,bc
 
        LD (HL),D
 
        add hl,bc
 
        POP DE
 
        LD (HL),E ;+3
 
        add hl,bc
 
        LD (HL),D
 
        
 
        ld bc,0x4000-(15*40)
 
        ld a,0x9f;0xa0
 
        cp h
 
        adc hl,bc ;de = 0x4000 - ((sprhgt-1)*40)
 
        jp pe,prtile16column ;в половине случаев
 
;8000->с000 (надо 6000) или a000->e001 (надо 4001)
 
         inc a
 
        xor h
 
        ld h,a
 
         dec hx
 
         jp nz,prtile16column
 
 
 
SQUsp=$+1
 
        ld sp,0
 
        jp setpgsmain40008000
 
        
 
        else ;~EGA
 
 
 
        LD (SET_SP+1),SP
 
        LD SP,HL
 
        LD L,C
 
        LD H,B
 
        
 
        LD B,2
 
SQU1    LD (HL),E ;0
 
        INC H
 
        LD (HL),D
 
        INC H
 
        POP DE
 
        LD (HL),E ;1
 
        INC H
 
        LD (HL),D
 
        INC H
 
        POP DE
 
        LD (HL),E ;2
 
        INC H
 
        LD (HL),D
 
        INC H
 
        POP DE
 
        LD (HL),E ;3
 
        INC H
 
        LD (HL),D
 
        POP DE
 
        LD A,L
 
        ADD A,32
 
        LD L,A
 
        LD A,H
 
        SUB 7
 
        LD H,A
 
        LD (HL),E ;+0
 
        INC H
 
        LD (HL),D
 
        INC H
 
        POP DE
 
        LD (HL),E ;+1
 
        INC H
 
        LD (HL),D
 
        INC H
 
        POP DE
 
        LD (HL),E ;+2
 
        INC H
 
        LD (HL),D
 
        INC H
 
        POP DE
 
        LD (HL),E ;+3
 
        INC H
 
        LD (HL),D
 
        POP DE
 
        LD A,H
 
        SUB 7
 
        LD H,A
 
        LD A,L
 
        SUB 31
 
        LD L,A
 
        DJNZ SQU1
 
        
 
        JP SET_SP
 
        
 
        endif ;~EGA
 
 
 
P12X12  LD HL,(X0)
 
        CALL GMAP
 
        if EGA
 
        ;call setpgsscr40008000
 
        LD DE,scrbase
 
        else
 
        LD DE,DSCR
 
        endif
 
        LD C,12
 
PX0     LD B,12
 
PX1     PUSH BC
 
        PUSH HL ;adr in map
 
        PUSH DE ;adr in scr
 
        CALL GSADR
 
        CALL NC,SQROUT
 
        POP DE
 
        POP HL
 
        POP BC
 
        if EGA
 
        INC E
 
        INC E
 
        else
 
        INC E
 
        INC E
 
        endif
 
        INC HL
 
        DJNZ PX1
 
        if EGA
 
        push hl
 
        ld hl,-24+(40*16)
 
        add hl,de
 
        ex de,hl
 
        pop hl
 
        else
 
        LD A,E
 
        ADD A,40
 
        LD E,A
 
        JR NC,PX2
 
        LD A,D
 
        ADD A,8
 
        LD D,A
 
PX2     
 
        endif
 
        LD A,L
 
        ADD A,52
 
        JR NC,PX3
 
        INC H
 
PX3     LD L,A
 
        DEC C
 
        JR NZ,PX0
 
        if EGA
 
        ;call setpgsmain40008000
 
        endif
 
        RET
 
 
 
 
 
N12X12  ;покрытие невидимых полей
 
        LD HL,(X0)
 
        CALL GMAP
 
        if EGA
 
        ;call setpgsscr40008000
 
        LD DE,scrbase
 
        else
 
        LD DE,DSCR
 
        endif
 
        LD C,12
 
NPX0    LD B,12
 
NPX1    LD A,(HL)
 
        RLA
 
        JR NC,NPXN
 
        PUSH BC
 
        PUSH HL ;adr in map
 
        PUSH DE ;adr in scr
 
        if EGA
 
        ld a,28
 
        call _128
 
        ld hl,128*(383-256)+0xc000 ;тайл 383
 
        else
 
        LD HL,shadwA
 
        endif
 
        CALL SQROUT
 
        POP DE
 
        POP HL
 
        POP BC
 
NPXN    
 
        if EGA
 
        INC E
 
        INC E
 
        else
 
        INC E
 
        INC E
 
        endif
 
        INC HL
 
        DJNZ NPX1
 
        if EGA
 
        push hl
 
        ld hl,-24+(40*16)
 
        add hl,de
 
        ex de,hl
 
        pop hl
 
        else
 
        LD A,E
 
        ADD A,40
 
        LD E,A
 
        JR NC,NPX2
 
        LD A,D
 
        ADD A,8
 
        LD D,A
 
NPX2    
 
        endif
 
        LD A,L
 
        ADD A,52
 
        JR NC,NPX3
 
        INC H
 
NPX3    LD L,A
 
        DEC C
 
        JR NZ,NPX0
 
        if EGA
 
        ;call setpgsmain40008000
 
        endif
 
        RET
 
 
 
;вывод строчки при скролле
 
PXLO    LD HL,(X0)
 
        LD DE,DSCR+#10C0
 
        LD A,11
 
        ADD A,H
 
        LD H,A
 
        JR Px_
 
PXHI    LD HL,(X0)
 
        LD DE,DSCR
 
Px_     CALL GMAP
 
        LD B,12
 
PxH1    PUSH BC
 
        PUSH HL ;adr in map
 
        PUSH DE ;adr in scr
 
        CALL GSADR
 
       if EGA==0 ;TODO
 
        CALL NC,SQROUT
 
       endif
 
        POP DE
 
        POP HL
 
        POP BC
 
        INC E
 
        INC E
 
        INC L
 
        DJNZ PxH1
 
        RET
 
 
 
NXLO    LD HL,(X0)
 
        LD DE,DSCR+#10C0
 
        LD A,11
 
        ADD A,H
 
        LD H,A
 
        JR Nx_
 
NXHI    LD HL,(X0)
 
        LD DE,DSCR
 
Nx_     CALL GMAP
 
        LD B,12
 
NxH1    LD A,(HL)
 
        RLA
 
        JR NC,NxHN
 
        PUSH BC
 
        PUSH HL ;adr in map
 
        PUSH DE ;adr in scr
 
        LD HL,shadwA
 
       if EGA==0 ;TODO
 
        CALL SQROUT
 
       endif
 
        POP DE
 
        POP HL
 
        POP BC
 
NxHN    INC E
 
        INC E
 
        INC L
 
        DJNZ NxH1
 
        RET
 
 
 
PYRT    LD HL,(X0)
 
        LD DE,DSCR+22
 
        LD A,L
 
        ADD A,11
 
        LD L,A
 
        JR Py_
 
PYLF    LD HL,(X0)
 
        LD DE,DSCR
 
Py_     CALL GMAP
 
        LD B,12
 
Py1     PUSH BC
 
        PUSH HL ;adr in map
 
        PUSH DE ;adr in scr
 
        CALL GSADR
 
       if EGA==0 ;TODO
 
        CALL NC,SQROUT
 
       endif
 
        POP DE
 
        POP HL
 
        POP BC
 
        LD A,E
 
        ADD A,64
 
        LD E,A
 
        JR NC,Py2
 
        LD A,D
 
        ADD A,8
 
        LD D,A
 
Py2     LD A,L
 
        ADD A,64
 
        JR NC,Py3
 
        INC H
 
Py3     LD L,A
 
        DJNZ Py1
 
        RET
 
 
 
NYRT    LD HL,(X0)
 
        LD DE,DSCR+22
 
        LD A,L
 
        ADD A,11
 
        LD L,A
 
        JR Ny_
 
NYLF    LD HL,(X0)
 
        LD DE,DSCR
 
Ny_     CALL GMAP
 
        LD B,12
 
Ny1     LD A,(HL)
 
        RLA
 
        JR NC,NyN
 
        PUSH BC
 
        PUSH HL ;adr in map
 
        PUSH DE ;adr in scr
 
        LD HL,shadwA
 
       if EGA==0 ;TODO
 
        CALL SQROUT
 
       endif
 
        POP DE
 
        POP HL
 
        POP BC
 
NyN     LD A,E
 
        ADD A,64
 
        LD E,A
 
        JR NC,Ny2
 
        LD A,D
 
        ADD A,8
 
        LD D,A
 
Ny2     LD A,L
 
        ADD A,64
 
        JR NC,Ny3
 
        INC H
 
Ny3     LD L,A
 
        DJNZ Ny1
 
        RET
 
 
 
;------------------
 
 
 
GMAP    ; вхHL-XY, выхHL-pos in map
 
        LD A,L
 
        RLCA
 
        RLCA
 
        SRL H
 
        RRA
 
        SRL H
 
        RRA
 
        LD L,A
 
        LD A,H
 
        ADD A,MAP/256
 
        LD H,A
 
        RET
 
 
 
GMAP2   ; вхHL-XY, выхHL-pos in map2
 
        LD A,L
 
        RLCA
 
        RLCA
 
        SRL H
 
        RRA
 
        SRL H
 
        RRA
 
        LD L,A
 
        LD A,H
 
        ADD A,MAP2/256
 
        LD H,A
 
        RET
 
 
 
shadwS  ;выбор адр невидим поля
 
        LD A,(shadwT)
 
shadwS_3
 
;тут тоже точка входа (+3)
 
        PUSH AF
 
        CALL MEM1
 
        POP AF
 
        OR A
 
        LD DE,shadwA
 
        JR Z,sha0
 
        LD HL,SHADOW
 
        LD BC,32
 
        LDIR
 
        RET
 
sha0    LD A,#FF
 
        LD B,32
 
sha1    LD (DE),A
 
        INC DE
 
        DJNZ sha1
 
        RET
 
 
 
GSADR   ;вхHL-pos in map;  выхHL-adr in LAND ;NC/C-видим,не видим
 
        if EGA
 
        LD A,(HL)
 
        SLA A
 
        RET C
 
;тайл=128 байт, всего 384 тайла (3 страницы)
 
        CP 226
 
        JR NC,GSA2
 
GSA0
 
;pg26,27
 
        rrca
 
        LD h,a
 
        ld l,0
 
        rla
 
        ld a,l;0
 
        adc a,26 ;NC
 
        scf
 
        rr h
 
        rr l ;NC
 
        set 6,h
 
        jp _128
 
GSA2    CP 240
 
        JR NC,GSA3
 
        EX AF,AF'       ;вода
 
        LD A,(ANIM)
 
        OR A
 
        JR Z,GSA2A
 
GSA2C   DEC A
 
        JR Z,GSA2B
 
        EX AF,AF'
 
        ADD A,10
 
        EX AF,AF'
 
        JR GSA2C
 
GSA2B   EX AF,AF'
 
        JR GSA0        
 
GSA2A   EX AF,AF'
 
        SUB 226-112
 
        JR GSA0
 
GSAT    DEFW 1,65,64,63,-1,-65,-64,-63 ;смещение на карте до центра здания
 
GSA3
 
        RRCA ;120..127 - кайма зданий
 
        SUB 120
 
;a=0..7
 
        PUSH DE
 
        PUSH AF ;0..7 номер места около домика
 
        PUSH HL         ;здания
 
        LD HL,GSAT
 
        CALL WT ;a=(hl+a)
 
        POP DE
 
        ADD HL,DE
 
        LD A,(HL) ;нашли на карте центр здания = 78..127
 
        AND #7F
 
        CP 108
 
        JR NC,GSA3A ;>=108: домик 2x2
 
;домик 3x3
 
        SUB 78
 
        ADD A,A
 
        ADD A,A
 
        ADD A,A
 
        POP DE
 
        ADD A,D ;0..7 номер места около домика
 
        JR GSA11
 
GSA3A
 
;>=108: домик 2x2
 
        SUB 108
 
        LD E,A
 
        ADD A,A
 
        ADD A,E
 
        POP DE
 
        ADD A,D ;0..7 номер места около домика
 
        add a,368-128
 
GSA11   
 
;pg27,28
 
        POP DE
 
        LD h,a
 
        ld l,0
 
        rla
 
        ld a,l;0
 
        adc a,27 ;NC
 
        scf
 
        rr h
 
        rr l ;NC
 
        set 6,h
 
        jp _128
 
        
 
        else ;~EGA
 
 
 
        LD A,(HL)
 
        SLA A
 
        RET C
 
        CP 226
 
        JR NC,GSA2
 
GSA0    LD L,A
 
        LD H,LAND/4096
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,HL
 
        RET
 
GSA2    CP 240
 
        JR NC,GSA3
 
        EX AF,AF        ;вода
 
        LD A,(ANIM)
 
        OR A
 
        JR Z,GSA2A
 
GSA2C   DEC A
 
        JR Z,GSA2B
 
        EX AF,AF
 
        ADD A,10
 
        EX AF,AF
 
        JR GSA2C
 
GSA2B   EX AF,AF
 
        JR GSA0
 
GSA2A   EX AF,AF
 
        SUB 226-112
 
        JR GSA0
 
GSAT    DEFW 1,65,64,63,-1,-65,-64,-63
 
GSA3    RRCA
 
        SUB 120
 
        PUSH DE
 
        PUSH AF
 
        PUSH HL         ;здания
 
        LD HL,GSAT
 
        CALL WT
 
        POP DE
 
        ADD HL,DE
 
        LD A,(HL)
 
        AND #7F
 
        CP 108
 
        JR NC,GSA3A
 
        SUB 78
 
        ADD A,A
 
        ADD A,A
 
        ADD A,A
 
        POP DE
 
        ADD A,D
 
        LD DE,128*32+LAND
 
        JR GSA11
 
GSA3A   SUB 108
 
        LD E,A
 
        ADD A,A
 
        ADD A,E
 
        POP DE
 
        ADD A,D
 
        LD DE,368*32+LAND
 
GSA11   LD L,A
 
        LD H,0
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,HL
 
        ADD HL,DE
 
        POP DE
 
        RET
 
        endif ;~EGA
 
 
 
ScorrP  LD A,L
 
        ADD A,32
 
        LD L,A
 
        JR C,Sco1
 
        LD A,H
 
        SUB 8
 
        LD H,A
 
Sco1    LD A,E
 
        ADD A,32
 
        LD E,A
 
        RET C
 
        LD A,D
 
        SUB 8
 
        LD D,A
 
        RET
 
 
 
ScorrM  LD A,L
 
        SUB 32
 
        LD L,A
 
        JR C,Sco3
 
        LD A,H
 
        ADD A,8
 
        LD H,A
 
Sco3    LD A,E
 
        SUB 32
 
        LD E,A
 
        RET C
 
        LD A,D
 
        ADD A,8
 
        LD D,A
 
        RET
 
 
 
;---------------
 
 
 
SdUR    CALL ScU1
 
        JP Z,ScRT
 
        CALL ScR1
 
        JP Z,ScUP1
 
        CALL SW_OFF
 
       if EGA
 
        call O12X12
 
       else
 
        ;--CALL ScU2+ScR2
 
         CALL PXLO
 
         CALL PYLF
 
         CALL SXLO
 
         CALL SYLF
 
         CALL NXLO
 
         CALL NYLF
 
        CALL MEM7
 
        CALL ScUR_
 
       endif
 
        JP ScNZ
 
 
 
SdDL    CALL ScD1
 
        JP Z,ScLF
 
        CALL ScL1
 
        JR Z,ScDW1
 
        CALL SW_OFF
 
       if EGA
 
        call O12X12
 
       else
 
        ;--CALL ScD2+ScL2
 
         CALL PXHI
 
         CALL PYRT
 
         CALL SXHI
 
         CALL SYRT
 
         CALL NXHI
 
         CALL NYRT
 
        CALL MEM7
 
        CALL ScDL_
 
       endif
 
        JP ScNZ
 
 
 
 
 
SdUL    CALL ScU1
 
        JP Z,ScLF
 
        CALL ScL1
 
        JR Z,ScUP1
 
        CALL SW_OFF
 
       if EGA
 
        call O12X12
 
       else
 
        ;--CALL ScU2+ScL2
 
         CALL PXLO
 
         CALL PYRT
 
         CALL SXLO
 
         CALL SYRT
 
         CALL NXLO
 
         CALL NYRT
 
        CALL MEM7
 
        CALL ScUL_
 
       endif
 
        JR ScNZ
 
 
 
 
 
SdDR    CALL ScD1
 
        JP Z,ScRT
 
        CALL ScR1
 
        JR Z,ScDW1
 
        CALL SW_OFF
 
       if EGA
 
        call O12X12
 
       else
 
        ;--CALL ScD2+ScR2
 
         CALL PXHI
 
         CALL PYLF
 
         CALL SXHI
 
         CALL SYLF
 
         CALL NXHI
 
         CALL NYLF
 
        CALL MEM7
 
        CALL ScDR_
 
       endif
 
        JR ScNZ
 
 
 
ScDW    CALL ScD1
 
        JP Z,noROT
 
ScDW1   CALL SW_OFF
 
       if EGA
 
        call O12X12
 
       else
 
        CALL ScD2
 
        CALL MEM7
 
        JP ScD_
 
ScD2    CALL PXHI
 
        CALL SXHI
 
        CALL NXHI
 
       endif
 
        JR ScNZ
 
ScD1    LD HL,Y0
 
        LD A,(HL)
 
        OR A
 
        RET Z
 
        DEC (HL)
 
        OR A
 
        RET
 
 
 
ScUP    CALL ScU1
 
        JP Z,noROT
 
ScUP1   CALL SW_OFF
 
       if EGA
 
        call O12X12
 
       else
 
        CALL ScU2
 
        CALL MEM7
 
        JP ScU_
 
ScU2    CALL PXLO
 
        CALL SXLO
 
        CALL NXLO
 
       endif
 
ScNZ    CALL BMOV
 
        LD HL,isROT
 
        LD (HL),1
 
        RET
 
ScU1    LD HL,Y0
 
        LD A,(HL)
 
        CP 52
 
        RET Z
 
        INC (HL)
 
        RET
 
 
 
ScLF    CALL ScL1
 
        JP Z,noROT
 
        CALL SW_OFF
 
       if EGA
 
        call O12X12
 
       else
 
        CALL ScL2
 
        CALL MEM7
 
        JP ScL_
 
ScL2    CALL PYRT
 
        CALL SYRT
 
        CALL NYRT
 
       endif
 
        JR ScNZ
 
ScL1    LD HL,X0
 
        LD A,(HL)
 
        CP 52
 
        RET Z
 
        INC (HL)
 
        RET
 
 
 
ScRT    CALL ScR1
 
        JP Z,noROT
 
        CALL SW_OFF
 
       if EGA
 
        call O12X12
 
       else
 
        CALL ScR2
 
        CALL MEM7
 
        JP ScR_
 
ScR2    CALL PYLF
 
        CALL SYLF
 
        CALL NYLF
 
       endif
 
        JR ScNZ
 
ScR1    LD HL,X0
 
        LD A,(HL)
 
        OR A
 
        RET Z
 
        DEC (HL)
 
        OR A
 
        RET
 
 
 
        if EGA==0
 
 
 
ScD_    CALL B_SETI
 
        LD HL,SCR+#17A0
 
        LD DE,SCR+#17E0
 
        LD BC,#1602
 
ScD0    PUSH BC
 
        CALL B_NXTI
 
        LD A,8
 
ScD10   PUSH HL
 
        PUSH DE
 
        LDI;
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI;
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI;
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        POP DE
 
        POP HL
 
        DEC H
 
        DEC D
 
        DEC A
 
        JP NZ,ScD10
 
        CALL ScorrM
 
        CALL BL_ONN
 
        POP BC
 
        DJNZ ScD0
 
        DEC C
 
        JP Z,B_U2B
 
        LD L,E
 
        LD A,D
 
        XOR #60 ;!
 
        LD H,A
 
        LD B,2
 
        JR ScD0
 
 
 
ScDR_   CALL B_SETI
 
        LD HL,SCR+#17A0+21
 
        LD DE,SCR+#17E0+23
 
        LD BC,#1602
 
ScDR0   PUSH BC
 
        CALL B_NXTI
 
        LD A,8
 
ScDR1   EX AF,AF
 
        PUSH HL
 
        PUSH DE
 
        LD BC,22
 
        LDDR
 
        LD L,E
 
        LD A,D
 
        XOR #60;!
 
        LD H,A
 
        LDD
 
        LDD
 
        POP DE
 
        POP HL
 
        DEC H
 
        DEC D
 
        EX AF,AF
 
        DEC A
 
        JP NZ,ScDR1
 
        CALL ScorrM
 
        CALL BL_ONN
 
        POP BC
 
        DJNZ ScDR0
 
        DEC C
 
        JP Z,B_U2B
 
        LD L,E
 
        LD A,D
 
        XOR #60
 
        LD H,A
 
        LD B,2
 
        JR ScDR0
 
 
 
ScDL_   CALL B_SETI
 
        LD HL,SCR+#17A0+2
 
        LD DE,SCR+#17E0
 
        LD BC,#1602
 
ScDL0   PUSH BC
 
        CALL B_NXTI
 
        LD A,8
 
ScDL1   EX AF,AF
 
        PUSH HL
 
        PUSH DE
 
        LD BC,22
 
        LDIR
 
        LD L,E
 
        LD A,D
 
        XOR #60;!
 
        LD H,A
 
        LDI
 
        LDI
 
        POP DE
 
        POP HL
 
        DEC H
 
        DEC D
 
        EX AF,AF
 
        DEC A
 
        JP NZ,ScDL1
 
        CALL ScorrM
 
        CALL BL_ONN
 
        POP BC
 
        DJNZ ScDL0
 
        DEC C
 
        JP Z,B_U2B
 
        LD L,E
 
        LD A,D
 
        XOR #60
 
        LD H,A
 
        LD B,2
 
        JR ScDL0
 
 
 
ScU_    CALL B_SETN
 
        LD HL,SCR+#0040
 
        LD DE,SCR
 
        LD BC,#1602
 
ScU0    PUSH BC
 
        CALL B_NXTN
 
        LD A,8
 
ScU10   PUSH HL
 
        PUSH DE
 
        LDI;
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI;
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI;
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        POP DE
 
        POP HL
 
        INC H
 
        INC D
 
        DEC A
 
        JP NZ,ScU10
 
        CALL ScorrP
 
        CALL BL_ONN
 
        POP BC
 
        DJNZ ScU0
 
        DEC C
 
        JP Z,B_U2B
 
        LD L,E
 
        LD A,D
 
        XOR #60;!
 
        LD H,A
 
        LD B,2
 
        JR ScU0
 
 
 
ScUR_   CALL B_SETN
 
        LD HL,SCR+#0040+21
 
        LD DE,SCR+23
 
        LD BC,#1602
 
ScUR0   PUSH BC
 
        CALL B_NXTN
 
        LD A,8
 
ScUR1   EX AF,AF
 
        PUSH HL
 
        PUSH DE
 
        LD BC,22
 
        LDDR
 
        LD L,E
 
        LD A,D
 
        XOR #60;!
 
        LD H,A
 
        LDD
 
        LDD
 
        POP DE
 
        POP HL
 
        INC H
 
        INC D
 
        EX AF,AF
 
        DEC A
 
        JP NZ,ScUR1
 
        CALL ScorrP
 
        CALL BL_ONN
 
        POP BC
 
        DJNZ ScUR0
 
        DEC C
 
        JP Z,B_U2B
 
        LD L,E
 
        LD A,D
 
        XOR #60;!
 
        LD H,A
 
        LD B,2
 
        JR ScUR0
 
 
 
ScUL_   CALL B_SETN
 
        LD HL,SCR+#0040+2
 
        LD DE,SCR
 
        LD BC,#1602
 
ScUL0   PUSH BC
 
        CALL B_NXTN
 
        LD A,8
 
ScUL1   EX AF,AF
 
        PUSH HL
 
        PUSH DE
 
        LD BC,22
 
        LDIR
 
        LD L,E
 
        LD A,D
 
        XOR #60;!
 
        LD H,A
 
        LDI
 
        LDI
 
        POP DE
 
        POP HL
 
        INC H
 
        INC D
 
        EX AF,AF
 
        DEC A
 
        JP NZ,ScUL1
 
        CALL ScorrP
 
        CALL BL_ONN
 
        POP BC
 
        DJNZ ScUL0
 
        DEC C
 
        JP Z,B_U2B
 
        LD L,E
 
        LD A,D
 
        XOR #60;!
 
        LD H,A
 
        LD B,2
 
        JR ScUL0
 
 
 
 
 
ScL_    CALL B_SET0
 
        LD HL,SCR+2
 
        LD DE,SCR
 
        LD B,24
 
ScL00   PUSH BC
 
        CALL B_NXT0
 
        LD A,8
 
ScL0    EX AF,AF
 
        PUSH HL
 
        PUSH DE
 
        LDI;
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI;
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI;
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LDI
 
        LD L,E
 
        LD A,D
 
        XOR #60;!
 
        LD H,A
 
        LDI
 
        LDI
 
        POP DE
 
        POP HL
 
        INC H
 
        INC D
 
        EX AF,AF
 
        DEC A
 
        JR NZ,ScL0
 
        CALL ScorrP
 
        CALL BL_ONN
 
        POP BC
 
        DJNZ ScL00
 
        JP B_U2B
 
 
 
ScR_    CALL B_SET0
 
        LD HL,SCR+21
 
        LD DE,SCR+23
 
        LD B,24
 
ScR00   PUSH BC
 
        CALL B_NXT0
 
        LD A,8
 
ScR0    EX AF,AF
 
        PUSH HL
 
        PUSH DE
 
        LDD;
 
        LDD
 
        LDD
 
        LDD
 
        LDD
 
        LDD
 
        LDD
 
        LDD
 
        LDD;
 
        LDD
 
        LDD
 
        LDD
 
        LDD
 
        LDD
 
        LDD
 
        LDD
 
        LDD;
 
        LDD
 
        LDD
 
        LDD
 
        LDD
 
        LDD
 
        LD L,E
 
        LD A,D
 
        XOR #60;!
 
        LD H,A
 
        LDD
 
        LDD
 
        POP DE
 
        POP HL
 
        INC H
 
        INC D
 
        EX AF,AF
 
        DEC A
 
        JR NZ,ScR0
 
        CALL ScorrP
 
        CALL BL_ONN
 
        POP BC
 
        DJNZ ScR00
 
        JP B_U2B
 
 
 
        endif ;~EGA
 
 
 
ROTsub  DEFW ScLF,ScRT,000,ScUP,SdUL,SdUR,000,ScDW,SdDL,SdDR
 
 
 
ROTATE  LD A,(BENTER)
 
        OR A
 
        JR Z,rotCOR
 
ROt1    LD A,(CONTRB)
 
        AND %1111
 
        JR ROt2
 
rotCOR  LD C,0
 
        LD HL,(MX)
 
        LD A,L
 
        OR A
 
        JR NZ,rC1
 
        SET 1,C
 
rC1     CP 248
 
        JR C,rC2
 
        SET 0,C
 
rC2     LD A,H
 
        OR A
 
        JR NZ,rC3
 
        SET 3,C
 
rC3     CP 184
 
        JR C,rC5
 
        SET 2,C
 
rC5     LD A,(PMOUSE)
 
        OR A
 
        LD A,C
 
        JR NZ,ROt2
 
        LD A,(CONTRB)
 
        AND C
 
ROt2    OR A
 
        JR Z,noRO1
 
        CP %1011
 
        JR NC,noRO1
 
        LD HL,ROTsub-2
 
        CALL WT
 
        LD A,L
 
        OR H
 
        JR Z,noRO1
 
        PUSH HL
 
        LD A,(isROT)
 
        OR A
 
        JR NZ,RO_ON
 
        INC A
 
        LD (isSWFF),A
 
        JR RO_1
 
RO_ON   HALT
 
RO_1    CALL MEM1
 
        POP HL
 
        JP (HL)
 
noRO1   LD A,(isROT)
 
        OR A
 
        RET Z
 
noROT   CALL MEM7
 
        CALL B_OFF
 
        if EGA==0
 
        LD A,(isSWFF)
 
        OR A
 
        JR NZ,noRO2
 
        CALL V_GET1
 
        CALL V_GET2 ;get gfx under cursor before draw ;на рисуемом экране
 
        ;if EGA
 
        ;CALL V_MRK2 ;на рисуемом экране
 
        ;;CALL BLITER ;иначе показывает другой экран
 
        ;endif
 
noRO2
 
        endif
 
        XOR A
 
        LD (V_FLAG),A ;cursor on
 
        LD (isROT),A
 
        RET
 
 
 
SW_OFF
 
;before scroll
 
        LD A,(isSWFF)
 
        OR A
 
        RET Z
 
        XOR A
 
        LD (isSWFF),A
 
        LD A,2
 
        LD (V_FLAG),A ;cursor off
 
        
 
        CALL MEM7
 
        ;if EGA==0
 
        CALL V_PUT1
 
        ;endif
 
        CALL V_PUT2 ;restore gfx under cursor ;на рисуемом экране
 
 
 
        if EGA ;копируем экран
 
        call copyscreen
 
        endif
 
        
 
        JP MEM1
 
 
 
FRAME   ;выв игр оформл
 
        if EGA
 
        ret
 
        else
 
        ;jr $
 
        CALL MEM7
 
        CALL STS ;выбор основного экрана (не теневого)
 
        ;bar-color
 
        ATRs #18,#208,#50
 
        ATRs #19,#106,#70
 
        ATRs #218,#208,#50
 
        ATRs #219,#104,#60
 
        LD L,#70
 
        LD H,L
 
        LD (ATR+93),HL
 
        ATRs #418,#508,#38
 
        ATRs #41D,#401,#58
 
        ATRs #41E,#401,#68
 
        ;меню-батт
 
        ATRs #1418,#408,#68
 
        ;land-color
 
        LD A,(COLOR)
 
        AND %00111000
 
        CP #28
 
        LD A,#68
 
        JR NZ,FRA_Ls
 
        LD A,#58
 
FRA_Ls  LD (COLRsc),A
 
FRA_L   LD A,(isCOLR)
 
        OR A
 
        JR Z,FRA2
 
        LD A,(MASTER)
 
        OR A
 
        LD A,#30
 
        JR Z,FRA1
 
        LD A,#28
 
FRA1    LD (MCOLOR),A
 
        LD A,(COLOR)
 
        JR FRA_L1
 
FRA2    LD A,#38
 
        LD (MCOLOR),A
 
        LD A,#30
 
FRA_L1  PUSH AF
 
        LD E,A
 
        LD HL,0
 
        LD BC,#118
 
        CALL STS ;выбор основного экрана (не теневого)
 
        CALL ATRBAR
 
        LD HL,#017
 
        LD BC,#1801
 
        CALL ATRBAR
 
        POP AF
 
        OR #40
 
        LD E,A
 
        LD HL,#100
 
        LD BC,#1717
 
        CALL ATRBAR
 
        LD A,(MCOLOR)
 
        LD E,A
 
        LD HL,#918
 
        LD BC,#B08
 
        CALL ATRBAR
 
        LD A,#20
 
        LD (ATR+632),A
 
        LD (ATR+639),A
 
        RET
 
        endif
 
 
 
typMAP  ;определить тип карты (обычн/подземн -> LEV_T=0/1)
 
        LD HL,MAP
 
        LD A,(HL)
 
        OR A
 
        PUSH AF
 
        JR Z,iTM0
 
        ;уровень - подземелье (без зданий, если [MAP+0]==1)
 
        XOR A
 
        LD (HL),A
 
        INC A    ;A=1
 
        LD L,99 ;длина осмотра в подземельях
 
        LD E,2  ;макс число трассировок
 
        LD C,12 ;число ударов по дверям
 
        JR iTMm
 
iTM0    XOR A    ;A=0
 
        LD L,64  ;длина осмотра в обычн уровнях
 
        LD E,5
 
        LD C,60  ;число ударов по лесу
 
iTMm    LD (LEV_T),A
 
        LD A,L
 
        LD (MAXLEN),A
 
        LD A,E
 
        LD (MAXTRY),A
 
        LD A,C
 
        LD (BrWOOD),A
 
        POP AF
 
        RET
 
 
 
OUMAIN  ;выв карты/поля
 
        LD A,(isMAP)
 
        OR A
 
        JR Z,OU_SCR
 
 
 
OU_MAP  ;режим-карта
 
        LD HL,delMAP
 
        LD A,(HL)
 
        OR A
 
        JR Z,oum1
 
        DEC (HL)
 
        RET
 
oum1    LD (HL),oumDEL ;велич, задержки
 
        CALL MEM6
 
        if EGA
 
;заблокировать стрелочку только на рисуемом экране, т.е. вообще не блокировать
 
;выключить стрелочку 
 
;стереть стрелочку
 
        ;LD A,2
 
        ;LD (V_FLAG),A
 
        CALL V_PUT2 ;на рисуемом экране
 
        endif
 
        CALL MP_OUT ;6
 
        if EGA
 
;прочитать стрелочку
 
;включить стрелочку
 
        CALL V_GET_MRK2 ;на рисуемом экране
 
        ;xor a
 
        ;LD (V_FLAG),A
 
        endif
 
        CALL BLITER ;7
 
        LD HL,G_MAP1
 
        LD (G_IMG),HL
 
        RET
 
 
 
OU_SCR  ;режим-экран
 
         LD BC,#FDFE ;'F'-fast
 
         IN A,(C)
 
         AND %1000
 
         JR NZ,OU_S1
 
         LD HL,fram
 
         INC (HL)
 
         LD A,(HL)
 
         CP ouFAST
 
         RET C
 
         LD (HL),0
 
OU_S1
 
        CALL O12X12
 
        LD A,(begBOX)
 
        OR A
 
        RET NZ
 
OU_RT   CALL ROTATE
 
        LD A,(isROT)
 
        OR A
 
        JR NZ,OU_RT
 
        RET Z
 
 
 
O12X12
 
        if EGA
 
;заблокировать стрелочку только на рисуемом экране, т.е. вообще не блокировать
 
;выключить стрелочку 
 
;стереть стрелочку
 
         ;ld a,(curscrnum)
 
         ;push af
 
         ;LD A,2
 
         ;LD (V_FLAG),A ;не помогает
 
        CALL V_PUT2 ;на рисуемом экране
 
        endif
 
        if EGA==0
 
        CALL MEM7
 
        CALL M_PLAT ;7 ;показать площадку под стр-во
 
        endif
 
        CALL MEM1
 
        CALL P12X12 ;1
 
        CALL S12X12 ;m
 
        CALL N12X12 ;1
 
        if EGA
 
        CALL MEM7
 
        CALL M_PLAT ;7 ;показать площадку под стр-во
 
        endif
 
        CALL MEM4
 
        CALL outBOX ;4
 
        CALL MEM0
 
        CALL flpSEL ;0 ;flip пометки селект
 
        CALL HiENER ;0[**] ;супер энергия
 
        if EGA
 
;прочитать стрелочку
 
;включить стрелочку
 
        CALL V_GET_MRK2 ;на рисуемом экране
 
         ;xor a
 
         ;LD (V_FLAG),A
 
         ;ld a,(curscrnum)
 
         ;pop bc
 
         ;cp b
 
         ;jr nz,$ ;не бывает
 
        endif
 
        CALL BLITER ;7
 
        LD HL,G_IMG1
 
        LD (G_IMG),HL
 
        if EGA
 
        call SLOWER ;TODO не 5 фреймов, а 3?
 
        jp MEM7
 
        else
 
        RET
 
        endif
 
 
 
 
 
MAPon   XOR A
 
        LD (delMAP),A
 
        CALL MP_OFF ;очистка
 
        CALL BLITER
 
        if EGA==0
 
        LD A,(COLOR)
 
        XOR %01011001
 
        CALL FRA_L1
 
        else
 
        call MAPoffclbuttons ;иначе затираются кнопки
 
         ;call OUTBAR
 
        endif
 
        CALL OU_MAP
 
        CALL MAPwin
 
        LD (isMAP),A
 
        RET
 
 
 
MAPoff  XOR A
 
        LD (isMAP),A
 
        CALL O12X12
 
        if EGA
 
MAPoffclbuttons
 
;иначе затираются кнопки
 
        LD HL,_BUT_H
 
        LD B,7
 
MAPoncBU1i LD (HL),#FF
 
        INC HL
 
        DJNZ MAPoncBU1i
 
        ret
 
        else
 
        JP FRA_L
 
        endif
 
 
 
MAPwin  ;выв окна видимости
 
        CALL STS
 
        LD DE,(X0)
 
        LD A,E
 
        ADD A,E
 
        ADD A,E
 
        RRCA
 
        RRCA
 
        RRCA
 
        AND %11111
 
        LD L,A
 
        LD A,D
 
        ADD A,D
 
        ADD A,D
 
        RRCA
 
        RRCA
 
        RRCA
 
        AND %11111
 
        LD H,A
 
        CALL ACOORD
 
        LD DE,27
 
        LD C,5
 
mwi0    LD B,5
 
mwi1    LD A,(HL)
 
        XOR %00011001
 
        LD (HL),A
 
        INC L
 
        DJNZ mwi1
 
        ADD HL,DE
 
        DEC C
 
        JR NZ,mwi0
 
        RET
 
 
 
movWIN  ;перемещ окна в карте по enter (BC-центр окна)
 
        LD A,C
 
        CALL iW
 
        LD L,A
 
        LD A,B
 
        CALL iW
 
        LD H,A
 
        LD (X0),HL
 
        RET
 
iW      SUB 5
 
        JR NC,iW1
 
        XOR A
 
iW1     CP 52
 
        RET C
 
        LD A,51
 
        RET
 
 
 
        if EGA==0
 
MP_OFF  CALL MP_OF1 ;очистка map в DSCR
 
        LD (DSCR),HL
 
        RET
 
MP_OF1  LD HL,#FFFF
 
        LD (SET_SP+1),SP
 
        LD SP,DSCR+#1800-6
 
        LD B,236
 
mp09    DEFS 13,#E5;PUSH HL
 
        DJNZ mp09
 
        JP SET_SP
 
        endif
 
 
 
MANUAL  ;обработка управляющ воздейств
 
        CALL BMOV
 
        ;H-вкл паузу
 
        LD BC,#BFFE
 
        IN A,(C)
 
        AND %10000
 
        JR NZ,maz0
 
        LD (onPAUS),A
 
        CPL
 
        JR mau0ht
 
maz0    ;Z-вкл/выкл карту
 
        LD A,(BENTER)
 
        OR A
 
        JR NZ,mau4
 
        LD B,#FE
 
        IN A,(C)
 
        AND %111
 
        CP %101
 
        LD A,(Z_LOCK)
 
        JR NZ,mau2
 
        OR A
 
        JR NZ,mau1
 
         if EGA
 
        ld e,0
 
        OS_SETSCREEN
 
        ld e,0
 
        OS_CLS
 
        ld e,1
 
        OS_SETSCREEN
 
        ld e,0
 
        OS_CLS
 
         call putBAR
 
         endif
 
mau0    LD A,(isMAP)
 
mau0ht  OR A
 
        PUSH AF
 
        CALL Z,MAPon
 
        POP AF
 
        CALL NZ,MAPoff
 
        LD A,1
 
        JR mau1
 
mau2    XOR A
 
mau1    LD (Z_LOCK),A
 
mau4    ;нажатый FIRE (0-none,1-space,2-caps)
 
        LD A,(CONTRB)
 
        BIT 4,A
 
        JR NZ,maf1
 
        AND %100000
 
        JR NZ,maf2
 
        LD BC,#FEFE
 
        IN A,(C)
 
        AND %1111
 
        CP %1110
 
        JR Z,maf2
 
        XOR A
 
        JR maf0
 
maf1    LD A,1
 
        JR maf0
 
maf2    LD A,(BX)
 
        CP 24
 
        JR C,maf2_
 
        LD A,(begBOX)
 
        OR A
 
        JR Z,maf1;CAP->SPACE
 
maf2_   LD A,2
 
maf0    LD (T_FIRE),A ;(0-none,1-space,2-caps)
 
        CP 1
 
        RET Z
 
        XOR A
 
        LD (fixTAR),A ;расфиксировать цель
 
        RET
 
 
 
 
 
SEEonn  ;подключить onsee/onsee2
 
        LD A,#C3 ;код jp
 
        JR SEExx
 
SEEoff  ;отключть их
 
        LD A,#C9 ;код ret
 
SEExx   LD (ONSEE),A
 
        LD (ONSEE2),A
 
        RET
 
 
 
;-----------для работы с меню
 
gmMENU  CALL MEM7
 
        XOR A
 
        LD (isMAP),A
 
        CALL M_MENU
 
        CALL aSETUP
 
        JP MEM0
 
 
 
MU_BOX  ;бох меню DE-coord,bc-размер
 
        PUSH HL
 
        DEC B
 
        DEC B
 
        LD H,B
 
        DEC C
 
        DEC C
 
        LD L,E
 
        LD A,99
 
        CALL PRINT
 
meb1    LD A,100
 
        CALL PRINT
 
        DJNZ meb1
 
        LD A,101
 
        CALL PRINT
 
meb2    LD B,H
 
        LD E,L
 
        INC D
 
        LD A,103
 
        CALL PRINT
 
meb4    LD A,10
 
        CALL PRINT
 
        DJNZ meb4
 
        LD A,104
 
        CALL PRINT
 
        DEC C
 
        JR NZ,meb2
 
        LD B,H
 
        LD E,L
 
        INC D
 
        LD A,105
 
        CALL PRINT
 
meb5    LD A,106
 
        CALL PRINT
 
        DJNZ meb5
 
        LD A,107
 
        CALL PRINT
 
        POP HL
 
        RET
 
 
 
_oSani  ;анимация для Setup (A->DE)
 
_oSA1   EX AF,AF
 
        CALL MEM1
 
        EX AF,AF
 
        CALL GSADR+1
 
       if EGA==0 ;TODO
 
        CALL SQROUT
 
       endif
 
        JP MEM7
 
 
 
_shdw   ;уст темноты
 
        CALL shadwS_3
 
        JP MEM7
 
 
 
aSETUP  ;исполнение установок
 
        CALL TMOM   ;7
 
        CALL shadwS ;--1
 
        CALL ANIset ;1
 
        LD A,(MUSONF)
 
        OR A
 
        JR NZ,aSS1
 
        CALL MEM6   ;--6
 
        CALL WMUSIC ;6
 
        CALL MEM0
 
aSS1    JP MAPoff
 
 
 
UP_TIM   ;повыш уровня врага (через TIME=0:40-N)
 
         LD HL,kARC
 
         LD B,4
 
upTT0    LD A,(HL)
 
         CP 2
 
         JR NC,upTT1
 
         INC (HL)
 
upTT1    INC HL
 
         DJNZ upTT0
 
         ;
 
UP_DIF   ;повыш сложность (DIFFIC=1)
 
         LD HL,levMAX ;+1
 
         INC (HL)
 
         LD HL,lev1ST ;3/4
 
         CALL uppd34
 
         LD HL,levDEL ;3/4
 
uppd34   SRL (HL)
 
         LD A,(HL)
 
         SRL (HL)
 
         ADD A,(HL)
 
         LD (HL),A
 
         RET
 
 
 
PAUSE   ;пауза с выводом задания по "H"
 
        LD HL,onPAUS
 
        LD A,(HL)
 
        OR A
 
        RET NZ
 
        INC (HL)
 
        if EGA
 
;выключить стрелочку 
 
;стереть стрелочку
 
        LD A,2
 
        LD (V_FLAG),A
 
        CALL V_PUT1 ;на видимом экране
 
        endif
 
        LD DE,#301
 
        LD BC,#1612
 
        CALL MU_BOX
 
        ;параметры
 
        LD DE,#503
 
        PUSH DE  ;N ур
 
        LD HL,TU_1
 
        CALL tuPR
 
        LD A,(MASTER)
 
        OR A
 
        LD HL,TU_7
 
        JR Z,tu2
 
        LD HL,TU_8
 
tu2     CALL PRINTS
 
        LD A,(LEVEL)
 
        CP 10
 
        JR C,tu3
 
        SUB 10
 
        PUSH AF
 
        LD A,1
 
        CALL PRINT
 
        POP AF
 
tu3     CALL PRINT
 
        POP DE
 
        INC D
 
        INC D
 
        PUSH DE  ;сложн
 
        LD HL,TU_2
 
        CALL tuPR
 
        LD A,(DIFFIC)
 
        OR A
 
        LD HL,TU_5
 
        JR Z,tu1
 
        LD HL,TU_6
 
tu1     CALL PRINTS
 
        POP DE
 
        INC D
 
        INC D
 
        CALL TUtime
 
        INC D
 
        INC D
 
        INC D
 
        PUSH DE
 
        LD E,8
 
        LD HL,TU_9
 
        CALL PRINTS
 
        POP DE
 
        INC D
 
        INC D
 
        DEC E
 
        ;задание
 
        LD B,3
 
        LD HL,TASK_M
 
aus1    PUSH DE
 
        PUSH BC
 
        CALL PRINTS
 
        POP BC
 
        POP DE
 
        INC HL
 
        INC D
 
        DJNZ aus1
 
        if EGA
 
;прочитать стрелочку
 
;включить стрелочку
 
        CALL V_GET1
 
        call V_MRK1 ;на видимом экране
 
        xor a
 
        LD (V_FLAG),A
 
        else
 
        CALL BLITER ;иначе показывает другой экран
 
        endif
 
        CALL bWAIT
 
        JP TMOM
 
 
 
TUarr   DEFB 10,109,10,127 ;_>_
 
TU_1    DEFB 31,64,62,50,53,61,74,127 ;Уровень
 
TU_2    DEFB 29,59,62,54,61,62,65,66,74,127 ;Cложность
 
TU_3    DEFB 14,64,53,60,79,127 ;Время
 
TU_4    DEFB 26,49,73,53,53,127 ;Общее
 
TU_5    DEFB 81,26,82,24,127; NORM
 
TU_6    DEFB 25,84,110,25,127; HiGH
 
TU_7    DEFB 23,78,52,56,91,127;Люди-
 
TU_8    DEFB 22,67,61,51,56,91,127;Кунги-
 
TU_9    DEFB 19,48,52,48,61,56,53,43,127;Задание:
 
 
 
TUtime  ;выв.времени ур-ня/игры
 
        PUSH DE ;вр ур
 
        LD HL,TU_3
 
        CALL tuPR
 
        LD HL,LEVRES
 
        CALL PRINTS
 
        POP DE
 
        INC D
 
        INC D
 
        PUSH DE ;общ вр
 
        LD HL,TU_4
 
        CALL tuPR
 
        LD HL,RESULT
 
        CALL PRINTS
 
        POP DE
 
        RET
 
 
 
tuPR    CALL PRINTS
 
        LD HL,TUarr
 
        JP PRINTS
 
 
 
Evic1   DEFB 27,26,13,17,16,12,47, 127 ;ПОБЕДА!
 
Evic2   DEFB 19,48,52,48,61,56,53, 10, 50,75,63,62,59,61,53,61,62,47, 127
 
Emis1   DEFB 14,75,10,63,62,66,53,64,63,53,59,56, 127
 
Emis2   DEFB 63,62,64,48,54,53,61,56,53,47, 127
 
Emis3   DEFB 27,62,63,75,66,48,57,66,53,65,74, 10, 53,73,80, 127 ;try again
 
Ey_n    DEFB 87,86,90,81,88,44, 127
 
 
 
bHmine  EQU  255 ;здоровье шахты
 
bHEALT  ;здоровье зданий
 
        DEFB 200,160,132,130,150,140,160,250,80
 
        DEFB 0
 
        DEFB 200,160,132,130,150,140,160,250,80
 
OFFSEE  ;выкл видим
 
        LD HL,MAP+65
 
        LD C,62
 
fE1     LD B,62
 
fE0     SET 7,(HL)
 
        INC HL
 
        DJNZ fE0
 
        INC HL
 
        INC HL
 
        DEC C
 
        JR NZ,fE1
 
        RET
 
 
 
 
 
ANIMTR  LD HL,ANIM
 
        INC (HL)
 
        LD A,(HL)
 
        CP 4
 
        RET C
 
        XOR A
 
        LD (HL),A
 
        RET
 
 
 
go_Max  EQU 52 ;номер макс прох поля
 
 
 
setMAP  LD HL,MAP2 ;заполнение мап2
 
        LD DE,MAP
 
        LD C,64
 
tE1     LD B,64
 
tE0     LD A,(DE)
 
        OR A
 
        JR Z,tE2
 
        CP go_Max
 
        LD A,0
 
        JR C,tE3
 
        INC A
 
tE2     INC A
 
tE3     LD (HL),A
 
        INC DE
 
        INC HL
 
        DJNZ tE0
 
        DEC C
 
        JR NZ,tE1
 
        RET
 
 
 
 
 
 
 
;------часто используемые п/п------
 
IX0_HL  LD (IX),L
 
        LD (IX+1),H
 
        RET
 
 
 
HL_IX0  LD L,(IX)
 
        LD H,(IX+1)
 
        RET
 
 
 
IXt_HL  LD (IX+10),L
 
        LD (IX+11),H
 
        RET
 
 
 
HL_IXt  LD L,(IX+10)
 
        LD H,(IX+11)
 
        RET
 
 
 
IX_98   XOR A ;стой
 
        LD (IX+9),A
 
        LD (IX+8),A
 
        RET
 
 
 
IX_92   LD (IX+9),2
 
        JR IX_93a
 
IX_93   LD (IX+9),3 ;иди
 
IX_93a  LD (IX+8),#80
 
        RET
 
 
 
IMPIX3  LD A,%11000000
 
        LD (IX+3),A
 
        JP HERMOV
 
 
 
loop_K  LD B,48
 
loopKb  LD IX,KUNGE
 
        LD DE,16
 
        RET
 
 
 
loop_H  LD B,48
 
loopHb  LD IX,HUMAN
 
        LD DE,16
 
        RET
 
 
 
DIST2   ;расст по ф-ле: max(|L-ix0|,|H-ix1|) Вх.XY-HL;Вых.A
 
        LD A,L
 
        SUB (IX+0)
 
        JR NC,d2t1
 
        NEG
 
d2t1    LD B,A
 
        LD A,H
 
        SUB (IX+1)
 
        JR NC,d2t2
 
        NEG
 
d2t2    CP B
 
        RET NC
 
        LD A,B
 
        RET
 
 
 
 
 
;------------
 
 
 
isEND   LD A,(TheEND)
 
        OR A
 
        JP NZ,MU_EN_
 
        ;
 
        LD A,(LEV_T)
 
        OR A
 
        CALL NZ,isEND2
 
        LD A,(TIC)
 
        AND %11111
 
        CP 5
 
        RET NZ
 
        CALL isEND1
 
        LD (END_1),A
 
        RET
 
 
 
MU_EN_ ;[--14]
 
        if 1==0
 
        PUSH AF
 
        LD HL,WX_LEN+82
 
        LD A,(WX_BAD+14)
 
        CP (HL)
 
        JR NZ,isEND1 ;err
 
        POP AF
 
        endif
 
        JP MU_END
 
 
 
isEND1  ;проверка окончания боя (Z/NZ-ok/конец (A=1/2-победа наших/врагов)
 
        LD HL,KUNGE
 
        LD B,48+6
 
        LD DE,16
 
iee0    LD A,(HL)
 
        OR A
 
        JR NZ,iee2
 
        ADD HL,DE
 
        DJNZ iee0
 
        LD HL,KBUILD
 
        LD E,8
 
        LD B,#20
 
iee1    LD A,(HL)
 
        OR A
 
        JR NZ,iee2
 
        ADD HL,DE
 
        DJNZ iee1
 
        XOR A
 
        INC A
 
        RET NZ;1
 
iee2    LD HL,HUMAN
 
        LD E,16
 
        LD B,48
 
iee20   LD A,(HL)
 
        OR A
 
        JR NZ,iee3
 
        ADD HL,DE
 
        DJNZ iee20
 
        LD HL,HBUILD
 
        LD E,8
 
        LD B,#20
 
iee21   LD A,(HL)
 
        OR A
 
        JR NZ,iee3
 
        ADD HL,DE
 
        DJNZ iee21
 
        XOR A
 
        INC A
 
        INC A
 
        RET NZ;2
 
iee3    XOR A
 
        RET Z;0
 
 
 
isEND2  CALL loop_H ;князь в туннеле
 
ien0    LD A,(IX+4)
 
        CP 22
 
        JR C,ien1
 
        CP 24
 
        JR NC,ien1
 
        CALL HL_IX0
 
        LD A,L
 
        OR A
 
        JR Z,ien1
 
        CALL GMAP
 
        LD A,(HL)
 
        AND #7F
 
        CP 5
 
        JR NZ,ien1
 
        LD A,1
 
        LD (END_2),A
 
ien1    ADD IX,DE
 
        DJNZ ien0
 
        RET
 
 
 
 
 
;****** главн цикл *****
 
 
 
CONTgm
 
;загрузка отл игры
 
        if 1==0
 
        CALL INI_D2
 
        endif
 
        CALL LOD1st
 
        SCF
 
        CALL LOADms ;C=1
 
        CALL shadwS ;--1
 
        CALL MEM6   ;--6
 
        CALL WMUSIC ;6
 
        EI
 
        JP ENTRY
 
 
 
LODrtr  ;рестарт уровня
 
        LD HL,LEVEL
 
        DEC (HL)
 
        LD HL,hCLRI_ ;восст осн врем/закл
 
        LD DE,hCLRIC
 
        LD BC,12
 
        LDIR
 
LODnxt  ;нов.уровень
 
        LD A,2
 
        LD (V_FLAG),A
 
        if 1==0
 
        CALL CHNGd2
 
        endif
 
        CALL MEM6
 
        CALL WMUSIC
 
        DI
 
        JR LODn1
 
 
 
LODnew  ;новая игра
 
        if 1==0
 
        CALL INI_D2
 
        endif
 
        CALL LOD1st     ;6 i/o
 
        ;загрузка и иниц. данных ур-ня
 
LODn1   CALL LODlev
 
        LD HL,hCLRIC ;копия осн врем/закл
 
        LD DE,hCLRI_
 
        LD BC,12
 
        LDIR
 
        XOR A
 
         ;jr $
 
        CALL LOADms     ;i/o;C=0
 
_start  CALL shadwS     ;--1
 
        CALL ANIset     ;1
 
        CALL MEM0       ;--0
 
        CALL typMAP     ;0
 
        CALL Z,iniBLT   ;0
 
        CALL setBLT     ;0
 
     CALL OFFSEE     ;0
 
        CALL vieBLT     ;0
 
        CALL MEM1       ;--1
 
        CALL NEWALL     ;1
 
        CALL NEWenm     ;1
 
        CALL MEM0       ;--0
 
        CALL pntINI     ;0
 
        CALL pcINI      ;0lev
 
        CALL MEM6       ;--6
 
        CALL XY1st      ;6
 
        CALL peonN      ;6 \
 
        LD (peon_W),HL  ;  /
 
        CALL WMUSIC     ;6
 
        CALL bWAIT      ;0
 
        XOR A
 
        LD (TIC_UP),A
 
        ;
 
ENTRY   ;общая точка входа для нов. игры и отгрузки
 
        if EGA
 
        ld e,0
 
        OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
 
        ld e,0
 
        OS_SETSCREEN
 
        ld e,0
 
        OS_CLS
 
        ld e,1
 
        OS_SETSCREEN
 
        ld e,0
 
        OS_CLS ;там была 6912 картинка
 
        call setpal
 
        endif
 
        
 
        XOR A
 
        LD (isMAP),A
 
        CALL putBAR ;--7
 
        CALL MEM0   ;--0
 
        CALL cBUini ;0
 
        CALL FRAME  ;--7
 
        CALL EVENTr ;*
 
        CALL OUMAIN ;7
 
NNN     ;игровой цикл
 
        CALL MANUAL ;7
 
        CALL MEM6    ;---6
 
        CALL TIMER  ;6
 
        CALL SLOWER ;6
 
         CALL MEM6    ;---6
 
        CALL RNDcrr ;6
 
        CALL cTIC   ;6
 
        CALL dMAGIC ;6
 
        CALL SPLIN  ;6
 
        CALL REpeon ;6
 
        LD SP,STACK;#403E ;???
 
        CALL MEM1   ;---1
 
        CALL REMONT ;1
 
        CALL MEM0   ;---0
 
        CALL isRUN  ;0
 
        CALL ANIMTR ;0
 
        CALL selTAR ;0
 
        CALL ACTION ;0
 
        CALL SHED_H ;0
 
        CALL SEEoff ;0
 
        CALL SHED_K ;0
 
        CALL SHED_p ;0
 
        CALL BULLER ;0
 
        CALL hSCAN  ;0
 
        CALL kSCAN  ;0
 
        CALL SEEonn ;0
 
        CALL MINER  ;0
 
        CALL HOMER  ;0
 
        CALL pntACT ;0
 
        CALL COMPUT ;0
 
        CALL pcLOOP ;0lev
 
        CALL MEM7   ;--7
 
;            LD BC,#FBFE ;чит - след уровень
 
;            IN A,(C)
 
;            AND %10000
 
;            JR NZ,noHACK
 
;            LD A,1
 
;            LD (TheEND),A
 
noHACK         ;
 
        CALL isEND  ;7
 
        if 1==0 ;???
 
        CALL _TST#6 ;7[**]
 
        endif
 
        CALL OUTBAR ;7
 
        CALL OUMAIN ;7
 
        CALL PAUSE  ;7
 
        CALL NNN ;!*
 
 
 
SYLF    CALL vrYLF
 
        CALL vXPUT
 
        JR SxS
 
SYRT    CALL vrYRT
 
        CALL vXPUT
 
        JR SxS
 
SXHI    CALL vrXUP
 
        CALL vXPUT
 
        JR SxS
 
SXLO    CALL vrXDW
 
        CALL vXPUT
 
        JR SxS
 
S12X12  CALL XY0pos
 
        CALL vSORT
 
        CALL vXPUT
 
SxS     CALL vBULL
 
        CALL vFLAME
 
        JP MEM1
 
 
 
;wMAIN   ;ОТЛАД
 
;  CALL MEM0     ;0 отлад
 
;  CALL SEEonn   ;0 отлад
 
;  CALL setC1    ;0 отлад
 
;  CALL setMAP   ;0 отлад
 
  JP _start ;отладочн т.входа ;???
 
        ;---demo
 
wMAIN  ;в этом порядке
 
        DI
 
;;;;;;;;*F W_CRC
 
        CALL MEM6
 
        LD A,(#EEC9) ;портится прерываниями ;патч к музыке
 
        PUSH AF
 
        LD A,(#F221) ;портится прерываниями ;патч к музыке
 
        PUSH AF
 
        CALL DEMO
 
        DI
 
        CALL MEM6
 
        POP AF
 
        LD (#F221),A ;восст
 
        POP AF
 
        LD (#EEC9),A ;восст
 
        ;---start menu
 
        CALL LDI123;!!>>
 
 
 
bWAIT   CALL CONTR
 
        LD A,(CONTRB)
 
        AND %10000
 
        JR Z,bWAIT
 
        RET NZ
 
        if EGA
 
        jp putBAR
 
        else
 
putBAR  ;выв панели
 
        CALL OFFS ;очистка экрана
 
        LD DE,DSCR
 
        LD HL,#0018
 
        LD BC,#1808
 
        JP PUTSYM
 
        endif
 
 
 
        if 1==0 ;???
 
_TST#6  LD A,(RNB) ;[**]mem7
 
        AND %11101111
 
        RET NZ
 
        LD DE,#C900
 
TST#6   XOR A
 
        LD HL,#4080
 
        LD BC,#3500
 
        JP tst60a
 
        endif
 
 
 
ONSEE1  CALL MEM0 ;newall и onsee - в разн. страницах
 
        CALL ONSEE
 
        JP MEM1
 
 
 
;-----------------------------
 
 
 
 
 
;низ +
 
;трупы +
 
;воины по очереди +
 
;пули,взрывы,закл +
 
;дым пожарищ+
 
;невидим квадраты  +
 
;курсор +