Login

Subversion Repositories NedoOS

Rev

Rev 992 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

INIALI  ;иниц врагов
        LD IX,ALIEN
        LD BC,(A_RASA)
        CALL RND
        AND 3
        JR Z,IA8
        DEC A
IA8     LD L,A
        LD A,B
        SUB L
        LD B,A ;число:=A_NUM-(0..2)
        ;вторая раса L
        LD A,C
        LD L,C
        CP 1
        JR Z,IA0
        CP 5
        JR NC,IA0
IA12    CALL RND
        AND 7
        CP 5
        JR NC,IA12
        INC A
        LD L,A
        ;присвоение типа
IA0     CALL RND
        CP 180
        LD A,C ;1я
        JR C,IA3
        LD A,L  ;2я
IA3     LD (IX+4),A
        LD (IX+8),A ;жив
        LD (IX+5),1 ;враг
        LD (IX+6),1 ;vis
        CALL RND
        AND 7
        LD (IX+3),A
        LD DE,32
        ADD IX,DE
        DJNZ IA0
        ;тентак/кальцин
        CALL RND
        AND 1
        ADD A,6
        LD C,A
        LD IX,10*32+ALIEN
        LD B,12
IA4     CALL RND
        CP 67
        JR NC,IA5
        LD (IX+4),C
IA5     ADD IX,DE
        DJNZ IA4
       if NOENEMY == 0
        CALL A_POS ;размещение врагов
       endif
        CALL A_PARM
        CALL A_GUN
        RET

NEXTSA  ;спр на след поз
        LD DE,(XMAX)
        LD HL,(TX)
        LD A,L
        ADD A,17
        LD L,A
        CP E
        JR C,NXA
        SUB E
        LD L,A
        LD A,H
        ADD A,13
        LD H,A
        CP D
        JR C,NXA
        SUB D
        LD H,A
        LD A,(FLR)
        XOR 1
        CALL FLOOR
NXA     LD (TX),HL
        RET

isUFO   DEFB 1 ;НЛО-ландш (0/1 - N/Y)
inUFO   DEFB 1 ;не 0 - враг д.быть в НЛО
A_POS   ;нач позиции врага
        LD IX,ALIEN
        LD A,(L_LAND)
        OR A
        JR Z,ApU
        CP 5
        JR Z,ApU
        CP 6
        JR NZ,Ap1
ApU     LD A,1
        JR Ap2
Ap1     XOR A
Ap2     LD (isUFO),A
        LD C,#EA
Ap0     LD A,(IX+8)
        OR A
        JP Z,Ap00
        PUSH BC
        LD HL,isUFO
        LD A,(HL)
        OR A
        JR Z,Ap3
        CALL RND
        CP 99
        LD A,0
        JR NC,Ap3
        LD A,255
Ap3     INC HL
        LD (HL),A
Ap5     LD DE,(XMAX)
        CALL RND
        AND #7F
Ap51    CP E
        JR C,Ap52
        SUB E
        JR Ap51
Ap52    LD L,A
        CALL RND
        AND #3F
Ap53    CP D
        JR C,Ap54
        SUB D
        JR Ap53
Ap54    LD H,A
        LD (TX),HL
        LD A,(inUFO)
        OR A
        JR NZ,Ap6
Ap8     CALL GSP
        CP #80
        JR C,Ap7
        AND #7F
        CP 16
        JR C,Ap7
        CP #60
        JR NC,Ap7
        CALL ATSP_
        AND %11100000
        CP %11100000
        JR Z,ApSTAY
Ap7     CALL NEXTSA
        JR Ap8
Ap6     CALL GSP ;внутрь НЛО
        CP #80
        JR C,Ap9
        AND #7F
        CP #3F ;пол НЛО
        JR Z,ApSTAY
Ap9     CALL NEXTSA
        JR Ap6
ApSTAY  CALL GSP
        LD (IX+7),A
        LD HL,(TX)
        LD (IX),L
        LD (IX+1),H
        LD A,(FLR)
        LD (IX+2),A
        POP BC
        LD A,C
        CALL PSP
Ap00    LD DE,32
        ADD IX,DE
        INC C
        JP NZ,Ap0
        RET

A_PARM  ;парам врага
        LD IX,ALIEN
        LD B,22
Am0     LD A,(IX+8)
        OR A
        JR Z,Am00
        LD A,(IX+4)
        DEC A
        LD C,A
        ADD A,A
        ADD A,A
        ADD A,C
        LD HL,A_PT
        CALL BA
        LD (IX+11),A
        LD (IX+27),A
        INC HL
        LD A,(HL)
        LD (IX+12),A
        LD (IX+28),A
        INC HL
        CALL RND
        AND 31
        ADD A,(HL)
        LD (IX+13),A
        LD (IX+29),A
        INC HL
        LD A,(HL)
        LD (IX+15),A
        LD (IX+31),A
        INC HL
        LD A,(HL)
        LD (IX+16),A
Am00    LD DE,32
        ADD IX,DE
        DJNZ Am0
        RET

A_PT    ;парам инопл (TU,EN,HEALTH(+0..31),MORAL,PREC)
        DEFB 78,133,33,37,84    ;акв
        DEFB 85,133,65,59,81    ;дай
        DEFB 97,133,111,86,87   ;лоб
        DEFB 81,100,40,49,70    ;жил
        DEFB 82,148,80,86,89    ;таш
        DEFB 100,200,96,124,110 ;тен
        DEFB 110,148,50,80,80   ;кальц

A_GUNT  DEFB 8,255,255,255
        DEFB 9,10,10,10
        DEFB 9,5,10,10
        DEFB 8,255,10,255
        DEFB 8,5,10,255
        DEFB 255,255,255,255
        DEFB 12,255,255,255

A_extG  DEFB 2,3,5,10,3,2,10,3

A_GUN   ;оружие врага
        LD IX,ALIEN+17
        LD B,22
Ag0     LD A,(IX-13)
        LD (X0),A
        LD HL,A_GUNT-4
        CALL DD
        LD C,4
Ag9     LD A,C
        CP 3
        JR NZ,Ag91 ;дополн оружие
        LD A,(X0)
        CP 6
        JR NC,Ag91 ;тент/кальц
        LD A,(PERIOD)
        CP 2    ; 2..6
        JR C,Ag91
        CALL RND
        AND %100 ;50%
        JR Z,Ag91
        PUSH HL
        CALL RND
        AND 7
        LD HL,A_extG
        CALL BA
        POP HL
        JR Ag92
Ag91    LD A,(HL)
Ag92    LD (IX),A
        LD (G_TYPE),A
        LD A,6
        CALL GUN_BT
        LD (IX+4),A
        INC HL
        INC IX
        CALL RND
        DEC C
        JR NZ,Ag9
Ag00    LD DE,28
        ADD IX,DE
        DJNZ Ag0
        RET

SELALI  ;видимого врага->в центр
        LD A,(BX)
        SUB 13
        SRL A
        OR A
        RET Z
        CP 8
        RET NC
        DEC A
        LD HL,LA_DIM
        CALL BT
        CP 255
        JP Z,BEEP
        AND #7F
        CALL GET_AD
        CALL GT_DE_
        CALL CENTR_
        CALL ALLSPF
        CALL OUTDSC
        JP _BRE

isNEW   DEFB 0; 1-появился новый
LA_DIM  DEFS 7,255;номера видимых врагов (255-нет)

LA_OUT  ;выв LA_DIM на экран
        CALL MEM7
        LD HL,LA_DIM
        LD DE,ATR+512+47
        PUSH DE
        LD B,7
LU0     LD A,(HL)
        INC HL
        CP 255
        JR C,LU8
        LD A,#68
        JR LU1
LU8     RLA
        LD A,#58
        JR C,LU1
        LD A,#70
LU1     LD (DE),A
        INC DE
        LD (DE),A
        INC DE
        DJNZ LU0
        POP HL
        LD DE,ATR+512+79
        LD BC,14
        LDIR
        JP PT128

LOOK_A  ;есть ли кругом враги? NZ-были новые
        LD HL,LA_DIM
        LD DE,LA_DIM+1
        LD (HL),255
        LDI
        LDI
        LDI
        LDI
        LDI
        LDI
        XOR A
        LD (isNEW),A
        LD IX,MAN
        LD BC,#0000
LAK0    PUSH BC
        CALL HERLIV
        JR Z,LAKe
        LD A,(IX+5)
        OR A
        JR Z,LAKe
        CALL inRANGE
        JR NC,LAKe
        CALL inSECT
        JR NC,LAKe
        CALL inLINE
        JR NC,LAKe
        POP BC
        LD A,C
        LD HL,LA_DIM
        CALL BA
        LD A,(IX+6)
        OR A
        LD A,B
        JR Z,LAK2
        CPL
        LD (isNEW),A
        LD A,#80
        ADD A,B
LAK2    LD (IX+6),0
        LD (HL),A
        INC C
        PUSH BC
LAKe    POP BC
        LD A,C
        CP 7
        JR NC,LAKr
        LD DE,32
        ADD IX,DE
        INC B
        LD A,B
        CP 32
        JP C,LAK0
LAKr    LD A,(isNEW)
        OR A
        RET

A_RANGE ;возможн. стрельбы для инопл
        LD A,4
        CALL HER_BA
        CP 3 ;лобст
        JR Z,A_R3
        CP 2 ;дайп
        JR Z,A_R2
        JR inRANGE
A_R3    CALL RND
        CP 7
        RET C
        JR inRANGE
A_R2    CALL RND
        RRA
        JR C,inRANGE
        CALL RASSTA
        CP 16
        RET

R16T    DEFB #F,#F,#F,#E,#E,#E,#D,#D,#C,#C,#B,#A,9,7,5,2
inRANGE ;в радиусе 16?  NC-нет, С-да
        CALL GET_DE
        CALL GET_XY
        LD A,L
        SUB E
        JR NC,IG2
        NEG
IG2     CP 16
        RET NC
        LD E,A
        LD A,H
        SUB D
        JR NC,IG1
        NEG
IG1     CP 16
        RET NC
        LD HL,R16T
        CALL BA
        CP E
        CCF
        RET

inSECT  ;в секторе видимости 90?
        CALL GET_DE
        INC HL
        LD C,(HL)
        CALL GET_XY
        EX DE,HL
        PUSH HL
        PUSH DE
        CALL DIR_
        POP HL
        POP DE
        SUB C
        INC A
        AND 7
        CP 3
        RET NC; C-OK, NC-bad
        BIT 0,C
        RET NZ
        LD A,H
        SUB D
        JR NC,inS2
        NEG
inS2    LD H,A
        LD A,L
        SUB E
        JR NC,inS3
        NEG
inS3    CP H
        BIT 1,C
        RET NZ
        CCF
        RET

inLINE  ;на линии видимости?
        LD A,(FLR)
        PUSH AF
        CALL SEEini
San10   LD HL,(SFX2)
        LD DE,(SPPX)
        OR A
        SBC HL,DE
        JR NZ,San3
        LD HL,(SFLR)
        LD A,(FLR)
        CP L
        JR NZ,San33
        POP AF ;на линии видимости
        CALL FLOOR
        SCF
        RET C
San3    CALL SEEnxt
        CP 1
        JR C,San10
San33   POP AF ;невидим
        CALL FLOOR
        XOR A
        RET NC

SEEini  CALL GET_DE
        PUSH HL
        LD (SFX2),DE
        LD A,(HL)
        CALL FLOOR
        CALL GET_XY
        LD (SPPX),HL
        LD A,(IX+2)
        LD (SFLR),A
        PUSH AF
        CALL LINini
        POP AF
        POP HL
        OR A
        LD C,23
        JR NZ,QS1
        LD C,7
QS1     LD A,(HL)
        OR A
        LD A,23
        JR NZ,QS2
        LD A,7
QS2     LD (FHIGH),A
        SUB C
        LD C,1 ;up
        JR NC,QS3
        DEC C ;dwn
        NEG
QS3     LD L,A
        SRL A
        LD (DHIGH),A
        LD A,(LIN_LN)
        LD H,A
        LD (PHIGH),HL
        LD A,C
        LD (F_SH),A
        RET

SFLR    DEFB 6
SFX2    DEFW 1
SPPX    DEFW 2

SEEnxt  ;след. поз. взгляда ;0,1,2-далее,вылет,попал
        LD HL,(SFX2)
        LD (TX),HL
        LD DE,(PHIGH) ;высота
        LD HL,FHIGH
        LD A,(DHIGH)
        ADD A,E
        LD (DHIGH),A
Se01    CP D
        LD A,(F_SH)
        JR C,Se0
        DEC (HL)
        OR A
        JR NZ,Se02
        INC (HL)
        INC (HL)
Se02    LD A,(DHIGH)
        SUB D
        LD (DHIGH),A
        JR Se01
Se0     OR A
        JR NZ,Se2
        LD A,(HL)  ;dwn
        CP 32
        JR C,Se3
        JR Se30
Se3     CP 16
        JR C,Se1
        LD A,(FLR)
        OR A
        JR NZ,Se1
        PUSH DE
        CALL GSP
        AND #7F
        JR Z,Se31
        POP DE
Se30    LD A,2 ;пол/потолок непрозр
        RET
Se31    LD A,1
        CALL FLOOR
        JR Se51
Se2     LD A,(HL) ;Up
        CP 200
        JR C,Se5
SeOUT   LD A,1
        RET
Se5     CP 16
        JR NC,Se1
        LD A,(FLR)
        OR A
        JR Z,Se1
        PUSH DE
        XOR A
        CALL FLOOR
        CALL GSP
        AND #7F
        JR Z,Se51
        POP DE
        LD A,1
        CALL FLOOR
        JR Se30
Se51    POP DE
Se1     CALL LINnxt ;коорд
        LD (SFX2),DE
        LD A,(XMAX)
        CP E
        JR C,SeOUT
        LD A,(YMAX)
        CP D
        JR C,SeOUT
        LD (TX),DE
        CALL GSP
        AND #7F
        RET Z
        CP #60
        JR NC,Se6
        CALL ATSP_
        LD C,A
        LD A,2
        BIT 7,C ;?see
        RET Z
Se6     XOR A
        RET Z

LAST_M  DEFB 0;кем последним ходили?

NX_MOV  ;----передача хода----
        LD A,(HER_N)
        LD (LAST_M),A
        LD A,(NX_RNB)
        LD (RNB),A
        LD HL,(NX_RNA)
        LD (RNA),HL
        ;взрыв гранат,закр дверей
        CALL DO_SET
        ;очистка гр и дв
        CALL CLRSET
        ;восст парам врагов
        LD C,1
        CALL REPA32
        CALL ENDBAT
        ;враги ходят
        CALL ALINXT
        ;вых из под контроля
        CALL DECONT
        ;взрыв гранат,закр дверей
        CALL DO_SET
        ;невидимость врагов
        CALL VISOFF
        ;осмотр перед ходом
        CALL INILOK
        ;очистка гр и дв
        CALL CLRSET
        ;восст парам людей
        LD C,0
        CALL REPA32
        CALL ENDBAT
       if PROTECT
        CALL CHECK6 ;[]
       endif
        ;паника людей
        CALL PANIC
        ;проверка числа иссл []
        CALL RESNUM
        LD C,A
        LD A,(R_NUM)
        CP C
        CALL NZ,NX_MOV
        ;взять первого
        LD A,(LAST_M)
        CALL GET_IX
        CALL HERLIV
        JR Z,nx0
        LD A,(IX+5)
        OR A
        JR NZ,nx0
        LD A,(LAST_M)
        CALL NEWHER
        JR nx1
nx0     CALL HER1st
nx1     CALL MCENTR
        ;randomize
        LD A,R
        LD HL,RNB
        XOR (HL)
        LD (NX_RNB),A
        LD HL,(RNA)
        INC H
        INC H
        INC H
        LD (NX_RNA),HL
        ;выход
        CALL REDLIN
        JP _BRE

REPA32  LD A,31 ;восст парам для (IX+5)=C
R321    PUSH AF
        PUSH BC
        CALL NEWHER
        PUSH HL
        POP IX
        CALL HERLIV
        JR Z,R320
        LD A,(IX+5)
        CP C
        CALL Z,REPAR
R320    POP BC
        POP AF
        DEC A
        CP 32
        JR C,R321
        RET NC


CLRSET  LD HL,SET_N ;очистка SETDIM
        LD DE,SETDIM
        LD BC,SETLEN*5
        LD (HL),0
        LDIR
        RET

DO_SET  ;исполнить SETDIM
        LD A,(SET_N)
        OR A
        RET Z
        LD B,A
        LD IY,SETDIM
DOs1    PUSH BC
        PUSH IY
        LD L,(IY)
        LD H,(IY+1)
        LD (TX),HL
        LD A,(IY+2)
        CALL FLOOR
        LD A,(IY+3)
        OR A
        JR Z,DOgr
        CALL GSP     ;закр дв
        LD B,A
        AND #7F
        CP (IY+3)
        JR NZ,DOs0
        LD A,B
        AND #80
        OR (IY+4)
        CALL PSP
        JR DOs0
DOgr    LD DE,(TX)  ;взр гр
        LD (FXOLD),DE
        CALL CENTRg
        CALL ALLSPF
        CALL OUTDSC
        LD IX,MU94
        CALL S_MENU
        LD A,10
        LD (G_TYPE),A
        CALL BOOMER
        LD A,25
        CALL DELAY
        CALL ENDBAT
DOs0    POP IY
        LD BC,5
        ADD IY,BC
        POP BC
        DJNZ DOs1
       if PROTECT
        JP CHK_4
       else
        ret
       endif

MU94    DEFW #203,#5E0A

VISOFF  ;откл видимости для ALIEN
        LD IX,MAN
        LD B,32
        LD DE,32
VF0     CALL HERLIV
        JR Z,VF1
        LD A,(IX+5)
        OR A
        JR Z,VF1
        LD (IX+6),1
VF1     ADD IX,DE
        DJNZ VF0
        RET

ALINXT  LD A,(FIRTYP)
        PUSH AF
        CALL OUTDSC
        CALL S_BACK ;сообщ о ходе
        CALL STD
        LD HL,6
        LD (SX),HL
        LD A,202
        CALL NWRDM
        CALL S_COPY
        CALL REDLIN
        LD A,31 ;ход пришельцев
ALM0    PUSH AF
        CALL NEWHER
        PUSH HL
        POP IX
        CALL HERLIV
        JR Z,NOTALI
        LD A,(IX+5)
        OR A
        JR Z,NOTALI
        CALL ALIENS
NOTALI  POP AF
        DEC A
        CP 32
        JP C,ALM0
        POP AF
        LD (FIRTYP),A
        RET

REDLIN  LD HL,ATR+5
        CALL MEM7       ;смена цв загол
        LD B,20
REDLL   LD A,(HL)
        XOR %1011
        LD (HL),A
        INC L
        DJNZ REDLL
        JP PT128

ALIMOV  LD C,A ;передв. врага. (С-поворот и междуфазье)
        LD A,(PHASE)
        OR A
        JR NZ,MOA4
        LD IX,(HER_AD)
        LD A,(IX+3)
        LD D,A
        CP C
        JR Z,MOA1
        SUB C
        AND 7
        CP 4
        LD A,D
        JR NC,MOA2
        DEC A
        JR MOA3
MOA2    INC A
MOA3    AND 7
        LD (IX+3),A
        CALL GET_XY
        LD (TX),HL
        CALL PXYF
        SCF
        RET
MOA1    CALL GET_XY ;ALI вых
        PUSH HL
        CALL NEXTXY
        CALL DOOR_
        LD (IX),L
        LD (IX+1),H
        POP HL
        LD (TX),HL
        LD A,(IX+7)
        CALL PSP
        CALL PXYF
        LD A,4
        LD (PHASE),A
MOA4    CALL GET_XY
        LD (TX),HL
        LD HL,PHASE
        DEC (HL)
        LD A,(HL)
        OR A
        JR NZ,MOA7
        CALL GSP ;поставить на поле
        LD (IX+7),A
        AND #80
        LD C,A
        LD A,(HER_N)
        ADD A,#60
        ADD A,C
        CALL PSP
        CALL PXYF
        XOR A
        RET
MOA7    LD A,(IX+6)
        OR A
        JR NZ,MOA77
        CALL INFR
MOA77   CCF
        RET C
        CALL XYHL
        LD (TXT),HL
        LD A,(PHASE)
        AND 1
        LD C,(IX+3)
        ADD A,C
        ADD A,C
        CALL M96
        LD A,(IX+4)
        RLCA
        LD C,A
        RLCA
        ADD A,C
        ADD A,H
        LD H,A
        LD DE,xHERO
        ADD HL,DE
        EX DE,HL
        LD A,(IX+3)
        LD C,A
        RLCA
        ADD A,C
        LD C,A
        LD A,(PHASE)
        DEC A
        ADD A,C
        PUSH AF
        LD HL,xROT
        CALL BA
        EX AF,AF
        POP AF
        LD HL,xDHL
        CALL WT
        LD BC,DSCR+257
        ADD HL,BC
        LD BC,(TXT)
        ADD HL,BC
        EX AF,AF
        CALL HERO
        LD A,(IX+3)
        LD HL,xRELT
        CALL WT
        LD (CREL2+1),HL
        CALL GET_XY
CREL2   CALL #3D13
        SCF
        RET

ALIENS  LD A,(IX+4) ;действия одного врага
        LD HL,INTEL
        CALL WT
        JP (HL)

INTEL   DEFW INTL0,INTL1,INTL2,INTL3,INTL4,INTL5,INTL6,INTL7
MVorFR  DEFB 160,125,175,225,154,190,100,210 ;вероятн. стрельбы

INTL0
INTL1
INTL2
INTL4
INTL3
INTL5
INTL7
INTLOO  LD A,20
        LD (ITER),A
        XOR A
        LD (isMVIS),A
        LD (isMOFF),A
INTLO_  LD HL,ITER
        DEC (HL)
        RET Z
        LD A,(IX+11)
        CP 6
        RET C
        LD A,(IX+12)
        CP 4
        RET C
        LD A,(IX+4)
        LD HL,MVorFR
        CALL BA
        CALL RND
        CP (HL)
        PUSH IX
        PUSH AF
        CALL C,A_FIRE
        POP AF
        CALL NC,A_MOVE
        POP IX
        CALL HERLIV
        RET Z
        JR INTLO_

ITER    DEFB 0 ;число итераций

isMVIS  DEFB 0;0-перемещ невидимы,1-видимы

A_MOVE  ;перемещение инопл
        BIT 7,(IX+7)
        JR Z,AM_TV
        CALL RND
        CP 22
        RET NC
        JR C,AM_TT
AM_TV   CALL IS_VIS
        JR C,AM_TT
        CALL RND
        RLA
        RET NC
AM_TT   ;поиск цели
        CALL GET_DE
        LD A,(HL)
        CALL FLOOR
        LD B,25
AM_T1   PUSH DE ;среди чёрных полей
        CALL RND
        AND #F
        SUB 7
        ADD A,D
        LD D,A
        CALL RND
        AND #F
        SUB 8
        ADD A,E
        LD E,A
        LD (TX),DE
        CALL GSP
        BIT 7,A
        JR Z,AM_T0
        AND #7F
        CP #60
        JR NC,AM_T0
        CALL ATSP_
        AND %00100000
        JR NZ,AM_MV0
AM_T0   POP DE
        DJNZ AM_T1
        LD B,10
AM_0T1  PUSH DE
AM_0T2  CALL RND
        AND #1F
        CP 25
        JR NC,AM_0T2
        SUB 12
        ADD A,D
        LD D,A
AM_0T3  CALL RND
        AND #1F
        CP 25
        JR NC,AM_0T3
        SUB 12
        ADD A,E
        LD E,A
        LD (TX),DE
        CALL GSP
        LD C,A
        AND #7F
        CP #60
        JR NC,AM_0T0
        CALL ATSP_
        AND %00100000
        JR NZ,AM_MV0
AM_0T0  POP DE
        DJNZ AM_0T1
        RET
        ;перемещ
AM_MV0  POP DE
        LD HL,(TX)
        LD (PPX),HL
        CALL TRACE1
        RET C
        CALL TRACE2
AM_MV   LD A,(DE)
        CP 8
        JR NC,AM_RE2
        AND 1
        PUSH DE
        PUSH AF
        CALL IS_VIS
        JR NC,AM_MV5
        LD HL,isMVIS
        LD A,(HL)
        OR A
        JR NZ,AM_MV5
        INC (HL)
        CALL CENTR
        CALL ALLSPF
AM_MV5  POP AF
        LD DE,#402
        JR Z,AM_MV4
        LD DE,#603
AM_MV4  CALL DECPAR
        JR C,AM_RET
AM_M66  LD A,(isMVIS)
        OR A
        JR Z,AM_M77
        CALL OUTDSA
        CALL PBU
AM_M77  POP DE
        LD A,(DE)
        PUSH DE
        CALL ALIMOV
        JR C,AM_M66
        POP DE
        DEC DE
        JR AM_MV

AM_RET  POP DE
AM_RE2  LD A,(isMVIS)
        OR A
        RET Z
        CALL OUTDSA
        JP PBU

T_AL    DEFB 0
T_HA    DEFW 0
IS_VIS  ;видим ли текущ инапл
        ;NC - нет, С - да
        LD A,7 ;если на чёрн поле
        CALL HER_BA
        RLCA
        CCF
        JR C,LVKb
        DEC HL
        LD (HL),1
        RET
LVKb    LD A,(HER_N)
        LD HL,(HER_AD)
        LD (T_HA),HL
        LD (T_AL),A
        XOR A
LVK0    PUSH AF
        CALL NEWHER
        PUSH HL
        POP IX
        CALL HERLIV
        JR Z,LVKe
        LD A,(IX+5)
        OR A
        JR NZ,LVKe
        LD IX,(T_HA)
        LD (IX+6),1
        CALL inRANGE
        JR NC,LVKe
        CALL inSECT
        JR NC,LVKe
        CALL inLINE
        JR NC,LVKe
        LD IX,(T_HA)
        LD (IX+6),0
        POP AF
        SCF
        JR LVKr
LVKe    POP AF
        INC A
        CP 32
        JP C,LVK0
        XOR A
LVKr    PUSH AF
        LD A,(T_AL)
        CALL NEWHER
        POP AF
        RET

DECONT  ;выход из-под контроля
        LD IX,MAN
        LD B,32
DNT0    PUSH BC
        PUSH IX
        CALL HERLIV
        JR Z,DNT1
        CALL RND
        AND %110100 ;вероятн 1/8
        JR NZ,DNT1
        LD A,(IX+4)
        OR A
        LD A,(IX+5)
        JR NZ,DNTA
        OR A
        JR Z,DNT1
        LD (IX+5),0
        LD (IX+6),0
        ;акв вых из-под
        LD A,(IX+8)
        LD (MU66+4),A
        LD HL,MU66
        JR DNTT
DNTA    OR A
        JR NZ,DNT1
        LD (IX+5),1
        ;приш вых из-под
        LD A,(IX+4)
        ADD A,21
        LD (MU67+4),A
        LD HL,MU67
DNTT    PUSH HL
        LD (HER_AD),IX
        CALL CENTR4
        CALL ALLSPF
        CALL OUTDSC
        POP IX
        CALL S_MENU
DNT1    POP IX
        LD BC,32
        ADD IX,BC
        POP BC
        DJNZ DNT0
        RET

MU66    DEFW #202,#4218
        DEFB 2
MU67    DEFW #202,#4318
        DEFB 2
MU69    DEFW #202,#4518
        DEFB 2

PANIC   LD IX,MAN ;выв сообщ о панике
        LD B,10
PA0     PUSH BC
        PUSH IX
        CALL HERLIV
        JR Z,PA1
        LD A,(IX+4)
        OR A
        JR NZ,PA1
        LD A,(IX+15)
        CP 50
        JR NC,PA1
        CALL RND
        AND 7
        LD (IX+11),A
        LD (IX+6),0
        LD A,(IX+8)
        LD (MU69+4),A
        LD (HER_AD),IX
        CALL CENTR4
        CALL ALLSPF
        CALL OUTDSC
        LD IX,MU69
        CALL S_MENU
PA1     POP IX
        LD BC,32
        ADD IX,BC
        POP BC
        DJNZ PA0
        RET

isMOFF  DEFB 0 ;1-предыдущ шаг был виден
OUTDSA  ;OUTDSC для врагов
        LD A,6
        CALL HER_BA
        OR A
        LD HL,isMOFF
        JR NZ,NO_DSC
        LD (HL),2
        JP OUTDSC
NO_DSC  LD A,(HL)
        OR A
        JR Z,NDS1
        DEC (HL)
        JP Z,OUTDSC
NDS1    LD      B,16*8 ;заменяет OUTDSC
NDS2    LD      C,34
NDS3    DEC     C
        JR      NZ,NDS3
        DJNZ    NDS2
        RET

A_FIRE  CALL RND  ;выб.типа стр
        AND 1
        LD (FIRTYP),A
        LD A,(IX+18)
        CP 5
        JR NZ,AFI3
        ;вибр рез
AFITC6  LD (IX+25),1
AFITCH  CALL GUNTIM
        INC A
        CP (IX+11)
        RET NC
        CALL GET_DE
        LD A,(HL)
        PUSH DE
        CALL FLOOR
        POP HL
        CALL NEARHL
        JR NC,AFI3
        LD HL,(TX)
        LD (PPX),HL
        CALL IS_VIS
        CALL CENTR
        CALL HERROT
        LD B,1
        PUSH BC
        JR FIR_BG
AFI3    LD (IX+25),0 ;выб.оруж
        CALL RND
        CP 100
        JR C,AFI2    ;основн оруж
        CALL RND
        AND 3
        LD (IX+25),A
        CALL CURGUN
        CP 13
        JR NC,AFI3
        CP 5       ;резаки & т.шок
        JR Z,AFITCH
        CP 6
        JR Z,AFITCH
        CP 11
        JR Z,AFITCH
AFI2    CALL GUNTIM
        INC A
        CP (IX+11)
        RET NC ;нет времени
        LD B,45   ;выб.жертвы
AFI0    PUSH BC
        CALL RND
        AND 31
        CALL GET_IX
        CALL HERLIV
        JR Z,AFI1
        LD A,(IX+5)
        OR A
        JR NZ,AFI1
        CALL inRANGE
        JR NC,AFI1
        CALL GET_XY
        LD (PPX),HL
        LD A,(IX+2)
        CALL FLOOR
        CALL CANFIR
        LD A,(CANF_B)
        CP #68
        JR NZ,AFI1
FIR_BG  CALL CURGUN
        JR NC,AFI1
        LD HL,FIR_T
        CALL WT
        LD (FIR_AC+1),HL
        LD A,(FLR)
        PUSH AF
        CALL IS_VIS
        CALL CENTR
        CALL ALLSPF
        POP AF
        CALL FLOOR
        XOR A ;Z-в поле
        LD (afterE),A
FIR_AC  CALL FROK
        POP BC
        CALL OUTDSC
        CALL CENTR
        CALL ALLSPF
        JP ENDBAT
AFI1    POP BC
        DJNZ AFI0
        RET

NEARHL  ;есть кто-то рядом с HL? NC - no, C -yes (in TX)
        DEC L
        CALL NHL
        INC H
        CALL NHL
        INC L
        CALL NHL
        INC L
        CALL NHL
        DEC H
        CALL NHL
        DEC H
        CALL NHL
        DEC L
        CALL NHL
        DEC L
        CALL NHL
        XOR A
        RET

NHL     LD (TX),HL
        CALL GSP60
        JR C,NHLR2
        SUB #60
        PUSH IX
        CALL GET_IX
        CALL HERLIV
        JR Z,NHLR1
        LD A,(IX+5)
        OR A
        JR NZ,NHLR1
        POP IX
        POP AF ;call
        SCF
        RET
NHLR1   POP IX
NHLR2   LD HL,(TX)
        RET

TIM_6   EQU 31 ; % время на превращение
INTL6   LD A,20 ;тентакулат
        LD (ITER),A
        XOR A
        LD (isMVIS),A
        LD (isMOFF),A
INTL6_  LD HL,ITER
        DEC (HL)
        RET Z
        LD A,(IX+11)
        CP 6
        RET C
        PUSH IX
        CP TIM_6
        JR C,INTL61
        CALL A_FIR6
        POP IX
        PUSH IX
        CALL A_MOV6
        JR INTL62
INTL61  CALL A_MOVE
INTL62  POP IX
        CALL HERLIV
        RET Z
        JR INTL6_

A_MOV6  CALL GET_DE
        LD A,(HL)
        CALL FLOOR
        LD B,35
AM_61   PUSH DE ;рядом с людьми
        CALL RND
        AND #1F
        SUB 15
        ADD A,D
        LD D,A
        CALL RND
        AND #1F
        SUB 16
        ADD A,E
        LD E,A
        LD (TX),DE
        CALL GSP60
        JR NC,AM_60
        CALL ATSP_
        AND %00100000
        JR Z,AM_60
        LD HL,(TX)
        PUSH HL
        CALL NEARHL
        POP HL
        LD (TX),HL
        JP C,AM_MV0
AM_60   POP DE
        DJNZ AM_61
        JP A_MOVE

A_FIR6  LD (IX+18),16
        PUSH IX
        CALL AFITC6
        POP IX
        LD (IX+18),255
        RET

G_TENT  CALL FLASHs  ;тентакулат
        CALL FLASHs
        CALL FLASHs
        CALL FLASHs
        LD (IX+4),6
        LD (IX+5),1
        LD HL,(A_PT+25)
        LD A,(A_PT+27)
        LD (IX+27),L
        LD (IX+12),H
        LD (IX+28),H
        LD (IX+13),A
        LD (IX+29),A
        XOR A
        LD (IX+9),A
        LD (IX+10),A
        LD (IX+11),A
        DEC A
        LD (IX+17),A
        LD (IX+18),A
        LD (IX+19),A
        LD (IX+20),A
        CALL GET_XY
        LD (TX),HL
        CALL PXYF
        CALL FLASHs
        CALL FLASHs
        JP FLASH

       if PROTECT
CHECT6  DEFW TAB100+50,TAB100+84

CHECK6  PUSH AF
        XOR A           ;[]#6
        CALL CHEC6_
        EX DE,HL
        LD BC,#C01F
        LD A,1
        CALL CHEC6_
        ADD HL,BC
        XOR A
        SBC HL,DE
        JP NZ,LDASM3
        POP AF
        JP GET_XY
       
CHEC6_  LD HL,CHECT6
        CALL WT
        PUSH HL
        POP IX
        JP GET_XY
       endif