?login_element?

Subversion Repositories NedoOS

Rev

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

  1. ;------главный цикл обработки персонажей
  2.  
  3. MOVZZ   ;п/п обр действий ix+9
  4.         DEFW ZZ0,ZZ1,ZZ2,ZZ3,ZZ4,ZZ5,ZZ6,ZZ7,ZZ8,09
  5.         DEFW ZZ10,ZZ11,ZZ12,ZZ13,ZZ14,ZZ15
  6.         DEFW ZZ16,ZZ17,ZZ18,ZZ19,ZZ20,ZZ21
  7.         DEFW ZZ22,ZZ23,ZZ24,ZZ25,ZZ26,ZZ27
  8.         DEFW ZZ28
  9.  
  10. impANS  ;ответ на удар (0/х-нет/функция) при действии N
  11.         DEFB 4,26,0,4,0,4,4,4,4,4
  12.         DEFB 0,0,0,0,0,0
  13.         DEFB 0,0,0,0,0,0
  14.         DEFB 0,0,0,4,0,0
  15.         DEFB 4
  16.  
  17.  
  18. SHED_H  LD IX,HUMAN ;Л*Ю*Д*И
  19.         LD IY,XY
  20.         XOR A
  21.         LD (HER_N),A
  22.         LD (SIDE_N),A
  23.         ;
  24.         LD A,#C9 ;ret
  25.         LD (ZZ00),A ;intel=off
  26.         LD (ARCrng),A ;лучники vs катапульта=off
  27.         LD A,9 ;дальность для наших катап=8
  28.         LD (KATrng+1),A
  29.         ;
  30. She0    LD A,(IX+1)
  31.         OR A
  32.         JR Z,She1
  33.         LD A,(IX+0)
  34.         OR A
  35.         CALL Z,SheTro
  36.         CALL NZ,MOVING
  37. She1    LD BC,16
  38.         ADD IX,BC
  39.         LD C,4
  40.         ADD IY,BC
  41.         LD HL,HER_N
  42.         INC (HL)
  43.         LD A,(HL)
  44.         CP 48
  45.         JP C,She0
  46.         RET
  47.  
  48. SHED_K  ;К*У*Н*Г*И
  49.         LD HL,SIDE_N
  50.         INC (HL)
  51.         LD A,#C3 ;jp: intel=ON
  52.         LD (ZZ00),A
  53.          LD A,(DIFFIC)
  54.          OR A
  55.          JR Z,Ske0x
  56.          ;повышенная сложность (DIFFIC=1)
  57.          LD A,7
  58.          LD (KATrng+1),A ;дальность для катап врага=6
  59.          LD A,#C3 ;jp
  60.          LD (ARCrng),A ;лучники vs катап=ON
  61. Ske0x   ;
  62. Ske0    LD A,(IX+1)
  63.         OR A
  64.         JR Z,Ske1
  65.         LD A,(IX+0)
  66.         OR A
  67.         CALL Z,SheTro
  68.         CALL NZ,MOVING
  69. Ske1    LD BC,16
  70.         ADD IX,BC
  71.         LD C,4
  72.         ADD IY,BC
  73.         LD HL,HER_N
  74.         INC (HL)
  75.         LD A,(HL)
  76.         CP 96
  77.         JP C,Ske0
  78.         RET
  79.  
  80. NxtTro  ;след  фаза трупa
  81.         DEFB #FF,0,1,2 ,#FF,4,5,6, #FF,9,8, 12,#FF,12,12,12, #FF,#FF
  82. SheTro  ;гниение трупов
  83.         DEC (IX+3)
  84.         JR NZ,ShtRt
  85.         LD HL,NxtTro
  86.         CALL gPAR
  87.         CP #FF
  88.         JR NZ,SheT1
  89.         LD (IX+1),0
  90.         JR ShtRt
  91. SheT1   CALL NZ,TrooTi
  92. ShtRt   XOR A
  93.         RET
  94.  
  95. ;------------обработка пленников
  96. SHED_p  ;П*Л*Е*Н*Н*И*К*И
  97.         LD A,#C9 ;ret - intel off
  98.         LD (ZZ00),A
  99.         ;
  100.         LD A,(TIC)
  101.         DEC A
  102.         AND %11
  103.         RET NZ ;раз в 4 такта
  104. Spe0    LD A,(IX+1)
  105.         OR A
  106.         JR Z,Spe1
  107.         LD A,(IX+0)
  108.         OR A
  109.         CALL Z,SheTro
  110.         CALL NZ,PRISON
  111. Spe1    LD BC,16
  112.         ADD IX,BC
  113.         LD HL,HER_N
  114.         INC (HL)
  115.         LD A,(HL)
  116.         CP 102
  117.         JP C,Spe0
  118.         RET
  119.  
  120. isFRND  ;по адр HL в GMAP2 - свой? (вых через POP)
  121.         LD A,(HL)
  122.         INC L
  123.         CP #80
  124.         RET C
  125.         CP #B0
  126.         RET NC
  127.         POP AF ;!!
  128.         LD C,(IX+5)
  129.         LD B,(IX+2)
  130.         PUSH IX
  131.         PUSH BC
  132.         LD A,(HER_N)
  133.         CALL deSEL
  134.         LD A,(IX+4)
  135.         EX AF,AF
  136.         CALL HL_IX0
  137.         CALL IXt_HL
  138.         XOR A
  139.         CALL NEWHER
  140.         POP BC
  141.         JR NZ,iFRn ;mem?
  142.         LD (IX+5),C
  143.         LD (IX+2),B
  144. iFRn    POP IX
  145.         RET NZ ;нет памяти
  146.         ;звёзды-пленник свободен
  147.         PUSH IY
  148.         CALL HL_IX0
  149.         PUSH HL
  150.         LD HL,00
  151.         CALL IX0_HL
  152.         POP HL
  153.         CALL NEWB09
  154.         POP IY
  155.         JP EVENT
  156.  
  157. PRISON  LD L,A
  158.         LD H,(IX+1)
  159.         LD A,(IX+5)
  160.         OR A
  161.         JR Z,Kill ;убитый
  162.         DEC L
  163.         DEC H
  164.         CALL GMAP2
  165.         CALL isFRND
  166.         CALL isFRND
  167.         CALL isFRND
  168.         LD DE,61
  169.         ADD HL,DE
  170.         CALL isFRND
  171.         INC L
  172.         CALL isFRND
  173.         ADD HL,DE
  174.         CALL isFRND
  175.         CALL isFRND
  176.         CALL isFRND ;!!
  177.         RET
  178.  
  179. ;---------------------------
  180. KilNxt  DEFB 3,3,3,3,3,3,3,17,3
  181.         DEFB 7,7,7,7,7,7,7,17,7
  182.         DEFB 13,15,14,11,3,7, 10,10,10
  183. Kill    ;убить героя по состоянию здоровья
  184.         LD A,(IX+7);проверить магию 'хруст. шара'
  185.         AND %11111000
  186.         CP  %00010000
  187.         JR Z,noKill
  188.          ;труп деморализует - убегать?
  189.          LD A,(SIDE_N)
  190.          OR A
  191.          CALL NZ,actRUN
  192.         LD A,(HER_N)
  193.         CALL deSEL ;отменить пометку
  194.         CALL EVENT ;событие
  195.         CALL HL_IX0
  196.         RES 7,H ;если смерть наступила в здании
  197.         CALL IXt_HL
  198.         CALL GMAP2
  199.         XOR A
  200.         LD (HL),A
  201.         LD (IX+0),A
  202.         LD A,(IX+4)
  203.         CP 8
  204.         JR Z,Ki33
  205.         CP 17
  206.         JR NZ,Ki2
  207. Ki33    PUSH IY
  208.         POP HL
  209.         LD A,(HL)
  210.         ADD A,4 ;сдвинуть изобр трупа конников
  211.         LD (HL),A
  212.         JR NC,Ki1
  213.         INC HL
  214.         INC (HL)
  215. Ki1     LD A,(IX+4)
  216. Ki2     LD HL,KilNxt ;нач ф гниения
  217.         CALL BA
  218.         ;
  219. TrooTi  ;время гниения фазы A
  220.         LD (IX+4),A
  221.         LD HL,TimTro
  222.         CALL BA
  223.         LD (IX+3),A
  224.         RET
  225. TimTro  ;время гниения фазы
  226.         DEFB 50,60,60,70, 50,60,60,70, 1,1,1, 50,40,50,50,50, #1,80
  227.  
  228. ;------------------------------
  229. MOVING  ;обр.команд живых людей
  230.         LD A,(IX+5)
  231.         OR A
  232.         JR Z,Kill ;убитый
  233. noKill  LD A,(IX+3)  ;
  234.         OR A         ;
  235.         JR Z,IX3_0   ;
  236.         CALL HERMOV  ;
  237.         LD A,(IX+3)
  238.         OR A
  239.         RET NZ
  240. IX3_0   LD A,(IX+9)
  241.         LD HL,MOVZZ
  242.         CALL WT
  243.         JP (HL)
  244.  
  245. ;-----параметры удара/защиты--
  246.  
  247. gB_FRC  ;получить силу снаряда
  248.         LD HL,BFORCE-1
  249.         LD A,(IY+4)
  250.         JP  BA
  251. gFORCE  ;получить знач силы удара
  252.         LD HL,FORCE
  253. gPAR    LD A,(IX+4)
  254.         JP BA
  255.  
  256. gDEFEN  ;получить знач защиты  (Вх/вых: C-удар)
  257.         LD HL,DEFENC
  258.         CALL gPAR
  259.         LD L,A
  260.         LD A,R
  261.         AND %11
  262.         CP L
  263.         RET NC
  264.         INC C ;уменьш силу удара на 50%
  265.         SRA C
  266.         RET
  267.  
  268. ;------нанесение ударов ---
  269. cMPACT  ;удар катапульты (9клеток)
  270.         LD L,(IY+5)
  271.         LD H,(IY+6)
  272.         PUSH HL
  273.         CALL GMAP2
  274.         LD A,(HL)
  275.         POP HL
  276.         CP #38
  277.         JR C,ccM0
  278.         CP #80
  279.         RET C ;при ударе в здание - только в центр
  280. ccM0    DEC L
  281.         DEC H
  282.         LD C,3
  283. ccM1    PUSH HL
  284.         LD B,3
  285. ccM2    PUSH BC
  286.         PUSH HL
  287.         CALL _sMPAC
  288.         POP HL
  289.         POP BC
  290.         INC L
  291.         DJNZ ccM2
  292.         POP HL
  293.         INC H
  294.         DEC C
  295.         JR NZ,ccM1
  296.         RET Z
  297.  
  298. buPACT  ;удар по зданию
  299.         CALL gFORCE
  300.         LD C,A
  301.         PUSH IX
  302.         LD IX,(en_IX)
  303. _uPACT  ;уменьш энергии здания на С/8 .. (C+7)/8
  304.         LD A,R
  305.         AND #7
  306.         ADD A,C
  307.         LD C,A
  308.         SRL C
  309.         SRL C
  310.         SRL C
  311.         LD A,(IX+3)
  312.         SUB C
  313.         JR NC,smpi0
  314.         XOR A
  315. smpi0   LD (IX+3),A
  316.          LD A,(HER_N) ;on индик0|3
  317.           LD D,A
  318.          AND #7F
  319.          CP #30
  320.          LD A,1
  321.          JR NC,smpi31
  322.          LD (LED+3),A
  323.           LD A,R
  324.           AND %1111
  325.           CALL Z,HELPme ;обижают здание врага
  326.           JR smpi3
  327. smpi31   LD (LED+0),A
  328. smpi3   POP IX
  329.         RET
  330.  
  331. sMPACT  ;огн.дождь наносит удар
  332.         LD L,(IY+5)
  333.         LD H,(IY+6)
  334. _sMPAC  LD A,(IY+7)
  335.         LD (HER_N),A
  336.         CALL GMAP2
  337.         LD A,(HL)
  338.         CP #80
  339.         JR C,smpp1
  340.         SUB #80 ;для врагов
  341.         JR IMPB_
  342. smpp1   CP 2
  343.         RET C ;нельзя атаковать бордюр
  344.         SUB #38
  345.         JR C,smww1
  346. smpp2   ;(для враж.зданий)
  347.         display "sMPACT=",sMPACT
  348.         display "smpp2=",$
  349.         PUSH IX
  350.         CALL B_IX
  351.         LD (en_IX),IX ;/для FX
  352.         CALL gB_FRC
  353.         LD C,A
  354.         JR _uPACT
  355.         ;
  356. smww1   ;возможно стена (видимая)
  357.         RES 4,H
  358.         LD A,(HL)
  359.         AND #7F
  360.         CP 64
  361.         RET C
  362.         CP 78
  363.         RET NC
  364.         CP 71
  365.         JR C,smww2
  366.         CALL RND
  367.         RLCA
  368.         RET NC ;50%
  369.         LD DE,64
  370.         PUSH HL
  371.         ADD HL,DE ;удалить хвостик забора
  372.         LD A,(HL)
  373.         AND #7F
  374.         CP 51
  375.         JR NZ,smww3
  376.         LD A,(HL)
  377.         SUB 50
  378.         LD (HL),A
  379. smww3   POP HL
  380.         LD DE,-64
  381.         LD C,1
  382.         PUSH HL ;если сверху забор - поставить хвостик
  383.         ADD HL,DE
  384.         LD A,(HL)
  385.         AND #7F
  386.         CP 64
  387.         JR C,smww4
  388.         CP 78
  389.         JR NC,smww4
  390.         LD C,51
  391. smww4   POP HL
  392.         LD A,(HL)
  393.         AND #80
  394.         ADD A,C
  395.         LD (HL),A ;добить полуразрушенную
  396.         SET 4,H
  397.         LD (HL),0
  398.         RET
  399. smww2   CALL RND ;частично разрушить
  400.         RLCA
  401.         RET C ;50%
  402.         LD A,(HL)
  403.         ADD A,7
  404.         LD (HL),A
  405.         RET
  406.  
  407. BMPACT  ;пуля наносит удар
  408.         LD A,(IY+7)
  409.         LD (HER_N),A
  410.         CALL N_IX
  411.         LD A,(IY+5)
  412.         BIT 7,A
  413.         JR NZ,smpp2
  414. IMPB_   PUSH IX
  415.         LD (en_A),A
  416.         CALL N_IX
  417.         LD (en_IX),HL
  418.         CALL gB_FRC
  419.         LD C,A
  420.         JR IMPA_
  421.         ;
  422. IMPACT  ;наносится удар
  423.         LD A,(en_A)
  424.         CP #80       ;здание?
  425.         JP NC,buPACT
  426.         ;наносится удар врагу (en_IX)
  427.         ;c учётом защиты
  428.         CALL RND
  429.         AND 7
  430.         JR Z,ipt0 ;1/8 - промах
  431.         CALL gFORCE
  432. ipt0    LD C,A
  433.         PUSH IX
  434.         ;учесть защиту
  435.         LD IX,(en_IX)
  436. IMPA_   CALL gDEFEN     ; - защита
  437.         ;понизить здоровье
  438.         LD A,(IX+5)
  439.         SUB C
  440.         JR NC,ipt1
  441.         XOR A
  442. ipt1    LD (IX+5),A
  443.         POP IX
  444.         ;следует ли отвечать потерпевшему?
  445.         RET Z ;трупы не отвечают
  446.         LD A,(en_A)
  447.         CP #30
  448.         LD A,(HER_N)
  449.         JR NC,K_ANSW
  450.         ;ударили нашего
  451.         CP #30
  452.         RET C ;ударил наш нашего
  453.         PUSH IX
  454.         LD IX,(en_IX)
  455.         CP #80
  456.          LD A,1
  457.          LD (LED+0),A ;индик0 on
  458.         JR C,H_ANSW
  459.         ; ударило заклинание - убегать
  460.         LD A,(IX+9)
  461.         CP 2
  462.         JR Z,ipt11 ;уже убегает
  463.         LD A,R
  464.         RRCA ;in 50%
  465.         CALL C,R_away
  466.         JR ipt11
  467. H_ANSW  ; ответн удар нашего
  468.         CALL _ANSW
  469.         CALL HL_IX0
  470.         DEC L
  471.         DEC H
  472.         CALL GMAP2
  473.         CALL ANSW1
  474.         CALL ANSW1
  475.         CALL ANSW1
  476.         LD DE,61
  477.         ADD HL,DE
  478.         CALL ANSW1
  479.         INC L
  480.         CALL ANSW1
  481.         ADD HL,DE
  482.         CALL ANSW1
  483.         CALL ANSW1
  484.         CALL ANSW1
  485. ipt11   POP IX
  486.         RET
  487. K_ANSW  ;ответ врага
  488.         AND #7F ;%1...
  489.         CP #30
  490.         RET NC ;враг ударил врага
  491.          LD A,1
  492.          LD (LED+3),A ;индик3 on
  493.         CALL HL_IX0
  494.         PUSH IX
  495.         LD IX,(en_IX)
  496.         LD A,(IX+9)
  497.         CP 4
  498.         JR NZ,kans2
  499.         ;cравнить с текущей целью и ударить
  500.         CALL DIST2 ;до нового обидчика+1
  501.         INC A
  502.         LD C,A
  503.         CALL HL_IXt
  504.         CALL DIST2 ;до старой цели
  505.         CP C
  506.         JR C,ipt11
  507.         CALL answ10
  508.         JR ipt11
  509. kans2   CALL answ09
  510.         JR ipt11
  511.  
  512.  
  513. ANSW1   ;по адр HL в GMAP2 - свой? (вых через POP)
  514.         LD A,(HL)
  515.         INC L
  516.         SUB #80
  517.         RET C  ;нет (здание)
  518.         CP #30
  519.         RET NC ;нет (чужак)
  520.         EXX ;сохр hl
  521.         CALL N_IX
  522. _ANSW   ;направить ответный удар на обидчика (HER_N)
  523.         LD A,(IX+9)
  524. answ09  LD HL,impANS
  525.         CALL BA
  526.         OR A
  527.         JR Z,answ11 ;возможен ответ на удар?
  528.         LD (IX+9),A
  529. answ10  LD A,(HER_N)
  530.         AND #7F  ;%1...
  531.         LD (IX+12),A
  532.         LD (IX+8),#80
  533.         CALL HL_IX0
  534.         CALL IXt_HL
  535. answ11  EXX
  536.         RET
  537.  
  538.  
  539. ;ZZxx-----собств обработка
  540. ZZ0     ;cтоять
  541.         CALL ZZsee0
  542.         JP ZZ00 ;вызов интеллекта врагов
  543. ZZ1     ;стоять насмерть
  544.         CALL ZZsee0
  545.         RET
  546.  
  547. ZZsee0  LD A,#FF ;осмотреться после останова
  548.         CP (IX+8)
  549.         RET Z
  550.         LD (IX+8),A
  551.         JP ONSEE
  552.  
  553. ZZ27    ;капульта атакует пустое место
  554.         LD HL,WW07
  555.         LD (JP_SUB+1),HL
  556.         CALL HL_IXt
  557.         JP ZZ4_
  558. ZZ3     ;идти в атаку
  559. ZZ2     ;просто идти
  560.         CALL GO_MAN
  561.         LD A,(IX+8)
  562.         OR A
  563.         JP NZ,ONSEE2
  564.         LD (IX+9),A
  565.         RET Z
  566.  
  567. WATACK  ;адреса П/П обработки
  568.         DEFW WW00,WW01,WW02,WW03,WW04,WW05,WW06,WW07,WW08
  569.         DEFW WW09,WW10,WW11,WW12,WW13,WW14,WW15,WW16,WW17
  570.         DEFW WW18,WW19,WW20,WW21,WW22,WW23,WW24,WW25,WW26
  571.  
  572. ZZ26    ;Атака на цель, не покидая позиции
  573.         ;\
  574. ZZ28    ;Атака на цель, которая м.быть прервана
  575.         ;\
  576. ZZ4     ;Атака на цель
  577.         LD A,(IX+4)
  578.         LD HL,WATACK
  579.         CALL WT
  580.         LD (JP_SUB+1),HL
  581.         LD A,(IX+12)
  582.         ;атака на врага
  583.         PUSH IX
  584.         LD (en_A),A
  585.         BIT 7,A
  586.         JR Z,ZZ4a
  587.         CALL B_IX ;параметры вражеского здания
  588.         LD (en_IX),IX
  589.         CALL HL_IX0
  590.         POP IX
  591.         CALL DIST_H
  592.         LD B,A
  593.         JR ZZ4b
  594. ZZ4a    CALL N_IX ;параметры врага
  595.         LD (en_IX),HL
  596.         CALL HL_IX0
  597.         POP IX
  598.         BIT 7,H
  599.         JR NZ,IX_98a ;враг в здании
  600. ZZ4_    CALL DIST2
  601.         LD B,A
  602. ZZ4b    LD A,L
  603.         AND A
  604.         JR Z,IX_98a ;враг мёртв
  605.         LD A,B
  606.         ;в A-дистанция, в HL-коорд цели
  607.         CALL JP_SUB ;!! м.быть вых.через POP, если враг рядом (оружие применено)
  608.         LD A,(IX+9)
  609.         CP 26
  610.         JR Z,ZZ4_26
  611.         PUSH HL ;преследовать,ecли цель далеко
  612.         CALL GO_MAN
  613.         POP HL
  614.         CALL IXt_HL  ; "я умный!"
  615.         LD A,(IX+8)
  616.         OR A
  617.         JP NZ,ONSEE2
  618.         LD (IX+8),#80
  619.         CALL GO_MAN
  620.         LD A,(IX+8)
  621.         OR A
  622.         JP NZ,ONSEE2
  623.         ;цель слишком далеко и дороги к ней нет
  624.         ;
  625. IX_98a  LD A,(IX+9)
  626.         CP 26
  627.         JP NZ,IX_98
  628. ZZ4_26  ;конец атаки на месте (26)
  629.         ;если цель мертва или далеко - снова стоять насмерть
  630.         CALL IX_98
  631.         INC (IX+9)
  632.         RET
  633.  
  634.  
  635. ;WWxx - обработка действия 4 - атака
  636. ;........................
  637. WW09    ;пеоны
  638. WW10
  639. WW11
  640. WW00    ;крестьяне
  641. WW01
  642. WW02    LD A,(SIDE_N)
  643.         OR A
  644.         JR Z,R_away
  645.         LD A,(DIFFIC)
  646.         OR A
  647.         JR Z,R_away
  648.         LD HL,(pntX) ;бежать к точке сбора
  649.         CALL IXt_HL
  650.         JP IX_92
  651. R_away  LD (IX+9),2 ;убегать случайно
  652. R_awa_  LD (IX+8),#80
  653.         LD C,(IX+0)
  654.         CALL RNDshf
  655.         LD (IX+10),A
  656.         LD C,(IX+1)
  657.         CALL RNDshf
  658.         LD (IX+11),A
  659.         RET
  660.  
  661. RNDshf  CALL RND ;нов коорд при убегании (C->A)
  662.         AND %1111
  663.         SUB 7 ;-7..8
  664.         ADD A,C
  665.         CP 63
  666.         JR NC,RNDshf
  667.         RET
  668.  
  669. WW22    ;князь
  670. WW23    ;гризольда
  671.         LD (IX+9),0
  672.         RET
  673. ;........................
  674. WW13    ;кунг
  675. WW17    ;грюнвер
  676. WW18    ;паук
  677. WW19    ;скелет
  678. WW20    ;скорп
  679. WW21    ;звезда
  680. WW24    ;костолом
  681. WW25    ;демон
  682. WW08    ;всадник
  683. WW04    ;воин
  684.         CP 2 ;дальность оружия
  685.         RET NC
  686.         EX DE,HL ;применить оружие
  687.         CALL HL_IX0
  688.         CALL DIR
  689.         LD (IX+2),A
  690.         CALL IMPIX3
  691.         LD (IX+8),0
  692.         CALL IMPACT
  693.         POP AF
  694.         JP ONSEE ;надо бы один раз :(
  695.  
  696. ;........................
  697. WW03    ;лучник
  698.         LD C,A
  699.         LD A,(sRANGE+3)
  700.         INC A
  701.         INC A
  702.         CALL ARCrng
  703.         CP C
  704.         RET C
  705.         CALL WWFire
  706.         CALL NEWB01
  707.         POP HL ;dec sp
  708.         RET
  709.  
  710. WW12    ;лангольер c луком
  711.         LD C,A
  712.         LD A,(sRANGE+12)
  713.         INC A
  714.         INC A
  715.         CALL ARCrng
  716.         CP C
  717.         RET C
  718.         CALL WWFire
  719.         CALL NEWB02
  720.         POP HL ;dec sp
  721.         RET
  722.  
  723. ARvsKT  ;лучники врага против наших катап (если да и DIFFIC=1, то A=2)
  724.         PUSH AF
  725.         LD A,(IX+12)
  726.         BIT 7,A
  727.         JR NZ,arv1
  728.         PUSH IX
  729.         PUSH HL
  730.         CALL N_IX
  731.         LD A,(IX+4)
  732.         POP HL
  733.         POP IX
  734.         CP 7
  735.         JR Z,arv2
  736.         CP 16
  737.         JR Z,arv2
  738. arv1    POP AF ;норм дист
  739.         RET
  740. arv2    POP AF
  741.         LD A,2 ;катап - короткая дистанция
  742.         RET
  743.  
  744. WWFire  EX DE,HL ;подготовиться применить оружие
  745.         PUSH DE
  746.         CALL HL_IX0
  747.         PUSH HL
  748.         CALL DIRF
  749.         LD (IX+2),A
  750.         CALL Z,ONSEE ;надо бы один раз :(
  751.         POP HL
  752.         CALL IMPIX3
  753.         LD (IX+8),0
  754.         POP DE
  755.         RET
  756.  
  757. WW14    ;\
  758. WW05    ;свящ/некром
  759.         CP 3
  760.         RET NC
  761.         CALL WWmana
  762.         CALL WWFire
  763.         CALL NEWB03
  764.         JR WW06a
  765. WW15    ;\
  766. WW06    ;волш/варлок
  767.         CP 5
  768.         RET NC
  769.         CALL WWmana
  770.         CALL WWFire
  771.         CALL newb05
  772. WW06a    LD A,6      ;FX
  773.          CALL SOUNDn ;
  774.         POP HL;dec sp
  775.         RET
  776.  
  777. WWmana  ;уменьш маны при стрельбе (no mana - 2xPOP,RET)
  778.         LD A,(IX+6)
  779.         SUB 3 ;декремент mana
  780.         JR C,WWma1
  781.         LD (IX+6),A
  782.         RET
  783. WWma1   POP HL ;!!
  784.         POP DE ;!!
  785.         RET
  786.  
  787. WW16    ;\
  788. WW07    ;катапульта
  789.         CALL KATrng
  790.         RET NC
  791.         CP 3
  792.         LD A,(SIDE_N)
  793.         JR C,WW07b
  794.         ;(проверь вокруг)
  795.         OR A
  796.         JR NZ,WW07d
  797.         ;наша кат не порань наших
  798.         BIT 7,(IX+12)
  799.         JR NZ,WW07c
  800.         PUSH HL
  801.         CALL humOWN ;nz - можно стрелять
  802.         POP HL
  803.         JR NZ,WW07c
  804.         JR Z,WW07a1 ;смени цель
  805. WW07d   ;враг не порань врага
  806.         BIT 7,(IX+12)
  807.         JR NZ,WW07c  ;огонь по зданию
  808.         PUSH HL
  809.         CALL kunOWN ;C - можно стрелять
  810.         POP HL
  811.         CALL NC,IX_98
  812.         JR NC,WW07a ;cмени цель
  813. WW07c   CALL WWFire
  814.         CALL NEWB06
  815.         CALL onsee2
  816.           LD A,4      ;FX
  817.           CALL SOUNDn ;
  818.         LD A,(IX+9)
  819.         CP 27 ;режим одиночного выстрела?
  820. WW07a1  CALL Z,IX_98a
  821. WW07a   POP HL ;dec sp
  822.         RET
  823. WW07b   OR A
  824.         JR Z,WW07a
  825.         LD A,(IX+8)
  826.         OR A
  827.         RET NZ
  828.         JP R_awa_ ;вражеская катапульта умеет отъезжать
  829.  
  830. WW26    ;стеногр
  831.         CP 4
  832.         RET NC
  833.         CALL WWFire
  834.         CALL NEWB07
  835.          LD A,5         ;FX
  836.          CALL SOUNDn    ;
  837.         POP DE ;dec sp
  838.         RET
  839.  
  840. ;---ix+9-ф-ции-крестьян---
  841. ZZ5     ;идти на базу
  842.         CALL HL_IXt
  843.         CALL DIST2
  844.         CP 3
  845.         JP NC,ZZ2
  846.         CALL GMAP
  847.         LD A,(HL)
  848.         AND #7F
  849.         ;база ещё не разрушена?
  850.         CP 86
  851.         JR Z,ZZ5a
  852.         CP 100
  853.         JP NZ,IX_98
  854. ZZ5a    ;чья база?
  855.         LD A,(SIDE_N)
  856.         OR A
  857.         JR Z,ZZ5hum
  858.         ;кунгов
  859.         CALL deGRUZ
  860.         ;(принять ресурсы врага)
  861.         JR ZZ5ex
  862. ZZ5hum  ;людей
  863.         CALL deGRUZ
  864.         LD DE,#100
  865.         PUSH AF
  866.         CALL Z,aWOOD
  867.         POP AF
  868.         CALL NZ,aMONEY
  869. ZZ5ex   LD (IX+9),24
  870.         LD (IX+3),#80+10;время нахожд. на базе
  871. ZZ57    CALL HL_IX0
  872.         CALL GMAP2
  873.         LD (HL),0
  874.         LD A,(HER_N)
  875.         CALL deSEL
  876.         CALL EVENT
  877.         JP unseeM
  878.  
  879.  
  880. deGRUZ  ;разгрузить (Z/NZ - был лес/золото)
  881.         LD A,(IX+4)
  882.         CP 9
  883.         JR C,dgu1
  884.         SUB 9
  885. dgu1    DEC A
  886.         RET
  887.  
  888. ZZ6     ;идти за лесом
  889. ZZ61    CALL GO_MAN
  890.         LD A,(IX+8)
  891.         OR A
  892.         PUSH AF
  893.         CALL NZ,ONSEE2
  894.         POP AF
  895.         JR Z,ZZ6A
  896.         BIT 7,(IX+3)
  897.         RET Z
  898.         CALL HL_IXt
  899.         CALL DIST2
  900.         CP 6 ;макс дистанция до леса
  901.         RET NC
  902. ZZ6A    ;есть ли рядом лес?
  903.         LD (IX+3),0
  904.         LD A,(IX+2)
  905.         CALL isTREE
  906.         JR C,ZZ6B ;он перед носом
  907.         LD B,8
  908. ZZ6a1   LD A,B
  909.         DEC A
  910.         CALL isTREE
  911.         JR C,ZZ6B_
  912.         DJNZ ZZ6a1
  913.         ;поискать поблизости
  914.         LD BC,60*256+8
  915. ZZ6a2   LD A,C
  916.         CALL isTREE
  917.         JR C,ZZ6a4
  918. ZZ6a6   INC C
  919.         DJNZ ZZ6a2
  920.         ;не нашли - стоп
  921.         JP IX_98
  922. ZZ6a4   LD A,C ;нашли рядом - идти
  923.         LD HL,GO_Ntb
  924.         CALL WT
  925.         LD A,(IX+0)
  926.         ADD A,L
  927.         LD L,A
  928.         CP 63
  929.         JR NC,ZZ6a6 ;вне карты
  930.         LD A,(IX+1)
  931.         ADD A,H
  932.         LD H,A
  933.         CP 63
  934.         JR NC,ZZ6a6 ;вне карты
  935.         CALL IXt_HL
  936.         LD (IX+8),#80
  937.         CALL GO_MAN
  938.         LD A,(IX+8) ;перед лесом препятствие
  939.         OR A
  940.         JP Z,IX_98
  941.         RET NZ
  942. ZZ6B_   DEC B
  943.         LD (IX+2),B
  944. ZZ6B    ;приступить к рубке леса
  945.         CALL ONSEE
  946.         LD (IX+9),25
  947.         LD (IX+8),0
  948.         LD A,(BrWOOD) ;кол_во ударов по дереву
  949.         LD (IX+12),A
  950.         RET
  951.  
  952. ZZ7     ;идти за золотом в шахту
  953.         CALL HL_IXt
  954.         CALL DIST2
  955.         CP 3
  956.         JP NC,ZZ2
  957.         CALL GMAP
  958.         LD A,(HL)
  959.         AND #7F
  960.         ;шахта ещё не разрушена?
  961.         CP 78
  962.         JP NZ,IX_98
  963. ZZ7a    ;вычет денег из шахты
  964.         SET 4,H
  965.         PUSH IX
  966.         LD A,(HL)
  967.         SUB #38
  968.         CALL B_IX
  969.         LD L,(IX+4)
  970.         LD H,(IX+5)
  971.         DEC HL
  972.         LD (IX+4),L
  973.         LD (IX+5),H
  974.         LD A,L
  975.         OR H
  976.         JR NZ,ZZ7b
  977.         LD (IX+3),A ;разрушЬ шахту
  978. ZZ7b    CALL HL_IX0
  979.         POP IX
  980.         LD (IX+14),L ;запомнить коорд шахты
  981.         LD (IX+15),H
  982.         LD (IX+9),23
  983.         LD (IX+3),#80+15;время нахожд. в шахте
  984.         JP ZZ57
  985.  
  986. ZZ8     ;идти на стр-во
  987.         CALL DISTpH
  988.         ;подошли к зданию?
  989.         CP 2
  990.         JP NC,ZZ2
  991.         ;начать стройку/ремонт
  992.         PUSH IX
  993.         CALL HL_IXt
  994.         CALL GMAP2
  995.         LD A,(HL)
  996.         SUB #40 ;шахты не чинить
  997.         JR C,ZZ8_0
  998.         CP 64
  999.         JR NC,ZZ8_0
  1000.         ADD A,8
  1001.         CALL B_IX
  1002.         LD A,(IX+0)
  1003.         OR A
  1004.         JR NZ,ZZ8_1
  1005.         ;здания нет
  1006. ZZ8_0   POP IX
  1007.         JP IX_98
  1008. ZZ8_1   LD A,(IX+4)
  1009.         CP 253
  1010.         JR Z,ZZ8_2
  1011.         CP 254
  1012.         JR Z,ZZ8_2
  1013.         ;ремонт
  1014.         LD A,(IX+2)
  1015.         LD HL,bHEALT
  1016.         CALL BA
  1017.         CP (IX+3)
  1018.         JR Z,ZZ8_0 ;ремонт не нужен
  1019.         LD A,(SIDE_N)
  1020.         OR A
  1021.         JR NZ,ZZ8k ;для врага - бесплатно
  1022.         LD DE,#02
  1023.         LD BC,#03
  1024.         CALL dMN_WD ;для наших - уменьшить MN/WD
  1025.         JP C,ZZ8n
  1026. ZZ8k    INC (IX+3)
  1027.         POP IX
  1028.         CALL HL_IXt ;направить удар ремонтника
  1029.         EX DE,HL
  1030.         CALL HL_IX0
  1031.         CALL DIR
  1032.         LD (IX+2),A
  1033.         JP IMPIX3
  1034. ZZ8n    POP IX;нет средств на ремонт
  1035.          if EGA
  1036.          push ix
  1037.          endif
  1038.         CALL nMN_WD ;при EGA портит ix!!!
  1039.          if EGA
  1040.          pop ix
  1041.          endif
  1042.         JP IX_98
  1043. ZZ8_2   ;cтройка
  1044.         LD A,(IX+7)
  1045.         INC A
  1046.         JR NZ,ZZ8_0 ;строитель уже есть
  1047.         LD A,(HER_N)
  1048.         LD (IX+7),A
  1049.         POP IX
  1050.         CALL HL_IX0
  1051.         CALL GMAP2
  1052.         LD (HL),0
  1053.         CALL HL_IXt
  1054.         CALL IX0_HL
  1055.         LD (IX+9),22
  1056. unseeM  ;сделать человека невидимым
  1057.         SET 7,(IX+1)
  1058.         SET 7,(IY+1)
  1059.         RET
  1060.  
  1061. DISTpH  ;расст до здания для крестьян
  1062.         CALL HL_IXt
  1063. DIST_H  CALL DIST2 ;-""- для воинов
  1064.         CP 3
  1065.         RET NC
  1066.         PUSH HL
  1067.         PUSH AF
  1068.         CALL GMAP2
  1069.         LD A,(HL)
  1070.         SUB #38
  1071.         PUSH IX
  1072.         CALL B_IX
  1073.         CALL HL_IX0
  1074.         LD A,(IX+2)
  1075.         POP IX
  1076.         CP 8
  1077.         JR Z,ddp1
  1078.         CP 18
  1079.         JR Z,ddp1
  1080. ddp_0   POP AF
  1081.         POP HL
  1082.         DEC A
  1083.         RET
  1084. ddp1    LD A,L
  1085.         CP (IX+0)
  1086.         JR C,ddp_1
  1087.         LD A,H
  1088.         CP (IX+1)
  1089.         JR NC,ddp_0
  1090. ddp_1   POP AF
  1091.         POP HL
  1092.         RET
  1093.  
  1094. ;----допустимость применения магии---
  1095.  
  1096. ZZddin  ;опред дистанции до движ цели
  1097.         LD A,(IX+12)
  1098.         PUSH IX
  1099.         CALL N_IX ;параметры врага
  1100.         LD (en_IX),HL
  1101.         CALL HL_IX0
  1102.         POP IX
  1103.         CALL IXt_HL
  1104.         LD A,L
  1105.         OR A
  1106.         JR Z,_ex98 ;цель погибла
  1107.         BIT 7,H
  1108.         JR NZ,_ex98 ;цель в здании
  1109.         CALL DIST2
  1110.         JR ZZd1
  1111.  
  1112. ZZdist  CALL HL_IXt ;опредление дистанции
  1113.         CALL DIST2
  1114.         OR A
  1115.         JR Z,_ex98
  1116. ZZd1    CP 9 ;дистанция до объекта магии-1
  1117.         RET C
  1118.         POP HL ;!!
  1119.         JP NC,ZZ2 ;цель далеко
  1120.  
  1121. isMANA  ;есть волш энергия? (С)
  1122.         LD A,(IX+6)
  1123.         SUB C
  1124.         JR C,noMANA
  1125.         LD (IX+6),A
  1126.         RET
  1127. noMANA  LD A,(SIDE_N)
  1128.         OR A
  1129.         CALL Z,pb07
  1130. _ex98   POP HL ;!!
  1131.         JP IX_98
  1132.  
  1133. ;------ix+9---магия волш-------
  1134.  
  1135. ZZ12    ;cтеногрыз
  1136.         LD BC,MANA-1+#1A00
  1137.         JR ZZ10a
  1138. ZZ13    ;паук
  1139.         LD BC,MANA/4+#1200
  1140.         JR ZZ10a
  1141. ZZ15    ;демон
  1142.         LD BC,MANA-1+#1900
  1143.         JR ZZ10a
  1144.  
  1145. ZZ10    ;cкорп
  1146.         LD BC,MANA/4+#1400
  1147. ZZ10a   ;пров. возможность
  1148.         LD A,(IX+6)
  1149.         SUB C
  1150.         JP C,IX_98
  1151.         LD (IX+6),A
  1152.         ;родить чудище
  1153.         PUSH IX
  1154.         PUSH IY
  1155.         LD A,B
  1156.         EX AF,AF
  1157.         CALL HL_IX0
  1158.         CALL stayON
  1159.         CALL NEWB09 ;звёзды
  1160.         LD A,(SIDE_N)
  1161.         CALL NEWHER
  1162.         JR NZ,ZZ10b ;mem?
  1163.         LD (IX+13),3;чудище->в атаку
  1164.         CALL HL_IX0
  1165. ZZ10b   POP IY
  1166.         POP IX
  1167.         JP NZ,IX_98 ;нет памяти
  1168.         JR ZZ_En2
  1169.  
  1170. ZZ14    ;смерч
  1171.         CALL ZZdist
  1172.         LD A,(TIC)
  1173.         AND 7
  1174.         RET NZ
  1175.         LD C,MANA/6
  1176.         CALL isMANA
  1177.         CALL NEWB12
  1178.         CALL HL_IXt
  1179.         JR ZZ_En2
  1180.  
  1181. ZZ11    ;огненый дождь
  1182.         CALL ZZdist
  1183.         LD C,MANA/14 ;часть дождя
  1184.         CALL isMANA
  1185.         PUSH IY
  1186.         EX DE,HL
  1187.         LD B,4 ;кол-во дождинок
  1188. ZZ11a   CALL RND
  1189.         RRA
  1190.         LD C,31 ;в 50% - более точное прицеливание
  1191.         JR C,ZZ11c
  1192.         LD C,63
  1193. ZZ11c   CALL RND
  1194.         AND C
  1195.         LD HL,GO_Ntb
  1196.         CALL WT
  1197.         LD A,L
  1198.         ADD A,E
  1199.         CP 63
  1200.         JR NC,ZZ11b
  1201.         LD L,A
  1202.         LD A,H
  1203.         ADD A,D
  1204.         CP 63
  1205.         JR NC,ZZ11b
  1206.         LD H,A
  1207.         CALL NEWB08
  1208. ZZ11b   DJNZ ZZ11a
  1209.         POP IY
  1210.         CALL HL_IXt
  1211.         JR ZZ_En2
  1212.  
  1213.  
  1214. ZZ_EnV  LD HL,(PX)
  1215. ZZ_End  ;конец действия
  1216.         CALL IX_98
  1217. ZZ_En2  ;HL-напр колд
  1218.         EX DE,HL
  1219.         CALL HL_IX0
  1220.         CALL DIR_F
  1221.         LD (IX+2),A
  1222.         JP IMPIX3
  1223.  
  1224.  
  1225. ;------магия свящ
  1226.  
  1227. ZZ16    ;дать здоровье
  1228.         CALL ZZddin
  1229.         LD A,(IX+6)
  1230.         CP MANA/32 ;нижний придел
  1231.         JP C,IX_98
  1232.         LD HL,(en_IX)
  1233.         LD DE,4
  1234.         ADD HL,DE
  1235.         LD A,(HL) ;тип объекта
  1236.         INC HL
  1237.         EX DE,HL
  1238.         LD HL,HEALTH
  1239.         CALL WA
  1240.         LD C,A
  1241.         EX DE,HL
  1242.         LD A,(HL) ;текущ здоровье
  1243.         CP C
  1244.         JR NC,ZZ_EnV
  1245.         LD B,64 ;количество попыток передачи здоровья
  1246. ZZ16a   LD A,(HL)
  1247.         CP C
  1248.         JR NC,ZZ16b ;уже полностью здоров
  1249.         LD A,(IX+6)
  1250.         SUB 2
  1251.         JR C,ZZ16b ;кончилась мана
  1252.         LD (IX+6),A
  1253.         INC (HL) ;добавить здоровья (1HP for 2MANA)
  1254.         DJNZ ZZ16a
  1255. ZZ16b   PUSH IY
  1256.         LD HL,(en_IX);звёздочки
  1257.         LD A,(HL)
  1258.         INC HL
  1259.         LD H,(HL)
  1260.         LD L,A
  1261.         PUSH HL
  1262.         CALL NEWB09
  1263.         POP HL
  1264.         POP IY
  1265.         JR ZZ_End
  1266.  
  1267. ZZ20    ;чёрное зрение
  1268. ZZ17    ;белое зрение
  1269.         LD HL,(PX)
  1270.         PUSH HL
  1271.         CALL GMAP
  1272.         LD A,(HL)
  1273.         POP HL
  1274.         OR A
  1275.         JP Z,IX_98 ;на границе
  1276.         LD C,MANA/2
  1277.         CALL isMANA
  1278.         PUSH IY
  1279.         PUSH HL
  1280.         CALL ONSEEm
  1281.         POP HL
  1282.         PUSH HL
  1283.         INC L
  1284.         ;звёзды
  1285.         CALL NEWB09
  1286.         POP HL
  1287.         PUSH HL
  1288.         DEC L
  1289.         CALL NEWB09
  1290.         POP HL
  1291.         PUSH HL
  1292.         INC H
  1293.         CALL NEWB09
  1294.         POP HL
  1295.         DEC H
  1296.         CALL NEWB09
  1297.         POP IY
  1298.         JP ZZ_EnV
  1299.  
  1300. ZZ19    ;оживление скелетов
  1301.         CALL ZZdist
  1302.         JP NC,ZZ2
  1303.         LD (ZZ_tar),HL
  1304.         LD HL,HUMAN
  1305.         LD B,102
  1306. ZZ19a   LD A,(HL)
  1307.         OR A
  1308.         JR NZ,ZZ19b
  1309.         INC L
  1310.         LD A,(HL)
  1311.         DEC L
  1312.         OR A
  1313.         JR Z,ZZ19b
  1314.         LD A,(IX+6) ;маны достаточно?
  1315.         CP MANA/4
  1316.         JR C,ZZ19x
  1317.         PUSH BC
  1318.         PUSH HL
  1319.         PUSH IX
  1320.          PUSH HL
  1321.          POP IX
  1322.         LD A,(IX+4)
  1323.         CP 8 ;труп оживляем (0..7) ?
  1324.         JR NC,ZZ19c
  1325.         LD HL,(ZZ_tar)
  1326.         CALL DIST
  1327.         CP 4 ;радиус оживления -1
  1328.         JR NC,ZZ19c
  1329.         ;убрать труп
  1330.         LD (IX+1),0
  1331.         ;поднять скелета
  1332.         PUSH IY
  1333.         CALL HL_IXt
  1334.         CALL stayON
  1335.         CALL NEWB09 ;звёзды
  1336.         LD A,19
  1337.         EX AF,AF
  1338.         LD A,(SIDE_N)
  1339.         CALL NEWHER
  1340.         JR NZ,ZZ19z ;нет памяти
  1341.         LD (IX+13),3
  1342. ZZ19z   POP IY
  1343.         POP IX
  1344.         LD A,(IX+6)
  1345.         SUB MANA/4
  1346.         LD (IX+6),A
  1347.         JR ZZ19d
  1348. ZZ19c   POP IX
  1349. ZZ19d   POP HL
  1350.         POP BC
  1351. ZZ19b   LD DE,16
  1352.         ADD HL,DE
  1353.         DJNZ ZZ19a
  1354. ZZ19x   ;мана кончилась
  1355.         LD HL,(ZZ_tar)
  1356.         JP ZZ_End
  1357.  
  1358.  
  1359. ZZ18    ;огн пояс
  1360.         LD A,%00001000 ;(1)
  1361.         JR ZZ21a
  1362. ZZ21    ;хруст сфера
  1363.         LD A,%00010000 ;(2)
  1364. ZZ21a   EX AF,AF
  1365.         CALL ZZddin
  1366.         LD C,MANA-1
  1367.         CALL isMANA
  1368.         PUSH IX
  1369.         LD HL,(en_IX)
  1370.         LD DE,7
  1371.         ADD HL,DE
  1372.         POP IX
  1373.         LD A,(HL)
  1374.         AND %11111000
  1375.         JP NZ,IX_98 ;уже есть заклинание
  1376.         EX AF,AF
  1377.         LD C,A
  1378.         LD A,(HL)
  1379.         AND %00000111
  1380.         OR C
  1381.         LD (HL),A
  1382.         LD A,C
  1383.         CP %00001000
  1384.         LD C,14
  1385.         JR Z,ZZ21b
  1386.         DEC C
  1387. ZZ21b   CALL NEWB14
  1388.         JP Z,ZZ16b
  1389.         LD A,(HL) ;неудача - нет места
  1390.         AND %111
  1391.         LD (HL),A
  1392.         JP ZZ16b
  1393.  
  1394. ;-----ix+9---крестьяне работают---------------
  1395. ZZ22    ;строит дом
  1396.         RET ;none
  1397. ZZ23    ;выйти из шахты
  1398.         INC (IX+4)
  1399.         INC (IX+4)
  1400.         LD C,5
  1401.         CALL basOUT
  1402.         JP basTAR
  1403.  
  1404. ZZ24    ;выйти из базы
  1405.         LD A,(IX+4)
  1406.         LD C,6
  1407.         CP 9
  1408.         JR NC,ZZ24a
  1409.         LD (IX+4),0
  1410.         DEC A
  1411.         JR ZZ24ex
  1412. ZZ24a   LD (IX+4),9
  1413.         SUB 10
  1414. ZZ24ex  JR Z,ZZ24c
  1415.         INC C
  1416. ZZ24c   ;\
  1417. basOUT  ;выйти из базы/шахты (C-нов действие)
  1418.         LD (IX+9),C
  1419.         LD (IX+8),#80
  1420.         LD A,(IX+2) ;развернись
  1421.         ADD A,4
  1422.         AND 7
  1423.         LD (IX+2),A
  1424.         ;попробуй выйти, где вошёл
  1425.         RES 7,(IX+1)
  1426.         RES 7,(IY+1)
  1427.         CALL HL_IX0
  1428.         CALL GMAP2
  1429.         LD A,(HL)
  1430.         OR A
  1431.         JR Z,bos11
  1432.         ;найти другую позицию
  1433.         CALL HL_IXt
  1434.         CALL stayON
  1435.         CALL IX0_HL
  1436.         PUSH HL
  1437.         XOR A
  1438.         CALL NEWiy_
  1439.         POP HL
  1440.         CALL GMAP2
  1441. bos11   LD A,(HER_N)
  1442.         ADD A,#80
  1443.         LD (HL),A
  1444.         LD L,(IX+14)
  1445.         LD H,(IX+15)
  1446.         JP IXt_HL
  1447.  
  1448.  
  1449. ZZ25    ;pубит лес
  1450.         LD A,(IX+2)
  1451.         CALL isTREE
  1452.         JR NC,noWOOD
  1453.         DEC (IX+12)
  1454.         ;удар по дереву
  1455.         JP NZ,IMPIX3
  1456. ZZ25a   ;повалить дерево
  1457.         CALL deTREE
  1458.         CALL HL_IXt
  1459.         LD (IX+14),L
  1460.         LD (IX+15),H
  1461.         LD A,(LEV_T)
  1462.         OR A
  1463.         JP NZ,IX_98 ;для подземелий
  1464.         ;идти на базу
  1465.         CALL basTAR
  1466.         INC (IX+4)
  1467.         JP EVENT
  1468. noWOOD  ;нет леса перед носом
  1469.         LD (IX+9),6
  1470.         LD (IX+8),#80
  1471.         RET
  1472.  
  1473. basTAR ;найти базу и направить на неё
  1474.         CALL HL_IX0
  1475.         LD C,#FF ;миним расст
  1476.         PUSH IX
  1477.         LD B,32
  1478.         LD DE,8
  1479.         LD IX,HBUILD
  1480.         LD A,(SIDE_N)
  1481.         OR A
  1482.         JR Z,bst0
  1483.         LD IX,KBUILD
  1484. bst0    LD A,(IX+2)
  1485.         ;это база?
  1486.         OR A
  1487.         JR Z,bst1
  1488.         CP 10
  1489.         JR NZ,bst2
  1490.         ;расст меньше минимального?
  1491. bst1    LD A,(IX+0)
  1492.         OR A
  1493.         JR Z,bst2
  1494.         PUSH BC
  1495.         CALL DIST2
  1496.         POP BC
  1497.         CP C
  1498.         JR NC,bst2
  1499.         LD C,A
  1500.         LD (en_IX),IX
  1501. bst2    ADD IX,DE
  1502.         DJNZ bst0
  1503.         LD A,C
  1504.         CP #FF
  1505.         JR NZ,bstt
  1506.         ;некуда идти
  1507.         POP IX
  1508.         JP IX_98
  1509. bstt    ;идти на ближайшую базу
  1510.         LD IX,(en_IX)
  1511.         CALL HL_IX0
  1512.         POP IX
  1513.         CALL IXt_HL
  1514.         LD (IX+9),5
  1515.         LD (IX+8),#80
  1516.         RET
  1517.  
  1518. isTREE  ;в направлении A - дерево? (С-да/NC-нет)
  1519.         LD HL,GO_Ntb
  1520.         CALL WT
  1521.         LD A,(IX+0)
  1522.         ADD A,L
  1523.         LD L,A
  1524.         LD A,(IX+1)
  1525.         ADD A,H
  1526.         LD H,A
  1527. isTRE_  CALL GMAP
  1528.         LD A,(HL)
  1529.         AND #7F
  1530.         SUB 61  ;деревья 61,62,63
  1531.         CP 3
  1532.         RET
  1533.  
  1534. deTREE  ;повалить дерево ;HL-адр в мап
  1535.         LD A,(HL)
  1536.         LD C,A
  1537.         AND #80
  1538.         ADD A,6
  1539.         LD (HL),A
  1540.         CALL deT1
  1541.         LD A,C
  1542.         AND #7F
  1543.         CP 62
  1544.         JR C,deTTOP
  1545.         JR Z,deTMID
  1546. deTBOT  LD DE,-64 ;низ
  1547.         ADD HL,DE
  1548.         LD A,(HL)
  1549.         OR A
  1550.         RET Z
  1551.         LD C,A
  1552.         AND #7F
  1553.         CP 62
  1554.         LD A,63
  1555. detb0   JR Z,detb1
  1556.         LD A,6
  1557. detb1   LD (HL),A
  1558.         BIT 7,C
  1559.         JR Z,detb2
  1560.         SET 7,(HL)
  1561. detb2   CP 6
  1562.         JR Z,deT1
  1563.         RET
  1564.         ;
  1565. deTTOP  LD DE,64 ;верх
  1566. deTTO2  ADD HL,DE
  1567.         LD A,(HL)
  1568.         OR A
  1569.         RET Z
  1570.         LD C,A
  1571.         AND #7F
  1572.         CP 62
  1573.         LD A,61
  1574.         JR detb0
  1575. deTMID  CALL deTBOT
  1576.         LD DE,128
  1577.         JR deTTO2
  1578.         ;
  1579. deT1    SET 4,H
  1580.         LD A,(HL)
  1581.         CP 2
  1582.         JR NZ,deT11
  1583.         LD (HL),0
  1584. deT11   RES 4,H
  1585.         RET
  1586.  
  1587. ;------главный цикл обработки шахт-------
  1588. MINER   XOR A
  1589.         LD (brNUM),A ;очистить список погорельцев
  1590.         LD IX,MINE
  1591.         LD BC,#800
  1592.         LD E,B ;LD DE,8
  1593.         LD D,C ;
  1594. Mim0    LD A,(IX)
  1595.         OR A
  1596.         JR Z,Mim1
  1597.         LD A,(IX+3)
  1598.         OR A
  1599.         JR Z,KilMim
  1600.         CP (IX+6)
  1601.         CALL C,HomBrk
  1602.         LD A,(IX+4)
  1603.         OR (IX+5)
  1604.         JR Z,KilMim
  1605. Mim1    ADD IX,DE
  1606.         INC C
  1607.         DJNZ Mim0
  1608.         RET
  1609.  
  1610. KilMim  ;разрушить шахту
  1611.         CALL DESTRY
  1612.         JR Mim1
  1613.  
  1614. ;------главный цикл обработки зданий ------------------------
  1615. HOMER   LD HL,SIDE_N
  1616.         LD (HL),0 ;свои здания
  1617.         PUSH HL
  1618.         CALL HOMER_
  1619.         POP HL
  1620.         INC (HL)  ;здания врага
  1621. HOMER_  LD B,32 ;в С - номер
  1622. Hom0    LD A,(IX)
  1623.         OR A
  1624.         JR Z,Hom1
  1625.         LD A,(IX+3)
  1626.         OR A
  1627.         JR Z,KilHom
  1628.         CP (IX+6)
  1629.         CALL C,HomBrk
  1630.         LD A,(IX+4)
  1631.         INC A
  1632.         JR Z,Hom1
  1633.         CP #80
  1634.         PUSH AF
  1635.         CALL NC,HomBld
  1636.         POP AF
  1637.         CALL C,HomFct
  1638. Hom1    ADD IX,DE
  1639.         INC C
  1640.         DJNZ Hom0
  1641.         RET
  1642.  
  1643. HomBrk  ;занести повреждённое здание в список brHom для vFLAME
  1644.         LD HL,brNUM
  1645.         LD A,(HL)
  1646.         CP 24
  1647.         RET NC
  1648.         INC (HL)
  1649.         INC HL
  1650.         CALL BA
  1651.         LD (HL),C
  1652.         LD A,(SIDE_N)
  1653.         OR A
  1654.         RET NZ
  1655.         LD A,(DIFFIC) ;индикация/горение
  1656.         OR A
  1657.         JR Z,Hmbr1
  1658.         LD A,(TIC)
  1659.         AND #7
  1660.         JR NZ,Hmbr1
  1661.         DEC (IX+3) ;наши здания сгорают :( при DIFFIC=1
  1662. Hmbr1    LD A,1
  1663.          LD (LED+5),A ;on индик5
  1664.         RET
  1665.  
  1666. KilHom  ;разрушть здание
  1667.         CALL DESTRY
  1668.         JR Hom1
  1669.  
  1670. DESTRY  ;разрушить объект IX (C-его номер)
  1671.         PUSHs
  1672.          LD A,21
  1673.          LD (LED+2),A ;on индик2
  1674.          LD A,2
  1675.          CALL SOUNDn  ;FX
  1676.         CALL EVENT
  1677.         ;отменить пометку
  1678.         LD HL,SEL_T
  1679.         LD A,(HL)
  1680.         CP 8
  1681.         JR C,pec4
  1682.         INC HL
  1683.         LD A,(HL)
  1684.         CP C
  1685.         JR NZ,pec4
  1686.         DEC HL
  1687.         LD (HL),0
  1688. pec4    ;выпустить строителя, если он там
  1689.         LD A,(IX+4)
  1690.         CP 253
  1691.         JR C,pec0
  1692.         INC A
  1693.         JR Z,pec0
  1694.         LD A,(IX+7)
  1695.         INC A
  1696.         CALL NZ,outMAN
  1697. pec0    ;вызвать облако
  1698.         CALL NEWB11
  1699.         ;разрушить зд
  1700.         CALL HL_IX0
  1701.         LD (IX+0),0
  1702.         CALL GMAP
  1703.         LD A,(IX+2)
  1704.         CP 8
  1705.         JR Z,pec1
  1706.         CP 18
  1707.         JR Z,pec1
  1708.         LD C,17
  1709.         CALL pecDES
  1710.         DEC HL
  1711.         CALL pecDES
  1712.         LD DE,-64
  1713.         ADD HL,DE
  1714.         CALL pecDES
  1715.         INC HL
  1716.         CALL pecDES
  1717.         INC HL
  1718.         CALL pecDES
  1719.         LD DE,64
  1720.         ADD HL,DE
  1721.         CALL pecDES
  1722.         ADD HL,DE
  1723.         CALL pecDES
  1724.         DEC HL
  1725.         CALL pecDES
  1726.         DEC HL
  1727.         CALL pecDES
  1728.         JR pec2
  1729. pec1    LD C,23
  1730.         CALL pecDES
  1731.         DEC HL
  1732.         LD C,25
  1733.         CALL pecDES
  1734.         LD DE,-64
  1735.         ADD HL,DE
  1736.         LD C,19
  1737.         CALL pecDES
  1738.         INC HL
  1739.         LD C,21
  1740.         CALL pecDES
  1741. pec2    POPs
  1742.         RET
  1743.         ;
  1744. pecDES  ;уничт кусочек здания с учётом видим
  1745.         SET 4,H
  1746.         LD (HL),0
  1747.         RES 4,H
  1748.         LD A,(HL)
  1749.         AND #80
  1750.         OR C
  1751.         LD (HL),A
  1752.         INC C
  1753.         RET
  1754.  
  1755. HomBld  ;строительство
  1756.         LD A,(IX+7)
  1757.         INC A
  1758.         RET Z ;нет строителя
  1759.         DEC (IX+5)
  1760.         RET NZ
  1761.         PUSH BC
  1762.         PUSH DE
  1763.         INC (IX+4)
  1764.         LD A,(IX+4)
  1765.         INC A
  1766.         CALL Z,outMA_
  1767.         LD A,(IX+2)
  1768.         LD HL,bcTIME
  1769.         CALL BA
  1770.         LD (IX+5),A
  1771.         LD A,C
  1772.         CALL placeB
  1773.         POP DE
  1774.         POP BC
  1775.         JP EVENT
  1776.  
  1777. outMA_   LD A,15
  1778.          LD (LED+1),A ;on индик1
  1779. outMAN  CALL HL_IX0
  1780.         PUSH IX  ;отпусти строителя
  1781.         PUSH BC
  1782.         LD A,(IX+7)
  1783.         PUSH AF
  1784.         PUSH HL
  1785.         CALL N_IXIY
  1786.         POP HL
  1787.         CALL stayON
  1788.         CALL IX0_HL
  1789.         CALL IX_98
  1790.         PUSH HL
  1791.         XOR A
  1792.         CALL NEWiy_
  1793.         POP HL
  1794.         CALL GMAP2
  1795.         POP AF
  1796.         ADD A,#80
  1797.         LD (HL),A
  1798.         POP BC
  1799.         POP IX
  1800.         RET
  1801.  
  1802. HomFct  ;пр_во/иссл
  1803.         DEC (IX+5)
  1804.         RET NZ
  1805.         CALL EVENT
  1806.         LD A,(IX+4)
  1807.         LD (IX+4),255
  1808.         CP 18
  1809.         JR C,HFChum
  1810.         SUB 20
  1811.         PUSH AF
  1812.         LD HL,HFCvar
  1813.         CALL WT
  1814.         LD A,(SIDE_N)
  1815.         OR A
  1816.         JR Z,HoFc1
  1817.         LD DE,kTOWER-hTOWER ;теперь неверно
  1818.         ADD HL,DE
  1819. HoFc1   POP AF
  1820.         PUSH HL
  1821.         LD HL,HFCdat
  1822.         CALL BA
  1823.         POP HL
  1824.         LD (HL),A
  1825.         RET
  1826.  
  1827. HFChum  ;появляется новый член общества A
  1828.         EX AF,AF
  1829.         CALL HL_IX0
  1830.         PUSH IX
  1831.         PUSHs
  1832.         CALL stayON
  1833.         LD A,(SIDE_N)
  1834.         OR A
  1835.         JR NZ,hFC1
  1836.          LD A,11
  1837.          LD (LED+4),A ;on индик4
  1838.          XOR A
  1839. hFC1    CALL NEWHER
  1840.         POPs
  1841.         POP IX
  1842.         RET
  1843.  
  1844.  
  1845. HFCvar  DEFW hARC,hARC, hBLADE,hBLADE, hHORSE,hHORSE,hHORSE
  1846.         DEFW hSHILD,hSHILD, hCLRIC+0,hCLRIC+1,hCLRIC+2
  1847.         DEFW hWIZRD+0,hWIZRD+1,hWIZRD+2
  1848. HFCdat  DEFB 1,2, 1,2, 1,2,3
  1849.         DEFB 1,2, 1,1,1, 1,1,1
  1850.         ;(за врагов можно проводить исследования)
  1851.  
  1852.