;------ПЕРЕМЕЩЕНИЯ
 
;---------п/п перемещения и поиска маршрута
 
 
 
DIR     ;напр HL->DE
 
        LD A,L
 
        CP E
 
        LD A,H
 
        JR C,di1
 
        JR NZ,di2
 
        CP D
 
        LD A,0
 
        RET C
 
        LD A,4
 
;//     RET NZ
 
;//     LD A,#FF
 
        RET
 
di1     CP D
 
        LD A,1
 
        RET C
 
        LD A,3
 
        RET NZ
 
        DEC A
 
        RET
 
di2     CP D
 
        LD A,7
 
        RET C
 
        LD A,5
 
        RET NZ
 
        INC A
 
        RET
 
 
 
DIR_F   ;напр HL->DE  с учётом наклона
 
        PUSH HL
 
        LD A,L
 
        SUB E
 
        JR C,df1
 
        JP NZ,df2
 
        POP HL
 
        LD A,H
 
        CP D
 
        LD A,0
 
        RET C
 
        LD A,4
 
;//     RET NZ
 
;//     LD A,#FF
 
        RET
 
df1     NEG
 
        LD L,A
 
        LD A,H
 
        SUB D
 
        LD H,2
 
        JR Z,df0
 
        JR C,df11
 
        CP L
 
        LD H,3
 
        JR Z,df0
 
        JR NC,df12
 
        ADD A,A ;--3|2
 
        CP L
 
        POP HL
 
        JR C,df14
 
        LD A,R
 
        RRA
 
        LD A,3
 
        RET C
 
        DEC A
 
        RET
 
df14    LD A,R
 
        AND %11
 
        LD A,3
 
        RET Z
 
        DEC A
 
        RET
 
df12    SLA L  ;--3|4
 
        CP L
 
        POP HL
 
        JR NC,df15
 
        LD A,R
 
        RRA
 
        LD A,3
 
        RET C
 
        INC A
 
        RET
 
df15    LD A,R
 
        AND %11
 
        LD A,3
 
        RET Z
 
        INC A
 
        RET
 
df11    NEG
 
        CP L
 
        LD H,1
 
        JR Z,df0
 
        JR NC,df32
 
        ADD A,A ;--1|2
 
        CP L
 
        POP HL
 
        JR C,df34
 
        LD A,R
 
        RRA
 
        LD A,1
 
        RET C
 
        INC A
 
        RET
 
df34    LD A,R
 
        AND %11
 
        LD A,1
 
        RET Z
 
        INC A
 
        RET
 
df32    SLA L  ;--1|0
 
        CP L
 
        POP HL
 
        JR NC,df35
 
        LD A,R
 
        RRA
 
        LD A,1
 
        RET C
 
        XOR A
 
        RET
 
df35    LD A,R
 
        AND %11
 
        LD A,1
 
        RET Z
 
        XOR A
 
        RET
 
df0     LD A,H
 
        POP HL
 
        RET
 
df2     LD L,A
 
        LD A,H
 
        SUB D
 
        LD H,6
 
        JR Z,df0
 
        JR C,df21
 
        CP L
 
        LD H,5
 
        JR Z,df0
 
        JR NC,df22
 
        ADD A,A ;--5|6
 
        CP L
 
        POP HL
 
        JR C,df24
 
        LD A,R
 
        RRA
 
        LD A,5
 
        RET C
 
        INC A
 
        RET
 
df24    LD A,R
 
        AND %11
 
        LD A,5
 
        RET Z
 
        INC A
 
        RET
 
df22    SLA L  ;--5|4
 
        CP L
 
        POP HL
 
        JR NC,df25
 
        LD A,R
 
        RRA
 
        LD A,5
 
        RET C
 
        DEC A
 
        RET
 
df25    LD A,R
 
        AND %11
 
        LD A,5
 
        RET Z
 
        DEC A
 
        RET
 
df21    NEG
 
        CP L
 
        LD H,7
 
        JR Z,df0
 
        JR NC,df42
 
        ADD A,A ;--7|6
 
        CP L
 
        POP HL
 
        JR C,df44
 
        LD A,R
 
        RRA
 
        LD A,7
 
        RET C
 
        DEC A
 
        RET
 
df44    LD A,R
 
        AND %11
 
        LD A,7
 
        RET Z
 
        DEC A
 
        RET
 
df42    SLA L  ;--7|0
 
        CP L
 
        POP HL
 
        JR NC,df45
 
        LD A,R
 
        RRA
 
        LD A,7
 
        RET C
 
        XOR A
 
        RET
 
df45    LD A,R
 
        AND %11
 
        LD A,7
 
        RET Z
 
        XOR A
 
        RET
 
 
 
DIST    ;расст по ф-ле max(|X-Xt|,|Y-Yt|) Вх.XY-HL;Вых.A
 
        LD A,L
 
        SUB (IX+10)
 
        JR NC,dt1
 
        NEG
 
dt1     LD B,A
 
        LD A,H
 
        SUB (IX+11)
 
        JR NC,dt2
 
        NEG
 
dt2     CP B
 
        RET NC
 
        LD A,B
 
        RET
 
 
 
nxtTRY  LD (IX+8),#80 ;нет времени, попытайся потом
 
        RET
 
 
 
MAKE_R  ;Выбор направления обхода Вх:hl-start
 
        LD A,(makTRY)
 
        OR A
 
        JR Z,nxtTRY
 
        DEC A
 
        LD (makTRY),A
 
        PUSH HL
 
        LD A,L ; вхHL-XY, выхHL-pos in map
 
        RLCA
 
        RLCA
 
        SRL H
 
        RRA
 
        SRL H
 
        RRA
 
        LD E,A
 
        LD A,H
 
        ADD A,MAP2/256
 
        LD D,A
 
        LD B,8 ;нач поз окружена?
 
MKstr   LD HL,inMAP ;выровн
 
        LD A,B
 
        DEC A
 
        ADD A,A
 
        ADD A,L
 
        LD L,A
 
        LD A,(HL)
 
        INC L
 
        LD H,(HL)
 
        LD L,A
 
        ADD HL,DE
 
        LD A,(HL)
 
        OR A  ;пров на прох
 
        JR Z,MKst0
 
        DJNZ MKstr
 
        LD B,8 ;есть ли рядом движущиеся?
 
MKany   LD HL,inMAP ;выровн
 
        LD A,B
 
        DEC A
 
        ADD A,A
 
        ADD A,L
 
        LD L,A
 
        LD A,(HL)
 
        INC L
 
        LD H,(HL)
 
        LD L,A
 
        ADD HL,DE
 
        LD A,(HL)
 
        CP #80  ;пров движ обj рядом
 
        JR C,MKan1
 
        CALL GO_NXe
 
        JR NZ,MKst0
 
MKan1   DJNZ MKany
 
        POP HL
 
        JP G_stop ;поз окружена - стоп
 
MKst0   POP HL
 
        LD A,(DE)
 
        LD (ss_num),A
 
        LD (ss_pos),DE
 
        XOR A
 
        LD (DE),A
 
        LD (MINLEN),A
 
        CALL DIST
 
        LD (MINDIS),A
 
        PUSH HL
 
        PUSH DE
 
        EXX
 
        LD A,(IX+2)
 
        LD C,A
 
        BIT 0,A
 
        JR NZ,Mk1
 
        DEC C
 
        INC A
 
Mk1     DEC C
 
        INC A
 
        POP DE
 
        POP HL
 
        EXX
 
        LD C,A
 
        ;HL-коорд DE-адр C-cdir/exx-против часовой
 
        LD A,1
 
        EX AF,AF ;A'-текущ. длина обхода
 
MkLOOP  ;обх в 2 стороны
 
Mk_cw   BIT 0,C
 
        JR Z,Mk7
 
        DEC C
 
Mk7     DEC C
 
        PUSH HL
 
CWrep   LD HL,inMAP ; (выровн)
 
        LD A,C
 
        AND 7
 
        LD C,A
 
        ADD A,A
 
        ADD A,L
 
        LD L,A
 
        LD A,(HL)
 
        INC L
 
        LD H,(HL)
 
        LD L,A
 
        ADD HL,DE
 
        LD A,(HL)
 
        CP 1   ;пров на прох
 
        JR C,Mk4
 
        JP Z,CWstop
 
         RLCA
 
         JR NC,Mk4n
 
         CALL Mk_her
 
         JR C,Mk4
 
Mk4n    INC C
 
        JR CWrep
 
Mk4     EX (SP),HL
 
        LD DE,GO_Ntb
 
        LD A,C
 
        ADD A,A
 
        ADD A,E
 
        LD E,A
 
        LD A,(DE)
 
        ADD A,L
 
        LD L,A
 
        INC DE
 
        LD A,(DE)
 
        ADD A,H
 
        LD H,A
 
        POP DE
 
        EXX
 
        CP H
 
        EXX
 
        JR NZ,Mk5
 
        EXX
 
        LD A,L
 
        EXX
 
        CP L
 
        JR NZ,Mk5
 
         LD A,(MINLEN) ;узкий проход?
 
         OR A
 
         JP NZ,MK_RET
 
Mk5     CALL DIST
 
        LD B,A
 
        LD A,(MINDIS)
 
        CP B
 
        JR C,Mk_ccw
 
        JR Z,Mk_ccw
 
        LD A,B
 
        LD (MINDIS),A
 
        EX AF,AF
 
        LD (MINLEN),A
 
        EX AF,AF
 
        XOR A
 
        LD (NROUND),A
 
Mk_ccw  EXX
 
        BIT 0,C
 
        JR Z,M1k7
 
        INC C
 
M1k7    INC C
 
        PUSH HL
 
CCWrep  LD HL,inMAP ;(выровн)
 
        LD A,C
 
        AND 7
 
        LD C,A
 
        ADD A,A
 
        ADD A,L
 
        LD L,A
 
        LD A,(HL)
 
        INC L
 
        LD H,(HL)
 
        LD L,A
 
        ADD HL,DE
 
        LD A,(HL)
 
        CP 1   ;пров на прох
 
        JR C,M1k4
 
        JP Z,CCWstp
 
         RLCA
 
         JR NC,M1k4n
 
         CALL Mk_her
 
         JR C,M1k4
 
M1k4n   DEC C
 
        JR CCWrep
 
M1k4    EX (SP),HL
 
        LD DE,GO_Ntb
 
        LD A,C
 
        ADD A,A
 
        ADD A,E
 
        LD E,A
 
        LD A,(DE)
 
        ADD A,L
 
        LD L,A
 
        INC DE
 
        LD A,(DE)
 
        ADD A,H
 
        LD H,A
 
        POP DE
 
        EXX
 
        CP H
 
        JR NZ,M1k5
 
        EXX
 
        LD A,L
 
        EXX
 
        CP L
 
        JR NZ,M1k5
 
         LD A,(MINLEN) ;узкий проход?
 
         OR A
 
         JR NZ,MK_RET
 
M1k5    EXX
 
        CALL DIST
 
        LD B,A
 
        LD A,(MINDIS)
 
        CP B
 
        JR C,Mk_eol
 
        JR Z,Mk_eol
 
        LD A,B
 
        LD (MINDIS),A
 
        EX AF,AF
 
        LD (MINLEN),A
 
        EX AF,AF
 
        LD A,#80
 
        LD (NROUND),A
 
Mk_eol  EXX
 
        EX AF,AF
 
        INC A
 
        LD B,A
 
        EX AF,AF
 
        LD A,(MAXLEN)
 
        CP B
 
        JP NC,MkLOOP
 
MK_RET  LD HL,(ss_pos)
 
        LD A,(ss_num)
 
        LD (HL),A
 
        LD A,(MINLEN)
 
        OR A
 
        JP NZ,Mkr1
 
         LD A,(IX+8) ;обхода нет или слишком далеко
 
         OR A
 
         JP NZ,G_stop
 
         JP G_free ;если остановка при ложном обходе
 
Mkr1    CP 127
 
        JR C,Mkr2
 
        LD A,127
 
Mkr2    LD B,A
 
         LD A,(IX+8)
 
         OR A
 
         JR NZ,Mkr2a
 
         LD B,1
 
Mkr2a    ;^если (IX+8)==0, уменьшить длину прохода до 1 (против ложного обхода)
 
        LD A,(NROUND)
 
        LD C,A
 
        OR B
 
        LD (IX+8),A
 
        LD A,C
 
        OR A
 
        LD A,(IX+2)
 
        JR NZ,Mkr3
 
        INC A
 
        BIT 0,A
 
        JR Z,Mkr4
 
        INC A
 
        JR Mkr4
 
Mkr3    DEC A
 
        BIT 0,A
 
        JR Z,Mkr4
 
        DEC A
 
Mkr4    AND 7
 
        LD (IX+2),A
 
        JP GO_MAN;!
 
 
 
MK_REp  POP HL
 
        JR MK_RET
 
 
 
CWstop  POP HL
 
        EXX
 
        EX AF,AF
 
        LD B,A
 
        LD A,(MAXLEN)
 
        ADD A,A
 
        SUB B
 
        LD (MAX_II),A
 
        LD A,B
 
        EX AF,AF
 
MkLOO3  BIT 0,C
 
        JR Z,M3k7
 
        INC C
 
M3k7    INC C
 
        PUSH HL
 
CCWre1  LD HL,inMAP ;выровн
 
        LD A,C
 
        AND 7
 
        LD C,A
 
        ADD A,A
 
        ADD A,L
 
        LD L,A
 
        LD A,(HL)
 
        INC L
 
        LD H,(HL)
 
        LD L,A
 
        ADD HL,DE
 
        LD A,(HL)
 
        CP 1   ;пров на прох
 
        JR C,M3k4
 
        JR Z,MK_REp
 
         RLCA
 
         JR NC,M3k4n
 
         CALL Mk_her
 
         JR C,M3k4
 
M3k4n   DEC C
 
        JR CCWre1
 
M3k4    EX (SP),HL
 
        LD DE,GO_Ntb
 
        LD A,C
 
        ADD A,A
 
        ADD A,E
 
        LD E,A
 
        LD A,(DE)
 
        ADD A,L
 
        LD L,A
 
        INC DE
 
        LD A,(DE)
 
        ADD A,H
 
        LD H,A
 
        POP DE
 
        CP (IX+1)
 
        JR NZ,M3kk
 
        LD A,L
 
        CP (IX+0)
 
        JP Z,MK_RET
 
M3kk    CALL DIST
 
        LD B,A
 
        LD A,(MINDIS)
 
        CP B
 
        JR C,Mk_eo3
 
        JR Z,Mk_eo3
 
        LD A,B
 
        LD (MINDIS),A
 
        EX AF,AF
 
        LD (MINLEN),A
 
        EX AF,AF
 
        LD A,#80
 
        LD (NROUND),A
 
Mk_eo3  EX AF,AF
 
        INC A
 
        LD B,A
 
        EX AF,AF
 
        LD A,(MAX_II)
 
        CP B
 
        JP NC,MkLOO3
 
        JP MK_RET
 
        ;
 
CCWstp  POP HL
 
        EXX
 
        EX AF,AF
 
        LD B,A
 
        LD A,(MAXLEN)
 
        ADD A,A
 
        SUB B
 
        LD (MAX_II),A
 
        LD A,B
 
        EX AF,AF
 
MkLOO2  BIT 0,C
 
        JR Z,M2k7
 
        DEC C
 
M2k7    DEC C
 
        PUSH HL
 
CWrep2  LD HL,inMAP ;выровн
 
        LD A,C
 
        AND 7
 
        LD C,A
 
        ADD A,A
 
        ADD A,L
 
        LD L,A
 
        LD A,(HL)
 
        INC L
 
        LD H,(HL)
 
        LD L,A
 
        ADD HL,DE
 
        LD A,(HL)
 
        CP 1   ;пров на прох
 
        JR C,M2k4
 
        JP Z,MK_REp
 
         RLCA
 
         JR NC,M2k4n
 
         CALL Mk_her
 
         JR C,M2k4
 
M2k4n   INC C
 
        JR CWrep2
 
M2k4    EX (SP),HL
 
        LD DE,GO_Ntb
 
        LD A,C
 
        ADD A,A
 
        ADD A,E
 
        LD E,A
 
        LD A,(DE)
 
        ADD A,L
 
        LD L,A
 
        INC DE
 
        LD A,(DE)
 
        ADD A,H
 
        LD H,A
 
        POP DE
 
        CP (IX+1)
 
        JR NZ,M2kk
 
        LD A,L
 
        CP (IX+0)
 
        JP Z,MK_RET
 
M2kk    CALL DIST
 
        LD B,A
 
        LD A,(MINDIS)
 
        CP B
 
        JR C,Mk_eo2
 
        JR Z,Mk_eo2
 
        LD A,B
 
        LD (MINDIS),A
 
        EX AF,AF
 
        LD (MINLEN),A
 
        EX AF,AF
 
        XOR A
 
        LD (NROUND),A
 
Mk_eo2  EX AF,AF
 
        INC A
 
        LD B,A
 
        EX AF,AF
 
        LD A,(MAX_II)
 
        CP B
 
        JP NC,MkLOO2
 
        JP MK_RET
 
 
 
Mk_her  ;препятствие - герой
 
        ;(C: чужаки/движущиеся - прозрачны для трассировки)
 
        RRCA
 
        PUSH AF
 
        PUSH HL
 
        AND #7F ;/CALL 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
 
        SET 3,L
 
        LD A,(HL) ;/LD A,(IX+8)
 
        POP HL
 
        OR A
 
        JR Z,Mk_h2 ;/00
 
        INC A
 
        JR Z,Mk_h2 ;/FF
 
        POP AF ;движущийся прозрачен
 
        SCF
 
        RET
 
Mk_h2   EX AF,AF
 
        CP 4 ;миним дальность-1 на которой враг не проходим
 
        JR C,Mk_h3
 
        EX AF,AF
 
        LD A,(SIDE_N)
 
        OR A
 
        JR NZ,Mk_h1
 
        POP AF
 
        SUB #B0
 
        CP #30
 
        RET  ;враг прозрачен
 
Mk_h1   POP AF
 
        SUB #80
 
        CP #30
 
        RET  ;наш прозрачен
 
Mk_h3   EX AF,AF ;противник близко (непрозрачен)
 
        POP AF
 
        XOR A
 
        RET
 
 
 
 
 
GO_MAN  ;перемещение
 
        LD A,(IX+8)
 
        OR A
 
        RET Z
 
        CALL HL_IXt
 
        EX DE,HL
 
        CALL HL_IX0
 
        PUSH HL
 
        SBC HL,DE
 
        POP HL
 
        JP Z,G_stop ;пришли к цели - стоп
 
        CP #80
 
        JR C,GO_CW
 
        JR NZ,GO_CCW
 
        CALL DIR_F
 
        LD (IX+2),A
 
        CALL GO_NXT
 
        JR C,GO_go
 
          BIT 7,A
 
          JP Z,MAKE_R
 
          CALL GO_NXe
 
          JP Z,MAKE_R
 
          LD (IX+8),0 ;против ложного обхода
 
        JP MAKE_R
 
        ;
 
GO_go   JP go_IX3
 
GO_CW   DEC (IX+8)
 
        CALL Z,G_free
 
        LD C,1
 
        LD A,(IX+2)
 
        DEC A
 
        BIT 0,A
 
        JR NZ,GO_rep
 
        DEC A
 
         LD B,A ;против закручивания
 
         DEC A
 
         AND 7
 
         CALL GO_NXT
 
         JR NC,GO_re2
 
         LD A,(IX+8)
 
         CP #80
 
         JR Z,GO_re2
 
         CP 2
 
         JR C,GO_re2
 
         LD (IX+8),#01
 
        JR GO_re2
 
GO_CCW  DEC (IX+8)
 
        LD C,-1
 
        LD A,(IX+2)
 
        INC A
 
        BIT 0,A
 
        JR NZ,GO_rep
 
        INC A
 
         LD B,A ;против закручивания
 
         INC A
 
         AND 7
 
         CALL GO_NXT
 
         JR NC,GO_re2
 
         LD A,(IX+8)
 
         CP #82
 
         JR C,GO_re2
 
         LD (IX+8),#81
 
GO_re2  LD A,B
 
GO_rep  LD B,8
 
GO_re1  AND 7
 
        LD (IX+2),A
 
        CALL GO_NXT
 
        JR C,Gx3
 
          BIT 7,A
 
          JR Z,G_re5
 
          CALL GO_NXe ;против заторов
 
          JR Z,G_re5
 
          LD A,B
 
          CP 8
 
          JR NC,G_re5a
 
          LD A,R ;для b=6..1
 
          AND #7
 
          RET NZ
 
G_re5a    LD (IX+8),#80 ;для b=7..8
 
G_re5   LD A,(IX+2)
 
        ADD A,C
 
        DJNZ GO_re1
 
        JR G_wait ;! временно заперт - ждать
 
Gx3     CALL HL_IXt
 
        EX DE,HL
 
        CALL DIR
 
        CP (IX+2)
 
        CALL Z,G_rnd
 
        EX DE,HL
 
        JP GO_go
 
 
 
G_rnd   LD A,R ;переходить на своб. траеторию?
 
        AND #7F
 
        CP 7  ;вер:X/128
 
        RET C ;антизацикливание
 
        ;
 
G_free  LD (IX+8),#80 ;своб. перемещ
 
        RET
 
 
 
G_wait  ;ждать прохода
 
        LD (IX+3),#80+6;величина ожидания
 
        JR G_free
 
 
 
G_stop  XOR A ;стоп
 
        LD (IX+8),A
 
        RET
 
 
 
GO_NXT  ;Вх:HL-исх точка, А-напр
 
        ;Вых: DE-след точка, NC/C - непрох/прох
 
        PUSH HL
 
        LD DE,GO_Ntb
 
        ADD A,A
 
        ADD A,E
 
        LD E,A
 
        LD A,(DE)
 
        ADD A,L
 
        LD L,A
 
        INC DE
 
        LD A,(DE)
 
        ADD A,H
 
        LD H,A
 
        LD D,H
 
        LD E,L
 
        LD A,L
 
        RLCA
 
        RLCA
 
        SRL H
 
        RRA
 
        SRL H
 
        RRA
 
        LD L,A
 
        LD A,H
 
        ADD A,MAP2/256
 
        LD H,A
 
        LD A,(HL) ;проработать!
 
        POP HL
 
        CP 1
 
        RET
 
 
 
GO_NXe   ;против заторов
 
         AND #7F
 
         PUSH IX ;впереди герой
 
         PUSH HL
 
         CALL N_IX
 
         LD A,(IX+8)
 
         POP HL
 
         POP IX
 
         OR A
 
         RET Z ;он стоит/00
 
         INC A
 
         RET;Z ;он стоит/FF  /NZ-двигается
 
 
 
 
 
 
 
 
 
;-----герои ходят и дерутся ----------------------------------
 
TimIMP  DEFB 1,1,1,-1,1,1,1,27,1 ;задержка удара (-1 - нет фазы)
 
        DEFB 1,1,1,-1,1,1,1,27,1
 
        DEFB 1,1,1,1,1,1, 2,2,3
 
 
 
TimDEL  DEFB 1,1,1,6,1,1,1, 31,2 ;задержка после удара
 
        DEFB 1,1,1,9,1,1,1, 31,2
 
        DEFB 1,1,1,1,1,1, 2,3,8
 
 
 
HvT1    DEFW 0,1, 1,1, 1,0, 1,-1
 
        DEFW 0,-1, -1,-1, -1,0, -1,1
 
 
 
HvA     ; %1ibttttt
 
        JR NZ,HvAA
 
        LD (IX+3),0  ;конец удара
 
        RET
 
HvAA    LD L,A
 
        AND %11111
 
        JR Z,HvAim
 
        DEC (IX+3)  ;задержка
 
        RET
 
HvAim   BIT 6,L
 
        JR Z,HvAdel
 
        LD A,(IX+4)
 
        LD HL,TimIMP
 
        CALL BA
 
        CP 255
 
        JR C,HvAi1
 
        LD HL,TimDEL ;лучники
 
        LD A,(IX+4)
 
        CALL BA
 
        ADD A,%10000000
 
        LD (IX+3),A
 
         LD A,3         ;FX-лук
 
         JP SOUNDn      ;
 
HvAi1   ADD A,%10100000  ;удар
 
        LD (IX+3),A
 
        LD A,(IX+2)
 
        JR HvA1
 
HvAdel   LD A,(IX+4)    ;FX-эффект удара
 
         LD HL,typSND   ;
 
         CALL BA        ;
 
         CALL SOUNDn    ;
 
        LD A,(IX+4)
 
        LD HL,TimDEL
 
        CALL BA
 
        ADD A,%10000000
 
        LD (IX+3),A
 
        LD A,(IX+2)
 
        ADD A,4
 
        AND 7
 
HvA1    EX AF,AF
 
        LD A,(IX+4)
 
        LD HL,AT_TY_
 
        CALL BA
 
        RRCA
 
        RET C
 
        EX AF,AF
 
        JR Hv2_
 
 
 
HERMOV  ;LD A,(IX+3) ;перемещение (п/п нижн. уровня)
 
        ;OR A
 
        ;RET Z
 
        CP #80 ;в А ix+3
 
        JR NC,HvA
 
        EX AF,AF
 
        DEC (IX+3)
 
        LD A,(IX+7)
 
        AND %111
 
        CP 2
 
        JR Z,Hv2
 
        JP C,Hv1
 
        CP 3
 
        JP NZ,Hv4
 
        EX AF,AF
 
        CP 1
 
        JR Z,Hv2
 
        CP 4
 
        JR Z,Hv2
 
Hv3     LD A,(IX+2)
 
        LD HL,HvT1
 
        CALL DA
 
        INC HL
 
        PUSH HL
 
        LD D,(HL)
 
        LD E,A
 
        LD L,(IY+0)
 
        LD H,(IY+1)
 
        ADD HL,DE
 
        ADD HL,DE
 
        ADD HL,DE
 
        LD (IY+0),L
 
        LD (IY+1),H
 
        POP HL
 
        INC HL
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        LD L,(IY+2)
 
        LD H,(IY+3)
 
        ADD HL,DE
 
        ADD HL,DE
 
        ADD HL,DE
 
        LD (IY+2),L
 
        LD (IY+3),H
 
        RET
 
Hv2     LD A,(IX+2)
 
Hv2_    LD HL,HvT1
 
        CALL DA
 
        INC HL
 
        PUSH HL
 
        LD D,(HL)
 
        LD E,A
 
        LD L,(IY+0)
 
        LD H,(IY+1)
 
        ADD HL,DE
 
        ADD HL,DE
 
        LD (IY+0),L
 
        LD (IY+1),H
 
        POP HL
 
        INC HL
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        LD L,(IY+2)
 
        LD H,(IY+3)
 
        ADD HL,DE
 
        ADD HL,DE
 
        LD (IY+2),L
 
        LD (IY+3),H
 
        RET
 
Hv1     LD A,(IX+2)
 
        LD HL,HvT1
 
        CALL DA
 
        INC HL
 
        PUSH HL
 
        LD D,(HL)
 
        LD E,A
 
        LD L,(IY+0)
 
        LD H,(IY+1)
 
        ADD HL,DE
 
        LD (IY+0),L
 
        LD (IY+1),H
 
        POP HL
 
        INC HL
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        LD L,(IY+2)
 
        LD H,(IY+3)
 
        ADD HL,DE
 
        LD (IY+2),L
 
        LD (IY+3),H
 
        RET
 
Hv4     LD A,(IX+2)
 
        LD HL,HvT1
 
        CALL DA
 
        INC HL
 
        PUSH HL
 
        LD D,(HL)
 
        LD E,A
 
        LD L,(IY+0)
 
        LD H,(IY+1)
 
        ADD HL,DE
 
        ADD HL,DE
 
        ADD HL,DE
 
        ADD HL,DE
 
        LD (IY+0),L
 
        LD (IY+1),H
 
        POP HL
 
        INC HL
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        LD L,(IY+2)
 
        LD H,(IY+3)
 
        ADD HL,DE
 
        ADD HL,DE
 
        ADD HL,DE
 
        ADD HL,DE
 
        LD (IY+2),L
 
        LD (IY+3),H
 
        RET
 
 
 
go_IX3  ;нач знач фазы IX+3
 
        CALL HL_IX0 ;сместить ук в map2 (в DE)
 
        CALL GMAP2
 
        LD C,(HL)
 
        LD (HL),0
 
        EX DE,HL
 
        CALL IX0_HL
 
        CALL GMAP2
 
        LD (HL),C
 
        LD HL,HvTHs ;нач del
 
        LD A,(IX+2)
 
        RRCA
 
        JR NC,gX0
 
        LD HL,HvTDs
 
gX0     CALL gPAR
 
        LD C,8
 
        CP 2
 
        JR Z,gX1
 
        LD C,16
 
        JR C,gX1
 
        CP 3
 
        LD C,6
 
        JR Z,gX1
 
        LD C,4
 
gX1     LD (IX+3),C
 
        LD C,A
 
        LD A,(IX+7)
 
        AND %11111000
 
        OR C
 
        LD (IX+7),A
 
        RET