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