?login_element?

Subversion Repositories NedoOS

Rev

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

  1. INIALI  ;иниц врагов
  2.         LD IX,ALIEN
  3.         LD BC,(A_RASA)
  4.         CALL RND
  5.         AND 3
  6.         JR Z,IA8
  7.         DEC A
  8. IA8     LD L,A
  9.         LD A,B
  10.         SUB L
  11.         LD B,A ;число:=A_NUM-(0..2)
  12.         ;вторая раса L
  13.         LD A,C
  14.         LD L,C
  15.         CP 1
  16.         JR Z,IA0
  17.         CP 5
  18.         JR NC,IA0
  19. IA12    CALL RND
  20.         AND 7
  21.         CP 5
  22.         JR NC,IA12
  23.         INC A
  24.         LD L,A
  25.         ;присвоение типа
  26. IA0     CALL RND
  27.         CP 180
  28.         LD A,C ;1я
  29.         JR C,IA3
  30.         LD A,L  ;2я
  31. IA3     LD (IX+4),A
  32.         LD (IX+8),A ;жив
  33.         LD (IX+5),1 ;враг
  34.         LD (IX+6),1 ;vis
  35.         CALL RND
  36.         AND 7
  37.         LD (IX+3),A
  38.         LD DE,32
  39.         ADD IX,DE
  40.         DJNZ IA0
  41.         ;тентак/кальцин
  42.         CALL RND
  43.         AND 1
  44.         ADD A,6
  45.         LD C,A
  46.         LD IX,10*32+ALIEN
  47.         LD B,12
  48. IA4     CALL RND
  49.         CP 67
  50.         JR NC,IA5
  51.         LD (IX+4),C
  52. IA5     ADD IX,DE
  53.         DJNZ IA4
  54.        if NOENEMY == 0
  55.         CALL A_POS ;размещение врагов
  56.        endif
  57.         CALL A_PARM
  58.         CALL A_GUN
  59.         RET
  60.  
  61. NEXTSA  ;спр на след поз
  62.         LD DE,(XMAX)
  63.         LD HL,(TX)
  64.         LD A,L
  65.         ADD A,17
  66.         LD L,A
  67.         CP E
  68.         JR C,NXA
  69.         SUB E
  70.         LD L,A
  71.         LD A,H
  72.         ADD A,13
  73.         LD H,A
  74.         CP D
  75.         JR C,NXA
  76.         SUB D
  77.         LD H,A
  78.         LD A,(FLR)
  79.         XOR 1
  80.         CALL FLOOR
  81. NXA     LD (TX),HL
  82.         RET
  83.  
  84. isUFO   DEFB 1 ;НЛО-ландш (0/1 - N/Y)
  85. inUFO   DEFB 1 ;не 0 - враг д.быть в НЛО
  86. A_POS   ;нач позиции врага
  87.         LD IX,ALIEN
  88.         LD A,(L_LAND)
  89.         OR A
  90.         JR Z,ApU
  91.         CP 5
  92.         JR Z,ApU
  93.         CP 6
  94.         JR NZ,Ap1
  95. ApU     LD A,1
  96.         JR Ap2
  97. Ap1     XOR A
  98. Ap2     LD (isUFO),A
  99.         LD C,#EA
  100. Ap0     LD A,(IX+8)
  101.         OR A
  102.         JP Z,Ap00
  103.         PUSH BC
  104.         LD HL,isUFO
  105.         LD A,(HL)
  106.         OR A
  107.         JR Z,Ap3
  108.         CALL RND
  109.         CP 99
  110.         LD A,0
  111.         JR NC,Ap3
  112.         LD A,255
  113. Ap3     INC HL
  114.         LD (HL),A
  115. Ap5     LD DE,(XMAX)
  116.         CALL RND
  117.         AND #7F
  118. Ap51    CP E
  119.         JR C,Ap52
  120.         SUB E
  121.         JR Ap51
  122. Ap52    LD L,A
  123.         CALL RND
  124.         AND #3F
  125. Ap53    CP D
  126.         JR C,Ap54
  127.         SUB D
  128.         JR Ap53
  129. Ap54    LD H,A
  130.         LD (TX),HL
  131.         LD A,(inUFO)
  132.         OR A
  133.         JR NZ,Ap6
  134. Ap8     CALL GSP
  135.         CP #80
  136.         JR C,Ap7
  137.         AND #7F
  138.         CP 16
  139.         JR C,Ap7
  140.         CP #60
  141.         JR NC,Ap7
  142.         CALL ATSP_
  143.         AND %11100000
  144.         CP %11100000
  145.         JR Z,ApSTAY
  146. Ap7     CALL NEXTSA
  147.         JR Ap8
  148. Ap6     CALL GSP ;внутрь НЛО
  149.         CP #80
  150.         JR C,Ap9
  151.         AND #7F
  152.         CP #3F ;пол НЛО
  153.         JR Z,ApSTAY
  154. Ap9     CALL NEXTSA
  155.         JR Ap6
  156. ApSTAY  CALL GSP
  157.         LD (IX+7),A
  158.         LD HL,(TX)
  159.         LD (IX),L
  160.         LD (IX+1),H
  161.         LD A,(FLR)
  162.         LD (IX+2),A
  163.         POP BC
  164.         LD A,C
  165.         CALL PSP
  166. Ap00    LD DE,32
  167.         ADD IX,DE
  168.         INC C
  169.         JP NZ,Ap0
  170.         RET
  171.  
  172. A_PARM  ;парам врага
  173.         LD IX,ALIEN
  174.         LD B,22
  175. Am0     LD A,(IX+8)
  176.         OR A
  177.         JR Z,Am00
  178.         LD A,(IX+4)
  179.         DEC A
  180.         LD C,A
  181.         ADD A,A
  182.         ADD A,A
  183.         ADD A,C
  184.         LD HL,A_PT
  185.         CALL BA
  186.         LD (IX+11),A
  187.         LD (IX+27),A
  188.         INC HL
  189.         LD A,(HL)
  190.         LD (IX+12),A
  191.         LD (IX+28),A
  192.         INC HL
  193.         CALL RND
  194.         AND 31
  195.         ADD A,(HL)
  196.         LD (IX+13),A
  197.         LD (IX+29),A
  198.         INC HL
  199.         LD A,(HL)
  200.         LD (IX+15),A
  201.         LD (IX+31),A
  202.         INC HL
  203.         LD A,(HL)
  204.         LD (IX+16),A
  205. Am00    LD DE,32
  206.         ADD IX,DE
  207.         DJNZ Am0
  208.         RET
  209.  
  210. A_PT    ;парам инопл (TU,EN,HEALTH(+0..31),MORAL,PREC)
  211.         DEFB 78,133,33,37,84    ;акв
  212.         DEFB 85,133,65,59,81    ;дай
  213.         DEFB 97,133,111,86,87   ;лоб
  214.         DEFB 81,100,40,49,70    ;жил
  215.         DEFB 82,148,80,86,89    ;таш
  216.         DEFB 100,200,96,124,110 ;тен
  217.         DEFB 110,148,50,80,80   ;кальц
  218.  
  219. A_GUNT  DEFB 8,255,255,255
  220.         DEFB 9,10,10,10
  221.         DEFB 9,5,10,10
  222.         DEFB 8,255,10,255
  223.         DEFB 8,5,10,255
  224.         DEFB 255,255,255,255
  225.         DEFB 12,255,255,255
  226.  
  227. A_extG  DEFB 2,3,5,10,3,2,10,3
  228.  
  229. A_GUN   ;оружие врага
  230.         LD IX,ALIEN+17
  231.         LD B,22
  232. Ag0     LD A,(IX-13)
  233.         LD (X0),A
  234.         LD HL,A_GUNT-4
  235.         CALL DD
  236.         LD C,4
  237. Ag9     LD A,C
  238.         CP 3
  239.         JR NZ,Ag91 ;дополн оружие
  240.         LD A,(X0)
  241.         CP 6
  242.         JR NC,Ag91 ;тент/кальц
  243.         LD A,(PERIOD)
  244.         CP 2    ; 2..6
  245.         JR C,Ag91
  246.         CALL RND
  247.         AND %100 ;50%
  248.         JR Z,Ag91
  249.         PUSH HL
  250.         CALL RND
  251.         AND 7
  252.         LD HL,A_extG
  253.         CALL BA
  254.         POP HL
  255.         JR Ag92
  256. Ag91    LD A,(HL)
  257. Ag92    LD (IX),A
  258.         LD (G_TYPE),A
  259.         LD A,6
  260.         CALL GUN_BT
  261.         LD (IX+4),A
  262.         INC HL
  263.         INC IX
  264.         CALL RND
  265.         DEC C
  266.         JR NZ,Ag9
  267. Ag00    LD DE,28
  268.         ADD IX,DE
  269.         DJNZ Ag0
  270.         RET
  271.  
  272. SELALI  ;видимого врага->в центр
  273.         LD A,(BX)
  274.         SUB 13
  275.         SRL A
  276.         OR A
  277.         RET Z
  278.         CP 8
  279.         RET NC
  280.         DEC A
  281.         LD HL,LA_DIM
  282.         CALL BT
  283.         CP 255
  284.         JP Z,BEEP
  285.         AND #7F
  286.         CALL GET_AD
  287.         CALL GT_DE_
  288.         CALL CENTR_
  289.         CALL ALLSPF
  290.         CALL OUTDSC
  291.         JP _BRE
  292.  
  293. isNEW   DEFB 0; 1-появился новый
  294. LA_DIM  DEFS 7,255;номера видимых врагов (255-нет)
  295.  
  296. LA_OUT  ;выв LA_DIM на экран
  297.         CALL MEM7
  298.         LD HL,LA_DIM
  299.         LD DE,ATR+512+47
  300.         PUSH DE
  301.         LD B,7
  302. LU0     LD A,(HL)
  303.         INC HL
  304.         CP 255
  305.         JR C,LU8
  306.         LD A,#68
  307.         JR LU1
  308. LU8     RLA
  309.         LD A,#58
  310.         JR C,LU1
  311.         LD A,#70
  312. LU1     LD (DE),A
  313.         INC DE
  314.         LD (DE),A
  315.         INC DE
  316.         DJNZ LU0
  317.         POP HL
  318.         LD DE,ATR+512+79
  319.         LD BC,14
  320.         LDIR
  321.         JP PT128
  322.  
  323. LOOK_A  ;есть ли кругом враги? NZ-были новые
  324.         LD HL,LA_DIM
  325.         LD DE,LA_DIM+1
  326.         LD (HL),255
  327.         LDI
  328.         LDI
  329.         LDI
  330.         LDI
  331.         LDI
  332.         LDI
  333.         XOR A
  334.         LD (isNEW),A
  335.         LD IX,MAN
  336.         LD BC,#0000
  337. LAK0    PUSH BC
  338.         CALL HERLIV
  339.         JR Z,LAKe
  340.         LD A,(IX+5)
  341.         OR A
  342.         JR Z,LAKe
  343.         CALL inRANGE
  344.         JR NC,LAKe
  345.         CALL inSECT
  346.         JR NC,LAKe
  347.         CALL inLINE
  348.         JR NC,LAKe
  349.         POP BC
  350.         LD A,C
  351.         LD HL,LA_DIM
  352.         CALL BA
  353.         LD A,(IX+6)
  354.         OR A
  355.         LD A,B
  356.         JR Z,LAK2
  357.         CPL
  358.         LD (isNEW),A
  359.         LD A,#80
  360.         ADD A,B
  361. LAK2    LD (IX+6),0
  362.         LD (HL),A
  363.         INC C
  364.         PUSH BC
  365. LAKe    POP BC
  366.         LD A,C
  367.         CP 7
  368.         JR NC,LAKr
  369.         LD DE,32
  370.         ADD IX,DE
  371.         INC B
  372.         LD A,B
  373.         CP 32
  374.         JP C,LAK0
  375. LAKr    LD A,(isNEW)
  376.         OR A
  377.         RET
  378.  
  379. A_RANGE ;возможн. стрельбы для инопл
  380.         LD A,4
  381.         CALL HER_BA
  382.         CP 3 ;лобст
  383.         JR Z,A_R3
  384.         CP 2 ;дайп
  385.         JR Z,A_R2
  386.         JR inRANGE
  387. A_R3    CALL RND
  388.         CP 7
  389.         RET C
  390.         JR inRANGE
  391. A_R2    CALL RND
  392.         RRA
  393.         JR C,inRANGE
  394.         CALL RASSTA
  395.         CP 16
  396.         RET
  397.  
  398. R16T    DEFB #F,#F,#F,#E,#E,#E,#D,#D,#C,#C,#B,#A,9,7,5,2
  399. inRANGE ;в радиусе 16?  NC-нет, С-да
  400.         CALL GET_DE
  401.         CALL GET_XY
  402.         LD A,L
  403.         SUB E
  404.         JR NC,IG2
  405.         NEG
  406. IG2     CP 16
  407.         RET NC
  408.         LD E,A
  409.         LD A,H
  410.         SUB D
  411.         JR NC,IG1
  412.         NEG
  413. IG1     CP 16
  414.         RET NC
  415.         LD HL,R16T
  416.         CALL BA
  417.         CP E
  418.         CCF
  419.         RET
  420.  
  421. inSECT  ;в секторе видимости 90?
  422.         CALL GET_DE
  423.         INC HL
  424.         LD C,(HL)
  425.         CALL GET_XY
  426.         EX DE,HL
  427.         PUSH HL
  428.         PUSH DE
  429.         CALL DIR_
  430.         POP HL
  431.         POP DE
  432.         SUB C
  433.         INC A
  434.         AND 7
  435.         CP 3
  436.         RET NC; C-OK, NC-bad
  437.         BIT 0,C
  438.         RET NZ
  439.         LD A,H
  440.         SUB D
  441.         JR NC,inS2
  442.         NEG
  443. inS2    LD H,A
  444.         LD A,L
  445.         SUB E
  446.         JR NC,inS3
  447.         NEG
  448. inS3    CP H
  449.         BIT 1,C
  450.         RET NZ
  451.         CCF
  452.         RET
  453.  
  454. inLINE  ;на линии видимости?
  455.         LD A,(FLR)
  456.         PUSH AF
  457.         CALL SEEini
  458. San10   LD HL,(SFX2)
  459.         LD DE,(SPPX)
  460.         OR A
  461.         SBC HL,DE
  462.         JR NZ,San3
  463.         LD HL,(SFLR)
  464.         LD A,(FLR)
  465.         CP L
  466.         JR NZ,San33
  467.         POP AF ;на линии видимости
  468.         CALL FLOOR
  469.         SCF
  470.         RET C
  471. San3    CALL SEEnxt
  472.         CP 1
  473.         JR C,San10
  474. San33   POP AF ;невидим
  475.         CALL FLOOR
  476.         XOR A
  477.         RET NC
  478.  
  479. SEEini  CALL GET_DE
  480.         PUSH HL
  481.         LD (SFX2),DE
  482.         LD A,(HL)
  483.         CALL FLOOR
  484.         CALL GET_XY
  485.         LD (SPPX),HL
  486.         LD A,(IX+2)
  487.         LD (SFLR),A
  488.         PUSH AF
  489.         CALL LINini
  490.         POP AF
  491.         POP HL
  492.         OR A
  493.         LD C,23
  494.         JR NZ,QS1
  495.         LD C,7
  496. QS1     LD A,(HL)
  497.         OR A
  498.         LD A,23
  499.         JR NZ,QS2
  500.         LD A,7
  501. QS2     LD (FHIGH),A
  502.         SUB C
  503.         LD C,1 ;up
  504.         JR NC,QS3
  505.         DEC C ;dwn
  506.         NEG
  507. QS3     LD L,A
  508.         SRL A
  509.         LD (DHIGH),A
  510.         LD A,(LIN_LN)
  511.         LD H,A
  512.         LD (PHIGH),HL
  513.         LD A,C
  514.         LD (F_SH),A
  515.         RET
  516.  
  517. SFLR    DEFB 6
  518. SFX2    DEFW 1
  519. SPPX    DEFW 2
  520.  
  521. SEEnxt  ;след. поз. взгляда ;0,1,2-далее,вылет,попал
  522.         LD HL,(SFX2)
  523.         LD (TX),HL
  524.         LD DE,(PHIGH) ;высота
  525.         LD HL,FHIGH
  526.         LD A,(DHIGH)
  527.         ADD A,E
  528.         LD (DHIGH),A
  529. Se01    CP D
  530.         LD A,(F_SH)
  531.         JR C,Se0
  532.         DEC (HL)
  533.         OR A
  534.         JR NZ,Se02
  535.         INC (HL)
  536.         INC (HL)
  537. Se02    LD A,(DHIGH)
  538.         SUB D
  539.         LD (DHIGH),A
  540.         JR Se01
  541. Se0     OR A
  542.         JR NZ,Se2
  543.         LD A,(HL)  ;dwn
  544.         CP 32
  545.         JR C,Se3
  546.         JR Se30
  547. Se3     CP 16
  548.         JR C,Se1
  549.         LD A,(FLR)
  550.         OR A
  551.         JR NZ,Se1
  552.         PUSH DE
  553.         CALL GSP
  554.         AND #7F
  555.         JR Z,Se31
  556.         POP DE
  557. Se30    LD A,2 ;пол/потолок непрозр
  558.         RET
  559. Se31    LD A,1
  560.         CALL FLOOR
  561.         JR Se51
  562. Se2     LD A,(HL) ;Up
  563.         CP 200
  564.         JR C,Se5
  565. SeOUT   LD A,1
  566.         RET
  567. Se5     CP 16
  568.         JR NC,Se1
  569.         LD A,(FLR)
  570.         OR A
  571.         JR Z,Se1
  572.         PUSH DE
  573.         XOR A
  574.         CALL FLOOR
  575.         CALL GSP
  576.         AND #7F
  577.         JR Z,Se51
  578.         POP DE
  579.         LD A,1
  580.         CALL FLOOR
  581.         JR Se30
  582. Se51    POP DE
  583. Se1     CALL LINnxt ;коорд
  584.         LD (SFX2),DE
  585.         LD A,(XMAX)
  586.         CP E
  587.         JR C,SeOUT
  588.         LD A,(YMAX)
  589.         CP D
  590.         JR C,SeOUT
  591.         LD (TX),DE
  592.         CALL GSP
  593.         AND #7F
  594.         RET Z
  595.         CP #60
  596.         JR NC,Se6
  597.         CALL ATSP_
  598.         LD C,A
  599.         LD A,2
  600.         BIT 7,C ;?see
  601.         RET Z
  602. Se6     XOR A
  603.         RET Z
  604.  
  605. LAST_M  DEFB 0;кем последним ходили?
  606.  
  607. NX_MOV  ;----передача хода----
  608.         LD A,(HER_N)
  609.         LD (LAST_M),A
  610.         LD A,(NX_RNB)
  611.         LD (RNB),A
  612.         LD HL,(NX_RNA)
  613.         LD (RNA),HL
  614.         ;взрыв гранат,закр дверей
  615.         CALL DO_SET
  616.         ;очистка гр и дв
  617.         CALL CLRSET
  618.         ;восст парам врагов
  619.         LD C,1
  620.         CALL REPA32
  621.         CALL ENDBAT
  622.         ;враги ходят
  623.         CALL ALINXT
  624.         ;вых из под контроля
  625.         CALL DECONT
  626.         ;взрыв гранат,закр дверей
  627.         CALL DO_SET
  628.         ;невидимость врагов
  629.         CALL VISOFF
  630.         ;осмотр перед ходом
  631.         CALL INILOK
  632.         ;очистка гр и дв
  633.         CALL CLRSET
  634.         ;восст парам людей
  635.         LD C,0
  636.         CALL REPA32
  637.         CALL ENDBAT
  638.        if PROTECT
  639.         CALL CHECK6 ;[]
  640.        endif
  641.         ;паника людей
  642.         CALL PANIC
  643.         ;проверка числа иссл []
  644.         CALL RESNUM
  645.         LD C,A
  646.         LD A,(R_NUM)
  647.         CP C
  648.         CALL NZ,NX_MOV
  649.         ;взять первого
  650.         LD A,(LAST_M)
  651.         CALL GET_IX
  652.         CALL HERLIV
  653.         JR Z,nx0
  654.         LD A,(IX+5)
  655.         OR A
  656.         JR NZ,nx0
  657.         LD A,(LAST_M)
  658.         CALL NEWHER
  659.         JR nx1
  660. nx0     CALL HER1st
  661. nx1     CALL MCENTR
  662.         ;randomize
  663.         LD A,R
  664.         LD HL,RNB
  665.         XOR (HL)
  666.         LD (NX_RNB),A
  667.         LD HL,(RNA)
  668.         INC H
  669.         INC H
  670.         INC H
  671.         LD (NX_RNA),HL
  672.         ;выход
  673.         CALL REDLIN
  674.         JP _BRE
  675.  
  676. REPA32  LD A,31 ;восст парам для (IX+5)=C
  677. R321    PUSH AF
  678.         PUSH BC
  679.         CALL NEWHER
  680.         PUSH HL
  681.         POP IX
  682.         CALL HERLIV
  683.         JR Z,R320
  684.         LD A,(IX+5)
  685.         CP C
  686.         CALL Z,REPAR
  687. R320    POP BC
  688.         POP AF
  689.         DEC A
  690.         CP 32
  691.         JR C,R321
  692.         RET NC
  693.  
  694.  
  695. CLRSET  LD HL,SET_N ;очистка SETDIM
  696.         LD DE,SETDIM
  697.         LD BC,SETLEN*5
  698.         LD (HL),0
  699.         LDIR
  700.         RET
  701.  
  702. DO_SET  ;исполнить SETDIM
  703.         LD A,(SET_N)
  704.         OR A
  705.         RET Z
  706.         LD B,A
  707.         LD IY,SETDIM
  708. DOs1    PUSH BC
  709.         PUSH IY
  710.         LD L,(IY)
  711.         LD H,(IY+1)
  712.         LD (TX),HL
  713.         LD A,(IY+2)
  714.         CALL FLOOR
  715.         LD A,(IY+3)
  716.         OR A
  717.         JR Z,DOgr
  718.         CALL GSP     ;закр дв
  719.         LD B,A
  720.         AND #7F
  721.         CP (IY+3)
  722.         JR NZ,DOs0
  723.         LD A,B
  724.         AND #80
  725.         OR (IY+4)
  726.         CALL PSP
  727.         JR DOs0
  728. DOgr    LD DE,(TX)  ;взр гр
  729.         LD (FXOLD),DE
  730.         CALL CENTRg
  731.         CALL ALLSPF
  732.         CALL OUTDSC
  733.         LD IX,MU94
  734.         CALL S_MENU
  735.         LD A,10
  736.         LD (G_TYPE),A
  737.         CALL BOOMER
  738.         LD A,25
  739.         CALL DELAY
  740.         CALL ENDBAT
  741. DOs0    POP IY
  742.         LD BC,5
  743.         ADD IY,BC
  744.         POP BC
  745.         DJNZ DOs1
  746.        if PROTECT
  747.         JP CHK_4
  748.        else
  749.         ret
  750.        endif
  751.  
  752. MU94    DEFW #203,#5E0A
  753.  
  754. VISOFF  ;откл видимости для ALIEN
  755.         LD IX,MAN
  756.         LD B,32
  757.         LD DE,32
  758. VF0     CALL HERLIV
  759.         JR Z,VF1
  760.         LD A,(IX+5)
  761.         OR A
  762.         JR Z,VF1
  763.         LD (IX+6),1
  764. VF1     ADD IX,DE
  765.         DJNZ VF0
  766.         RET
  767.  
  768. ALINXT  LD A,(FIRTYP)
  769.         PUSH AF
  770.         CALL OUTDSC
  771.         CALL S_BACK ;сообщ о ходе
  772.         CALL STD
  773.         LD HL,6
  774.         LD (SX),HL
  775.         LD A,202
  776.         CALL NWRDM
  777.         CALL S_COPY
  778.         CALL REDLIN
  779.         LD A,31 ;ход пришельцев
  780. ALM0    PUSH AF
  781.         CALL NEWHER
  782.         PUSH HL
  783.         POP IX
  784.         CALL HERLIV
  785.         JR Z,NOTALI
  786.         LD A,(IX+5)
  787.         OR A
  788.         JR Z,NOTALI
  789.         CALL ALIENS
  790. NOTALI  POP AF
  791.         DEC A
  792.         CP 32
  793.         JP C,ALM0
  794.         POP AF
  795.         LD (FIRTYP),A
  796.         RET
  797.  
  798. REDLIN  LD HL,ATR+5
  799.         CALL MEM7       ;смена цв загол
  800.         LD B,20
  801. REDLL   LD A,(HL)
  802.         XOR %1011
  803.         LD (HL),A
  804.         INC L
  805.         DJNZ REDLL
  806.         JP PT128
  807.  
  808. ALIMOV  LD C,A ;передв. врага. (С-поворот и междуфазье)
  809.         LD A,(PHASE)
  810.         OR A
  811.         JR NZ,MOA4
  812.         LD IX,(HER_AD)
  813.         LD A,(IX+3)
  814.         LD D,A
  815.         CP C
  816.         JR Z,MOA1
  817.         SUB C
  818.         AND 7
  819.         CP 4
  820.         LD A,D
  821.         JR NC,MOA2
  822.         DEC A
  823.         JR MOA3
  824. MOA2    INC A
  825. MOA3    AND 7
  826.         LD (IX+3),A
  827.         CALL GET_XY
  828.         LD (TX),HL
  829.         CALL PXYF
  830.         SCF
  831.         RET
  832. MOA1    CALL GET_XY ;ALI вых
  833.         PUSH HL
  834.         CALL NEXTXY
  835.         CALL DOOR_
  836.         LD (IX),L
  837.         LD (IX+1),H
  838.         POP HL
  839.         LD (TX),HL
  840.         LD A,(IX+7)
  841.         CALL PSP
  842.         CALL PXYF
  843.         LD A,4
  844.         LD (PHASE),A
  845. MOA4    CALL GET_XY
  846.         LD (TX),HL
  847.         LD HL,PHASE
  848.         DEC (HL)
  849.         LD A,(HL)
  850.         OR A
  851.         JR NZ,MOA7
  852.         CALL GSP ;поставить на поле
  853.         LD (IX+7),A
  854.         AND #80
  855.         LD C,A
  856.         LD A,(HER_N)
  857.         ADD A,#60
  858.         ADD A,C
  859.         CALL PSP
  860.         CALL PXYF
  861.         XOR A
  862.         RET
  863. MOA7    LD A,(IX+6)
  864.         OR A
  865.         JR NZ,MOA77
  866.         CALL INFR
  867. MOA77   CCF
  868.         RET C
  869.         CALL XYHL
  870.         LD (TXT),HL
  871.         LD A,(PHASE)
  872.         AND 1
  873.         LD C,(IX+3)
  874.         ADD A,C
  875.         ADD A,C
  876.         CALL M96
  877.         LD A,(IX+4)
  878.         RLCA
  879.         LD C,A
  880.         RLCA
  881.         ADD A,C
  882.         ADD A,H
  883.         LD H,A
  884.         LD DE,xHERO
  885.         ADD HL,DE
  886.         EX DE,HL
  887.         LD A,(IX+3)
  888.         LD C,A
  889.         RLCA
  890.         ADD A,C
  891.         LD C,A
  892.         LD A,(PHASE)
  893.         DEC A
  894.         ADD A,C
  895.         PUSH AF
  896.         LD HL,xROT
  897.         CALL BA
  898.         EX AF,AF
  899.         POP AF
  900.         LD HL,xDHL
  901.         CALL WT
  902.         LD BC,DSCR+257
  903.         ADD HL,BC
  904.         LD BC,(TXT)
  905.         ADD HL,BC
  906.         EX AF,AF
  907.         CALL HERO
  908.         LD A,(IX+3)
  909.         LD HL,xRELT
  910.         CALL WT
  911.         LD (CREL2+1),HL
  912.         CALL GET_XY
  913. CREL2   CALL #3D13
  914.         SCF
  915.         RET
  916.  
  917. ALIENS  LD A,(IX+4) ;действия одного врага
  918.         LD HL,INTEL
  919.         CALL WT
  920.         JP (HL)
  921.  
  922. INTEL   DEFW INTL0,INTL1,INTL2,INTL3,INTL4,INTL5,INTL6,INTL7
  923. MVorFR  DEFB 160,125,175,225,154,190,100,210 ;вероятн. стрельбы
  924.  
  925. INTL0
  926. INTL1
  927. INTL2
  928. INTL4
  929. INTL3
  930. INTL5
  931. INTL7
  932. INTLOO  LD A,20
  933.         LD (ITER),A
  934.         XOR A
  935.         LD (isMVIS),A
  936.         LD (isMOFF),A
  937. INTLO_  LD HL,ITER
  938.         DEC (HL)
  939.         RET Z
  940.         LD A,(IX+11)
  941.         CP 6
  942.         RET C
  943.         LD A,(IX+12)
  944.         CP 4
  945.         RET C
  946.         LD A,(IX+4)
  947.         LD HL,MVorFR
  948.         CALL BA
  949.         CALL RND
  950.         CP (HL)
  951.         PUSH IX
  952.         PUSH AF
  953.         CALL C,A_FIRE
  954.         POP AF
  955.         CALL NC,A_MOVE
  956.         POP IX
  957.         CALL HERLIV
  958.         RET Z
  959.         JR INTLO_
  960.  
  961. ITER    DEFB 0 ;число итераций
  962.  
  963. isMVIS  DEFB 0;0-перемещ невидимы,1-видимы
  964.  
  965. A_MOVE  ;перемещение инопл
  966.         BIT 7,(IX+7)
  967.         JR Z,AM_TV
  968.         CALL RND
  969.         CP 22
  970.         RET NC
  971.         JR C,AM_TT
  972. AM_TV   CALL IS_VIS
  973.         JR C,AM_TT
  974.         CALL RND
  975.         RLA
  976.         RET NC
  977. AM_TT   ;поиск цели
  978.         CALL GET_DE
  979.         LD A,(HL)
  980.         CALL FLOOR
  981.         LD B,25
  982. AM_T1   PUSH DE ;среди чёрных полей
  983.         CALL RND
  984.         AND #F
  985.         SUB 7
  986.         ADD A,D
  987.         LD D,A
  988.         CALL RND
  989.         AND #F
  990.         SUB 8
  991.         ADD A,E
  992.         LD E,A
  993.         LD (TX),DE
  994.         CALL GSP
  995.         BIT 7,A
  996.         JR Z,AM_T0
  997.         AND #7F
  998.         CP #60
  999.         JR NC,AM_T0
  1000.         CALL ATSP_
  1001.         AND %00100000
  1002.         JR NZ,AM_MV0
  1003. AM_T0   POP DE
  1004.         DJNZ AM_T1
  1005.         LD B,10
  1006. AM_0T1  PUSH DE
  1007. AM_0T2  CALL RND
  1008.         AND #1F
  1009.         CP 25
  1010.         JR NC,AM_0T2
  1011.         SUB 12
  1012.         ADD A,D
  1013.         LD D,A
  1014. AM_0T3  CALL RND
  1015.         AND #1F
  1016.         CP 25
  1017.         JR NC,AM_0T3
  1018.         SUB 12
  1019.         ADD A,E
  1020.         LD E,A
  1021.         LD (TX),DE
  1022.         CALL GSP
  1023.         LD C,A
  1024.         AND #7F
  1025.         CP #60
  1026.         JR NC,AM_0T0
  1027.         CALL ATSP_
  1028.         AND %00100000
  1029.         JR NZ,AM_MV0
  1030. AM_0T0  POP DE
  1031.         DJNZ AM_0T1
  1032.         RET
  1033.         ;перемещ
  1034. AM_MV0  POP DE
  1035.         LD HL,(TX)
  1036.         LD (PPX),HL
  1037.         CALL TRACE1
  1038.         RET C
  1039.         CALL TRACE2
  1040. AM_MV   LD A,(DE)
  1041.         CP 8
  1042.         JR NC,AM_RE2
  1043.         AND 1
  1044.         PUSH DE
  1045.         PUSH AF
  1046.         CALL IS_VIS
  1047.         JR NC,AM_MV5
  1048.         LD HL,isMVIS
  1049.         LD A,(HL)
  1050.         OR A
  1051.         JR NZ,AM_MV5
  1052.         INC (HL)
  1053.         CALL CENTR
  1054.         CALL ALLSPF
  1055. AM_MV5  POP AF
  1056.         LD DE,#402
  1057.         JR Z,AM_MV4
  1058.         LD DE,#603
  1059. AM_MV4  CALL DECPAR
  1060.         JR C,AM_RET
  1061. AM_M66  LD A,(isMVIS)
  1062.         OR A
  1063.         JR Z,AM_M77
  1064.         CALL OUTDSA
  1065.         CALL PBU
  1066. AM_M77  POP DE
  1067.         LD A,(DE)
  1068.         PUSH DE
  1069.         CALL ALIMOV
  1070.         JR C,AM_M66
  1071.         POP DE
  1072.         DEC DE
  1073.         JR AM_MV
  1074.  
  1075. AM_RET  POP DE
  1076. AM_RE2  LD A,(isMVIS)
  1077.         OR A
  1078.         RET Z
  1079.         CALL OUTDSA
  1080.         JP PBU
  1081.  
  1082. T_AL    DEFB 0
  1083. T_HA    DEFW 0
  1084. IS_VIS  ;видим ли текущ инапл
  1085.         ;NC - нет, С - да
  1086.         LD A,7 ;если на чёрн поле
  1087.         CALL HER_BA
  1088.         RLCA
  1089.         CCF
  1090.         JR C,LVKb
  1091.         DEC HL
  1092.         LD (HL),1
  1093.         RET
  1094. LVKb    LD A,(HER_N)
  1095.         LD HL,(HER_AD)
  1096.         LD (T_HA),HL
  1097.         LD (T_AL),A
  1098.         XOR A
  1099. LVK0    PUSH AF
  1100.         CALL NEWHER
  1101.         PUSH HL
  1102.         POP IX
  1103.         CALL HERLIV
  1104.         JR Z,LVKe
  1105.         LD A,(IX+5)
  1106.         OR A
  1107.         JR NZ,LVKe
  1108.         LD IX,(T_HA)
  1109.         LD (IX+6),1
  1110.         CALL inRANGE
  1111.         JR NC,LVKe
  1112.         CALL inSECT
  1113.         JR NC,LVKe
  1114.         CALL inLINE
  1115.         JR NC,LVKe
  1116.         LD IX,(T_HA)
  1117.         LD (IX+6),0
  1118.         POP AF
  1119.         SCF
  1120.         JR LVKr
  1121. LVKe    POP AF
  1122.         INC A
  1123.         CP 32
  1124.         JP C,LVK0
  1125.         XOR A
  1126. LVKr    PUSH AF
  1127.         LD A,(T_AL)
  1128.         CALL NEWHER
  1129.         POP AF
  1130.         RET
  1131.  
  1132. DECONT  ;выход из-под контроля
  1133.         LD IX,MAN
  1134.         LD B,32
  1135. DNT0    PUSH BC
  1136.         PUSH IX
  1137.         CALL HERLIV
  1138.         JR Z,DNT1
  1139.         CALL RND
  1140.         AND %110100 ;вероятн 1/8
  1141.         JR NZ,DNT1
  1142.         LD A,(IX+4)
  1143.         OR A
  1144.         LD A,(IX+5)
  1145.         JR NZ,DNTA
  1146.         OR A
  1147.         JR Z,DNT1
  1148.         LD (IX+5),0
  1149.         LD (IX+6),0
  1150.         ;акв вых из-под
  1151.         LD A,(IX+8)
  1152.         LD (MU66+4),A
  1153.         LD HL,MU66
  1154.         JR DNTT
  1155. DNTA    OR A
  1156.         JR NZ,DNT1
  1157.         LD (IX+5),1
  1158.         ;приш вых из-под
  1159.         LD A,(IX+4)
  1160.         ADD A,21
  1161.         LD (MU67+4),A
  1162.         LD HL,MU67
  1163. DNTT    PUSH HL
  1164.         LD (HER_AD),IX
  1165.         CALL CENTR4
  1166.         CALL ALLSPF
  1167.         CALL OUTDSC
  1168.         POP IX
  1169.         CALL S_MENU
  1170. DNT1    POP IX
  1171.         LD BC,32
  1172.         ADD IX,BC
  1173.         POP BC
  1174.         DJNZ DNT0
  1175.         RET
  1176.  
  1177. MU66    DEFW #202,#4218
  1178.         DEFB 2
  1179. MU67    DEFW #202,#4318
  1180.         DEFB 2
  1181. MU69    DEFW #202,#4518
  1182.         DEFB 2
  1183.  
  1184. PANIC   LD IX,MAN ;выв сообщ о панике
  1185.         LD B,10
  1186. PA0     PUSH BC
  1187.         PUSH IX
  1188.         CALL HERLIV
  1189.         JR Z,PA1
  1190.         LD A,(IX+4)
  1191.         OR A
  1192.         JR NZ,PA1
  1193.         LD A,(IX+15)
  1194.         CP 50
  1195.         JR NC,PA1
  1196.         CALL RND
  1197.         AND 7
  1198.         LD (IX+11),A
  1199.         LD (IX+6),0
  1200.         LD A,(IX+8)
  1201.         LD (MU69+4),A
  1202.         LD (HER_AD),IX
  1203.         CALL CENTR4
  1204.         CALL ALLSPF
  1205.         CALL OUTDSC
  1206.         LD IX,MU69
  1207.         CALL S_MENU
  1208. PA1     POP IX
  1209.         LD BC,32
  1210.         ADD IX,BC
  1211.         POP BC
  1212.         DJNZ PA0
  1213.         RET
  1214.  
  1215. isMOFF  DEFB 0 ;1-предыдущ шаг был виден
  1216. OUTDSA  ;OUTDSC для врагов
  1217.         LD A,6
  1218.         CALL HER_BA
  1219.         OR A
  1220.         LD HL,isMOFF
  1221.         JR NZ,NO_DSC
  1222.         LD (HL),2
  1223.         JP OUTDSC
  1224. NO_DSC  LD A,(HL)
  1225.         OR A
  1226.         JR Z,NDS1
  1227.         DEC (HL)
  1228.         JP Z,OUTDSC
  1229. NDS1    LD      B,16*8 ;заменяет OUTDSC
  1230. NDS2    LD      C,34
  1231. NDS3    DEC     C
  1232.         JR      NZ,NDS3
  1233.         DJNZ    NDS2
  1234.         RET
  1235.  
  1236. A_FIRE  CALL RND  ;выб.типа стр
  1237.         AND 1
  1238.         LD (FIRTYP),A
  1239.         LD A,(IX+18)
  1240.         CP 5
  1241.         JR NZ,AFI3
  1242.         ;вибр рез
  1243. AFITC6  LD (IX+25),1
  1244. AFITCH  CALL GUNTIM
  1245.         INC A
  1246.         CP (IX+11)
  1247.         RET NC
  1248.         CALL GET_DE
  1249.         LD A,(HL)
  1250.         PUSH DE
  1251.         CALL FLOOR
  1252.         POP HL
  1253.         CALL NEARHL
  1254.         JR NC,AFI3
  1255.         LD HL,(TX)
  1256.         LD (PPX),HL
  1257.         CALL IS_VIS
  1258.         CALL CENTR
  1259.         CALL HERROT
  1260.         LD B,1
  1261.         PUSH BC
  1262.         JR FIR_BG
  1263. AFI3    LD (IX+25),0 ;выб.оруж
  1264.         CALL RND
  1265.         CP 100
  1266.         JR C,AFI2    ;основн оруж
  1267.         CALL RND
  1268.         AND 3
  1269.         LD (IX+25),A
  1270.         CALL CURGUN
  1271.         CP 13
  1272.         JR NC,AFI3
  1273.         CP 5       ;резаки & т.шок
  1274.         JR Z,AFITCH
  1275.         CP 6
  1276.         JR Z,AFITCH
  1277.         CP 11
  1278.         JR Z,AFITCH
  1279. AFI2    CALL GUNTIM
  1280.         INC A
  1281.         CP (IX+11)
  1282.         RET NC ;нет времени
  1283.         LD B,45   ;выб.жертвы
  1284. AFI0    PUSH BC
  1285.         CALL RND
  1286.         AND 31
  1287.         CALL GET_IX
  1288.         CALL HERLIV
  1289.         JR Z,AFI1
  1290.         LD A,(IX+5)
  1291.         OR A
  1292.         JR NZ,AFI1
  1293.         CALL inRANGE
  1294.         JR NC,AFI1
  1295.         CALL GET_XY
  1296.         LD (PPX),HL
  1297.         LD A,(IX+2)
  1298.         CALL FLOOR
  1299.         CALL CANFIR
  1300.         LD A,(CANF_B)
  1301.         CP #68
  1302.         JR NZ,AFI1
  1303. FIR_BG  CALL CURGUN
  1304.         JR NC,AFI1
  1305.         LD HL,FIR_T
  1306.         CALL WT
  1307.         LD (FIR_AC+1),HL
  1308.         LD A,(FLR)
  1309.         PUSH AF
  1310.         CALL IS_VIS
  1311.         CALL CENTR
  1312.         CALL ALLSPF
  1313.         POP AF
  1314.         CALL FLOOR
  1315.         XOR A ;Z-в поле
  1316.         LD (afterE),A
  1317. FIR_AC  CALL FROK
  1318.         POP BC
  1319.         CALL OUTDSC
  1320.         CALL CENTR
  1321.         CALL ALLSPF
  1322.         JP ENDBAT
  1323. AFI1    POP BC
  1324.         DJNZ AFI0
  1325.         RET
  1326.  
  1327. NEARHL  ;есть кто-то рядом с HL? NC - no, C -yes (in TX)
  1328.         DEC L
  1329.         CALL NHL
  1330.         INC H
  1331.         CALL NHL
  1332.         INC L
  1333.         CALL NHL
  1334.         INC L
  1335.         CALL NHL
  1336.         DEC H
  1337.         CALL NHL
  1338.         DEC H
  1339.         CALL NHL
  1340.         DEC L
  1341.         CALL NHL
  1342.         DEC L
  1343.         CALL NHL
  1344.         XOR A
  1345.         RET
  1346.  
  1347. NHL     LD (TX),HL
  1348.         CALL GSP60
  1349.         JR C,NHLR2
  1350.         SUB #60
  1351.         PUSH IX
  1352.         CALL GET_IX
  1353.         CALL HERLIV
  1354.         JR Z,NHLR1
  1355.         LD A,(IX+5)
  1356.         OR A
  1357.         JR NZ,NHLR1
  1358.         POP IX
  1359.         POP AF ;call
  1360.         SCF
  1361.         RET
  1362. NHLR1   POP IX
  1363. NHLR2   LD HL,(TX)
  1364.         RET
  1365.  
  1366. TIM_6   EQU 31 ; % время на превращение
  1367. INTL6   LD A,20 ;тентакулат
  1368.         LD (ITER),A
  1369.         XOR A
  1370.         LD (isMVIS),A
  1371.         LD (isMOFF),A
  1372. INTL6_  LD HL,ITER
  1373.         DEC (HL)
  1374.         RET Z
  1375.         LD A,(IX+11)
  1376.         CP 6
  1377.         RET C
  1378.         PUSH IX
  1379.         CP TIM_6
  1380.         JR C,INTL61
  1381.         CALL A_FIR6
  1382.         POP IX
  1383.         PUSH IX
  1384.         CALL A_MOV6
  1385.         JR INTL62
  1386. INTL61  CALL A_MOVE
  1387. INTL62  POP IX
  1388.         CALL HERLIV
  1389.         RET Z
  1390.         JR INTL6_
  1391.  
  1392. A_MOV6  CALL GET_DE
  1393.         LD A,(HL)
  1394.         CALL FLOOR
  1395.         LD B,35
  1396. AM_61   PUSH DE ;рядом с людьми
  1397.         CALL RND
  1398.         AND #1F
  1399.         SUB 15
  1400.         ADD A,D
  1401.         LD D,A
  1402.         CALL RND
  1403.         AND #1F
  1404.         SUB 16
  1405.         ADD A,E
  1406.         LD E,A
  1407.         LD (TX),DE
  1408.         CALL GSP60
  1409.         JR NC,AM_60
  1410.         CALL ATSP_
  1411.         AND %00100000
  1412.         JR Z,AM_60
  1413.         LD HL,(TX)
  1414.         PUSH HL
  1415.         CALL NEARHL
  1416.         POP HL
  1417.         LD (TX),HL
  1418.         JP C,AM_MV0
  1419. AM_60   POP DE
  1420.         DJNZ AM_61
  1421.         JP A_MOVE
  1422.  
  1423. A_FIR6  LD (IX+18),16
  1424.         PUSH IX
  1425.         CALL AFITC6
  1426.         POP IX
  1427.         LD (IX+18),255
  1428.         RET
  1429.  
  1430. G_TENT  CALL FLASHs  ;тентакулат
  1431.         CALL FLASHs
  1432.         CALL FLASHs
  1433.         CALL FLASHs
  1434.         LD (IX+4),6
  1435.         LD (IX+5),1
  1436.         LD HL,(A_PT+25)
  1437.         LD A,(A_PT+27)
  1438.         LD (IX+27),L
  1439.         LD (IX+12),H
  1440.         LD (IX+28),H
  1441.         LD (IX+13),A
  1442.         LD (IX+29),A
  1443.         XOR A
  1444.         LD (IX+9),A
  1445.         LD (IX+10),A
  1446.         LD (IX+11),A
  1447.         DEC A
  1448.         LD (IX+17),A
  1449.         LD (IX+18),A
  1450.         LD (IX+19),A
  1451.         LD (IX+20),A
  1452.         CALL GET_XY
  1453.         LD (TX),HL
  1454.         CALL PXYF
  1455.         CALL FLASHs
  1456.         CALL FLASHs
  1457.         JP FLASH
  1458.  
  1459.        if PROTECT
  1460. CHECT6  DEFW TAB100+50,TAB100+84
  1461.  
  1462. CHECK6  PUSH AF
  1463.         XOR A           ;[]#6
  1464.         CALL CHEC6_
  1465.         EX DE,HL
  1466.         LD BC,#C01F
  1467.         LD A,1
  1468.         CALL CHEC6_
  1469.         ADD HL,BC
  1470.         XOR A
  1471.         SBC HL,DE
  1472.         JP NZ,LDASM3
  1473.         POP AF
  1474.         JP GET_XY
  1475.        
  1476. CHEC6_  LD HL,CHECT6
  1477.         CALL WT
  1478.         PUSH HL
  1479.         POP IX
  1480.         JP GET_XY
  1481.        endif
  1482.