;------главный цикл обработки персонажей
 
 
 
MOVZZ   ;п/п обр действий ix+9
 
        DEFW ZZ0,ZZ1,ZZ2,ZZ3,ZZ4,ZZ5,ZZ6,ZZ7,ZZ8,09
 
        DEFW ZZ10,ZZ11,ZZ12,ZZ13,ZZ14,ZZ15
 
        DEFW ZZ16,ZZ17,ZZ18,ZZ19,ZZ20,ZZ21
 
        DEFW ZZ22,ZZ23,ZZ24,ZZ25,ZZ26,ZZ27
 
        DEFW ZZ28
 
 
 
impANS  ;ответ на удар (0/х-нет/функция) при действии N
 
        DEFB 4,26,0,4,0,4,4,4,4,4
 
        DEFB 0,0,0,0,0,0
 
        DEFB 0,0,0,0,0,0
 
        DEFB 0,0,0,4,0,0
 
        DEFB 4
 
 
 
 
 
SHED_H  LD IX,HUMAN ;Л*Ю*Д*И
 
        LD IY,XY
 
        XOR A
 
        LD (HER_N),A
 
        LD (SIDE_N),A
 
        ;
 
        LD A,#C9 ;ret
 
        LD (ZZ00),A ;intel=off
 
        LD (ARCrng),A ;лучники vs катапульта=off
 
        LD A,9 ;дальность для наших катап=8
 
        LD (KATrng+1),A
 
        ;
 
She0    LD A,(IX+1)
 
        OR A
 
        JR Z,She1
 
        LD A,(IX+0)
 
        OR A
 
        CALL Z,SheTro
 
        CALL NZ,MOVING
 
She1    LD BC,16
 
        ADD IX,BC
 
        LD C,4
 
        ADD IY,BC
 
        LD HL,HER_N
 
        INC (HL)
 
        LD A,(HL)
 
        CP 48
 
        JP C,She0
 
        RET
 
 
 
SHED_K  ;К*У*Н*Г*И
 
        LD HL,SIDE_N
 
        INC (HL)
 
        LD A,#C3 ;jp: intel=ON
 
        LD (ZZ00),A
 
         LD A,(DIFFIC)
 
         OR A
 
         JR Z,Ske0x
 
         ;повышенная сложность (DIFFIC=1)
 
         LD A,7
 
         LD (KATrng+1),A ;дальность для катап врага=6
 
         LD A,#C3 ;jp
 
         LD (ARCrng),A ;лучники vs катап=ON
 
Ske0x   ;
 
Ske0    LD A,(IX+1)
 
        OR A
 
        JR Z,Ske1
 
        LD A,(IX+0)
 
        OR A
 
        CALL Z,SheTro
 
        CALL NZ,MOVING
 
Ske1    LD BC,16
 
        ADD IX,BC
 
        LD C,4
 
        ADD IY,BC
 
        LD HL,HER_N
 
        INC (HL)
 
        LD A,(HL)
 
        CP 96
 
        JP C,Ske0
 
        RET
 
 
 
NxtTro  ;след  фаза трупa
 
        DEFB #FF,0,1,2 ,#FF,4,5,6, #FF,9,8, 12,#FF,12,12,12, #FF,#FF
 
SheTro  ;гниение трупов
 
        DEC (IX+3)
 
        JR NZ,ShtRt
 
        LD HL,NxtTro
 
        CALL gPAR
 
        CP #FF
 
        JR NZ,SheT1
 
        LD (IX+1),0
 
        JR ShtRt
 
SheT1   CALL NZ,TrooTi
 
ShtRt   XOR A
 
        RET
 
 
 
;------------обработка пленников
 
SHED_p  ;П*Л*Е*Н*Н*И*К*И
 
        LD A,#C9 ;ret - intel off
 
        LD (ZZ00),A
 
        ;
 
        LD A,(TIC)
 
        DEC A
 
        AND %11
 
        RET NZ ;раз в 4 такта
 
Spe0    LD A,(IX+1)
 
        OR A
 
        JR Z,Spe1
 
        LD A,(IX+0)
 
        OR A
 
        CALL Z,SheTro
 
        CALL NZ,PRISON
 
Spe1    LD BC,16
 
        ADD IX,BC
 
        LD HL,HER_N
 
        INC (HL)
 
        LD A,(HL)
 
        CP 102
 
        JP C,Spe0
 
        RET
 
 
 
isFRND  ;по адр HL в GMAP2 - свой? (вых через POP)
 
        LD A,(HL)
 
        INC L
 
        CP #80
 
        RET C
 
        CP #B0
 
        RET NC
 
        POP AF ;!!
 
        LD C,(IX+5)
 
        LD B,(IX+2)
 
        PUSH IX
 
        PUSH BC
 
        LD A,(HER_N)
 
        CALL deSEL
 
        LD A,(IX+4)
 
        EX AF,AF
 
        CALL HL_IX0
 
        CALL IXt_HL
 
        XOR A
 
        CALL NEWHER
 
        POP BC
 
        JR NZ,iFRn ;mem?
 
        LD (IX+5),C
 
        LD (IX+2),B
 
iFRn    POP IX
 
        RET NZ ;нет памяти
 
        ;звёзды-пленник свободен
 
        PUSH IY
 
        CALL HL_IX0
 
        PUSH HL
 
        LD HL,00
 
        CALL IX0_HL
 
        POP HL
 
        CALL NEWB09
 
        POP IY
 
        JP EVENT
 
 
 
PRISON  LD L,A
 
        LD H,(IX+1)
 
        LD A,(IX+5)
 
        OR A
 
        JR Z,Kill ;убитый
 
        DEC L
 
        DEC H
 
        CALL GMAP2
 
        CALL isFRND
 
        CALL isFRND
 
        CALL isFRND
 
        LD DE,61
 
        ADD HL,DE
 
        CALL isFRND
 
        INC L
 
        CALL isFRND
 
        ADD HL,DE
 
        CALL isFRND
 
        CALL isFRND
 
        CALL isFRND ;!!
 
        RET
 
 
 
;---------------------------
 
KilNxt  DEFB 3,3,3,3,3,3,3,17,3
 
        DEFB 7,7,7,7,7,7,7,17,7
 
        DEFB 13,15,14,11,3,7, 10,10,10
 
Kill    ;убить героя по состоянию здоровья
 
        LD A,(IX+7);проверить магию 'хруст. шара'
 
        AND %11111000
 
        CP  %00010000
 
        JR Z,noKill
 
         ;труп деморализует - убегать?
 
         LD A,(SIDE_N)
 
         OR A
 
         CALL NZ,actRUN
 
        LD A,(HER_N)
 
        CALL deSEL ;отменить пометку
 
        CALL EVENT ;событие
 
        CALL HL_IX0
 
        RES 7,H ;если смерть наступила в здании
 
        CALL IXt_HL
 
        CALL GMAP2
 
        XOR A
 
        LD (HL),A
 
        LD (IX+0),A
 
        LD A,(IX+4)
 
        CP 8
 
        JR Z,Ki33
 
        CP 17
 
        JR NZ,Ki2
 
Ki33    PUSH IY
 
        POP HL
 
        LD A,(HL)
 
        ADD A,4 ;сдвинуть изобр трупа конников
 
        LD (HL),A
 
        JR NC,Ki1
 
        INC HL
 
        INC (HL)
 
Ki1     LD A,(IX+4)
 
Ki2     LD HL,KilNxt ;нач ф гниения
 
        CALL BA
 
        ;
 
TrooTi  ;время гниения фазы A
 
        LD (IX+4),A
 
        LD HL,TimTro
 
        CALL BA
 
        LD (IX+3),A
 
        RET
 
TimTro  ;время гниения фазы
 
        DEFB 50,60,60,70, 50,60,60,70, 1,1,1, 50,40,50,50,50, #1,80
 
 
 
;------------------------------
 
MOVING  ;обр.команд живых людей
 
        LD A,(IX+5)
 
        OR A
 
        JR Z,Kill ;убитый
 
noKill  LD A,(IX+3)  ;
 
        OR A         ;
 
        JR Z,IX3_0   ;
 
        CALL HERMOV  ;
 
        LD A,(IX+3)
 
        OR A
 
        RET NZ
 
IX3_0   LD A,(IX+9)
 
        LD HL,MOVZZ
 
        CALL WT
 
        JP (HL)
 
 
 
;-----параметры удара/защиты--
 
 
 
gB_FRC  ;получить силу снаряда
 
        LD HL,BFORCE-1
 
        LD A,(IY+4)
 
        JP  BA
 
gFORCE  ;получить знач силы удара
 
        LD HL,FORCE
 
gPAR    LD A,(IX+4)
 
        JP BA
 
 
 
gDEFEN  ;получить знач защиты  (Вх/вых: C-удар)
 
        LD HL,DEFENC
 
        CALL gPAR
 
        LD L,A
 
        LD A,R
 
        AND %11
 
        CP L
 
        RET NC
 
        INC C ;уменьш силу удара на 50%
 
        SRA C
 
        RET
 
 
 
;------нанесение ударов ---
 
cMPACT  ;удар катапульты (9клеток)
 
        LD L,(IY+5)
 
        LD H,(IY+6)
 
        PUSH HL
 
        CALL GMAP2
 
        LD A,(HL)
 
        POP HL
 
        CP #38
 
        JR C,ccM0
 
        CP #80
 
        RET C ;при ударе в здание - только в центр
 
ccM0    DEC L
 
        DEC H
 
        LD C,3
 
ccM1    PUSH HL
 
        LD B,3
 
ccM2    PUSH BC
 
        PUSH HL
 
        CALL _sMPAC
 
        POP HL
 
        POP BC
 
        INC L
 
        DJNZ ccM2
 
        POP HL
 
        INC H
 
        DEC C
 
        JR NZ,ccM1
 
        RET Z
 
 
 
buPACT  ;удар по зданию
 
        CALL gFORCE
 
        LD C,A
 
        PUSH IX
 
        LD IX,(en_IX)
 
_uPACT  ;уменьш энергии здания на С/8 .. (C+7)/8
 
        LD A,R
 
        AND #7
 
        ADD A,C
 
        LD C,A
 
        SRL C
 
        SRL C
 
        SRL C
 
        LD A,(IX+3)
 
        SUB C
 
        JR NC,smpi0
 
        XOR A
 
smpi0   LD (IX+3),A
 
         LD A,(HER_N) ;on индик0|3
 
          LD D,A
 
         AND #7F
 
         CP #30
 
         LD A,1
 
         JR NC,smpi31
 
         LD (LED+3),A
 
          LD A,R
 
          AND %1111
 
          CALL Z,HELPme ;обижают здание врага
 
          JR smpi3
 
smpi31   LD (LED+0),A
 
smpi3   POP IX
 
        RET
 
 
 
sMPACT  ;огн.дождь наносит удар
 
        LD L,(IY+5)
 
        LD H,(IY+6)
 
_sMPAC  LD A,(IY+7)
 
        LD (HER_N),A
 
        CALL GMAP2
 
        LD A,(HL)
 
        CP #80
 
        JR C,smpp1
 
        SUB #80 ;для врагов
 
        JR IMPB_
 
smpp1   CP 2
 
        RET C ;нельзя атаковать бордюр
 
        SUB #38
 
        JR C,smww1
 
smpp2   ;(для враж.зданий)
 
        display "sMPACT=",sMPACT
 
        display "smpp2=",$
 
        PUSH IX
 
        CALL B_IX
 
        LD (en_IX),IX ;/для FX
 
        CALL gB_FRC
 
        LD C,A
 
        JR _uPACT
 
        ;
 
smww1   ;возможно стена (видимая)
 
        RES 4,H
 
        LD A,(HL)
 
        AND #7F
 
        CP 64
 
        RET C
 
        CP 78
 
        RET NC
 
        CP 71
 
        JR C,smww2
 
        CALL RND
 
        RLCA
 
        RET NC ;50%
 
        LD DE,64
 
        PUSH HL
 
        ADD HL,DE ;удалить хвостик забора
 
        LD A,(HL)
 
        AND #7F
 
        CP 51
 
        JR NZ,smww3
 
        LD A,(HL)
 
        SUB 50
 
        LD (HL),A
 
smww3   POP HL
 
        LD DE,-64
 
        LD C,1
 
        PUSH HL ;если сверху забор - поставить хвостик
 
        ADD HL,DE
 
        LD A,(HL)
 
        AND #7F
 
        CP 64
 
        JR C,smww4
 
        CP 78
 
        JR NC,smww4
 
        LD C,51
 
smww4   POP HL
 
        LD A,(HL)
 
        AND #80
 
        ADD A,C
 
        LD (HL),A ;добить полуразрушенную
 
        SET 4,H
 
        LD (HL),0
 
        RET
 
smww2   CALL RND ;частично разрушить
 
        RLCA
 
        RET C ;50%
 
        LD A,(HL)
 
        ADD A,7
 
        LD (HL),A
 
        RET
 
 
 
BMPACT  ;пуля наносит удар
 
        LD A,(IY+7)
 
        LD (HER_N),A
 
        CALL N_IX
 
        LD A,(IY+5)
 
        BIT 7,A
 
        JR NZ,smpp2
 
IMPB_   PUSH IX
 
        LD (en_A),A
 
        CALL N_IX
 
        LD (en_IX),HL
 
        CALL gB_FRC
 
        LD C,A
 
        JR IMPA_
 
        ;
 
IMPACT  ;наносится удар
 
        LD A,(en_A)
 
        CP #80       ;здание?
 
        JP NC,buPACT
 
        ;наносится удар врагу (en_IX)
 
        ;c учётом защиты
 
        CALL RND
 
        AND 7
 
        JR Z,ipt0 ;1/8 - промах
 
        CALL gFORCE
 
ipt0    LD C,A
 
        PUSH IX
 
        ;учесть защиту
 
        LD IX,(en_IX)
 
IMPA_   CALL gDEFEN     ; - защита
 
        ;понизить здоровье
 
        LD A,(IX+5)
 
        SUB C
 
        JR NC,ipt1
 
        XOR A
 
ipt1    LD (IX+5),A
 
        POP IX
 
        ;следует ли отвечать потерпевшему?
 
        RET Z ;трупы не отвечают
 
        LD A,(en_A)
 
        CP #30
 
        LD A,(HER_N)
 
        JR NC,K_ANSW
 
        ;ударили нашего
 
        CP #30
 
        RET C ;ударил наш нашего
 
        PUSH IX
 
        LD IX,(en_IX)
 
        CP #80
 
         LD A,1
 
         LD (LED+0),A ;индик0 on
 
        JR C,H_ANSW
 
        ; ударило заклинание - убегать
 
        LD A,(IX+9)
 
        CP 2
 
        JR Z,ipt11 ;уже убегает
 
        LD A,R
 
        RRCA ;in 50%
 
        CALL C,R_away
 
        JR ipt11
 
H_ANSW  ; ответн удар нашего
 
        CALL _ANSW
 
        CALL HL_IX0
 
        DEC L
 
        DEC H
 
        CALL GMAP2
 
        CALL ANSW1
 
        CALL ANSW1
 
        CALL ANSW1
 
        LD DE,61
 
        ADD HL,DE
 
        CALL ANSW1
 
        INC L
 
        CALL ANSW1
 
        ADD HL,DE
 
        CALL ANSW1
 
        CALL ANSW1
 
        CALL ANSW1
 
ipt11   POP IX
 
        RET
 
K_ANSW  ;ответ врага
 
        AND #7F ;%1...
 
        CP #30
 
        RET NC ;враг ударил врага
 
         LD A,1
 
         LD (LED+3),A ;индик3 on
 
        CALL HL_IX0
 
        PUSH IX
 
        LD IX,(en_IX)
 
        LD A,(IX+9)
 
        CP 4
 
        JR NZ,kans2
 
        ;cравнить с текущей целью и ударить
 
        CALL DIST2 ;до нового обидчика+1
 
        INC A
 
        LD C,A
 
        CALL HL_IXt
 
        CALL DIST2 ;до старой цели
 
        CP C
 
        JR C,ipt11
 
        CALL answ10
 
        JR ipt11
 
kans2   CALL answ09
 
        JR ipt11
 
 
 
 
 
ANSW1   ;по адр HL в GMAP2 - свой? (вых через POP)
 
        LD A,(HL)
 
        INC L
 
        SUB #80
 
        RET C  ;нет (здание)
 
        CP #30
 
        RET NC ;нет (чужак)
 
        EXX ;сохр hl
 
        CALL N_IX
 
_ANSW   ;направить ответный удар на обидчика (HER_N)
 
        LD A,(IX+9)
 
answ09  LD HL,impANS
 
        CALL BA
 
        OR A
 
        JR Z,answ11 ;возможен ответ на удар?
 
        LD (IX+9),A
 
answ10  LD A,(HER_N)
 
        AND #7F  ;%1...
 
        LD (IX+12),A
 
        LD (IX+8),#80
 
        CALL HL_IX0
 
        CALL IXt_HL
 
answ11  EXX
 
        RET
 
 
 
 
 
;ZZxx-----собств обработка
 
ZZ0     ;cтоять
 
        CALL ZZsee0
 
        JP ZZ00 ;вызов интеллекта врагов
 
ZZ1     ;стоять насмерть
 
        CALL ZZsee0
 
        RET
 
 
 
ZZsee0  LD A,#FF ;осмотреться после останова
 
        CP (IX+8)
 
        RET Z
 
        LD (IX+8),A
 
        JP ONSEE
 
 
 
ZZ27    ;капульта атакует пустое место
 
        LD HL,WW07
 
        LD (JP_SUB+1),HL
 
        CALL HL_IXt
 
        JP ZZ4_
 
ZZ3     ;идти в атаку
 
ZZ2     ;просто идти
 
        CALL GO_MAN
 
        LD A,(IX+8)
 
        OR A
 
        JP NZ,ONSEE2
 
        LD (IX+9),A
 
        RET Z
 
 
 
WATACK  ;адреса П/П обработки
 
        DEFW WW00,WW01,WW02,WW03,WW04,WW05,WW06,WW07,WW08
 
        DEFW WW09,WW10,WW11,WW12,WW13,WW14,WW15,WW16,WW17
 
        DEFW WW18,WW19,WW20,WW21,WW22,WW23,WW24,WW25,WW26
 
 
 
ZZ26    ;Атака на цель, не покидая позиции
 
        ;\
 
ZZ28    ;Атака на цель, которая м.быть прервана
 
        ;\
 
ZZ4     ;Атака на цель
 
        LD A,(IX+4)
 
        LD HL,WATACK
 
        CALL WT
 
        LD (JP_SUB+1),HL
 
        LD A,(IX+12)
 
        ;атака на врага
 
        PUSH IX
 
        LD (en_A),A
 
        BIT 7,A
 
        JR Z,ZZ4a
 
        CALL B_IX ;параметры вражеского здания
 
        LD (en_IX),IX
 
        CALL HL_IX0
 
        POP IX
 
        CALL DIST_H
 
        LD B,A
 
        JR ZZ4b
 
ZZ4a    CALL N_IX ;параметры врага
 
        LD (en_IX),HL
 
        CALL HL_IX0
 
        POP IX
 
        BIT 7,H
 
        JR NZ,IX_98a ;враг в здании
 
ZZ4_    CALL DIST2
 
        LD B,A
 
ZZ4b    LD A,L
 
        AND A
 
        JR Z,IX_98a ;враг мёртв
 
        LD A,B
 
        ;в A-дистанция, в HL-коорд цели
 
        CALL JP_SUB ;!! м.быть вых.через POP, если враг рядом (оружие применено)
 
        LD A,(IX+9)
 
        CP 26
 
        JR Z,ZZ4_26
 
        PUSH HL ;преследовать,ecли цель далеко
 
        CALL GO_MAN
 
        POP HL
 
        CALL IXt_HL  ; "я умный!"
 
        LD A,(IX+8)
 
        OR A
 
        JP NZ,ONSEE2
 
        LD (IX+8),#80
 
        CALL GO_MAN
 
        LD A,(IX+8)
 
        OR A
 
        JP NZ,ONSEE2
 
        ;цель слишком далеко и дороги к ней нет
 
        ;
 
IX_98a  LD A,(IX+9)
 
        CP 26
 
        JP NZ,IX_98
 
ZZ4_26  ;конец атаки на месте (26)
 
        ;если цель мертва или далеко - снова стоять насмерть
 
        CALL IX_98
 
        INC (IX+9)
 
        RET
 
 
 
 
 
;WWxx - обработка действия 4 - атака
 
;........................
 
WW09    ;пеоны
 
WW10
 
WW11
 
WW00    ;крестьяне
 
WW01
 
WW02    LD A,(SIDE_N)
 
        OR A
 
        JR Z,R_away
 
        LD A,(DIFFIC)
 
        OR A
 
        JR Z,R_away
 
        LD HL,(pntX) ;бежать к точке сбора
 
        CALL IXt_HL
 
        JP IX_92
 
R_away  LD (IX+9),2 ;убегать случайно
 
R_awa_  LD (IX+8),#80
 
        LD C,(IX+0)
 
        CALL RNDshf
 
        LD (IX+10),A
 
        LD C,(IX+1)
 
        CALL RNDshf
 
        LD (IX+11),A
 
        RET
 
 
 
RNDshf  CALL RND ;нов коорд при убегании (C->A)
 
        AND %1111
 
        SUB 7 ;-7..8
 
        ADD A,C
 
        CP 63
 
        JR NC,RNDshf
 
        RET
 
 
 
WW22    ;князь
 
WW23    ;гризольда
 
        LD (IX+9),0
 
        RET
 
;........................
 
WW13    ;кунг
 
WW17    ;грюнвер
 
WW18    ;паук
 
WW19    ;скелет
 
WW20    ;скорп
 
WW21    ;звезда
 
WW24    ;костолом
 
WW25    ;демон
 
WW08    ;всадник
 
WW04    ;воин
 
        CP 2 ;дальность оружия
 
        RET NC
 
        EX DE,HL ;применить оружие
 
        CALL HL_IX0
 
        CALL DIR
 
        LD (IX+2),A
 
        CALL IMPIX3
 
        LD (IX+8),0
 
        CALL IMPACT
 
        POP AF
 
        JP ONSEE ;надо бы один раз :(
 
 
 
;........................
 
WW03    ;лучник
 
        LD C,A
 
        LD A,(sRANGE+3)
 
        INC A
 
        INC A
 
        CALL ARCrng
 
        CP C
 
        RET C
 
        CALL WWFire
 
        CALL NEWB01
 
        POP HL ;dec sp
 
        RET
 
 
 
WW12    ;лангольер c луком
 
        LD C,A
 
        LD A,(sRANGE+12)
 
        INC A
 
        INC A
 
        CALL ARCrng
 
        CP C
 
        RET C
 
        CALL WWFire
 
        CALL NEWB02
 
        POP HL ;dec sp
 
        RET
 
 
 
ARvsKT  ;лучники врага против наших катап (если да и DIFFIC=1, то A=2)
 
        PUSH AF
 
        LD A,(IX+12)
 
        BIT 7,A
 
        JR NZ,arv1
 
        PUSH IX
 
        PUSH HL
 
        CALL N_IX
 
        LD A,(IX+4)
 
        POP HL
 
        POP IX
 
        CP 7
 
        JR Z,arv2
 
        CP 16
 
        JR Z,arv2
 
arv1    POP AF ;норм дист
 
        RET
 
arv2    POP AF
 
        LD A,2 ;катап - короткая дистанция
 
        RET
 
 
 
WWFire  EX DE,HL ;подготовиться применить оружие
 
        PUSH DE
 
        CALL HL_IX0
 
        PUSH HL
 
        CALL DIRF
 
        LD (IX+2),A
 
        CALL Z,ONSEE ;надо бы один раз :(
 
        POP HL
 
        CALL IMPIX3
 
        LD (IX+8),0
 
        POP DE
 
        RET
 
 
 
WW14    ;\
 
WW05    ;свящ/некром
 
        CP 3
 
        RET NC
 
        CALL WWmana
 
        CALL WWFire
 
        CALL NEWB03
 
        JR WW06a
 
WW15    ;\
 
WW06    ;волш/варлок
 
        CP 5
 
        RET NC
 
        CALL WWmana
 
        CALL WWFire
 
        CALL newb05
 
WW06a    LD A,6      ;FX
 
         CALL SOUNDn ;
 
        POP HL;dec sp
 
        RET
 
 
 
WWmana  ;уменьш маны при стрельбе (no mana - 2xPOP,RET)
 
        LD A,(IX+6)
 
        SUB 3 ;декремент mana
 
        JR C,WWma1
 
        LD (IX+6),A
 
        RET
 
WWma1   POP HL ;!!
 
        POP DE ;!!
 
        RET
 
 
 
WW16    ;\
 
WW07    ;катапульта
 
        CALL KATrng
 
        RET NC
 
        CP 3
 
        LD A,(SIDE_N)
 
        JR C,WW07b
 
        ;(проверь вокруг)
 
        OR A
 
        JR NZ,WW07d
 
        ;наша кат не порань наших
 
        BIT 7,(IX+12)
 
        JR NZ,WW07c
 
        PUSH HL
 
        CALL humOWN ;nz - можно стрелять
 
        POP HL
 
        JR NZ,WW07c
 
        JR Z,WW07a1 ;смени цель
 
WW07d   ;враг не порань врага
 
        BIT 7,(IX+12)
 
        JR NZ,WW07c  ;огонь по зданию
 
        PUSH HL
 
        CALL kunOWN ;C - можно стрелять
 
        POP HL
 
        CALL NC,IX_98
 
        JR NC,WW07a ;cмени цель
 
WW07c   CALL WWFire
 
        CALL NEWB06
 
        CALL onsee2
 
          LD A,4      ;FX
 
          CALL SOUNDn ;
 
        LD A,(IX+9)
 
        CP 27 ;режим одиночного выстрела?
 
WW07a1  CALL Z,IX_98a
 
WW07a   POP HL ;dec sp
 
        RET
 
WW07b   OR A
 
        JR Z,WW07a
 
        LD A,(IX+8)
 
        OR A
 
        RET NZ
 
        JP R_awa_ ;вражеская катапульта умеет отъезжать
 
 
 
WW26    ;стеногр
 
        CP 4
 
        RET NC
 
        CALL WWFire
 
        CALL NEWB07
 
         LD A,5         ;FX
 
         CALL SOUNDn    ;
 
        POP DE ;dec sp
 
        RET
 
 
 
;---ix+9-ф-ции-крестьян---
 
ZZ5     ;идти на базу
 
        CALL HL_IXt
 
        CALL DIST2
 
        CP 3
 
        JP NC,ZZ2
 
        CALL GMAP
 
        LD A,(HL)
 
        AND #7F
 
        ;база ещё не разрушена?
 
        CP 86
 
        JR Z,ZZ5a
 
        CP 100
 
        JP NZ,IX_98
 
ZZ5a    ;чья база?
 
        LD A,(SIDE_N)
 
        OR A
 
        JR Z,ZZ5hum
 
        ;кунгов
 
        CALL deGRUZ
 
        ;(принять ресурсы врага)
 
        JR ZZ5ex
 
ZZ5hum  ;людей
 
        CALL deGRUZ
 
        LD DE,#100
 
        PUSH AF
 
        CALL Z,aWOOD
 
        POP AF
 
        CALL NZ,aMONEY
 
ZZ5ex   LD (IX+9),24
 
        LD (IX+3),#80+10;время нахожд. на базе
 
ZZ57    CALL HL_IX0
 
        CALL GMAP2
 
        LD (HL),0
 
        LD A,(HER_N)
 
        CALL deSEL
 
        CALL EVENT
 
        JP unseeM
 
 
 
 
 
deGRUZ  ;разгрузить (Z/NZ - был лес/золото)
 
        LD A,(IX+4)
 
        CP 9
 
        JR C,dgu1
 
        SUB 9
 
dgu1    DEC A
 
        RET
 
 
 
ZZ6     ;идти за лесом
 
ZZ61    CALL GO_MAN
 
        LD A,(IX+8)
 
        OR A
 
        PUSH AF
 
        CALL NZ,ONSEE2
 
        POP AF
 
        JR Z,ZZ6A
 
        BIT 7,(IX+3)
 
        RET Z
 
        CALL HL_IXt
 
        CALL DIST2
 
        CP 6 ;макс дистанция до леса
 
        RET NC
 
ZZ6A    ;есть ли рядом лес?
 
        LD (IX+3),0
 
        LD A,(IX+2)
 
        CALL isTREE
 
        JR C,ZZ6B ;он перед носом
 
        LD B,8
 
ZZ6a1   LD A,B
 
        DEC A
 
        CALL isTREE
 
        JR C,ZZ6B_
 
        DJNZ ZZ6a1
 
        ;поискать поблизости
 
        LD BC,60*256+8
 
ZZ6a2   LD A,C
 
        CALL isTREE
 
        JR C,ZZ6a4
 
ZZ6a6   INC C
 
        DJNZ ZZ6a2
 
        ;не нашли - стоп
 
        JP IX_98
 
ZZ6a4   LD A,C ;нашли рядом - идти
 
        LD HL,GO_Ntb
 
        CALL WT
 
        LD A,(IX+0)
 
        ADD A,L
 
        LD L,A
 
        CP 63
 
        JR NC,ZZ6a6 ;вне карты
 
        LD A,(IX+1)
 
        ADD A,H
 
        LD H,A
 
        CP 63
 
        JR NC,ZZ6a6 ;вне карты
 
        CALL IXt_HL
 
        LD (IX+8),#80
 
        CALL GO_MAN
 
        LD A,(IX+8) ;перед лесом препятствие
 
        OR A
 
        JP Z,IX_98
 
        RET NZ
 
ZZ6B_   DEC B
 
        LD (IX+2),B
 
ZZ6B    ;приступить к рубке леса
 
        CALL ONSEE
 
        LD (IX+9),25
 
        LD (IX+8),0
 
        LD A,(BrWOOD) ;кол_во ударов по дереву
 
        LD (IX+12),A
 
        RET
 
 
 
ZZ7     ;идти за золотом в шахту
 
        CALL HL_IXt
 
        CALL DIST2
 
        CP 3
 
        JP NC,ZZ2
 
        CALL GMAP
 
        LD A,(HL)
 
        AND #7F
 
        ;шахта ещё не разрушена?
 
        CP 78
 
        JP NZ,IX_98
 
ZZ7a    ;вычет денег из шахты
 
        SET 4,H
 
        PUSH IX
 
        LD A,(HL)
 
        SUB #38
 
        CALL B_IX
 
        LD L,(IX+4)
 
        LD H,(IX+5)
 
        DEC HL
 
        LD (IX+4),L
 
        LD (IX+5),H
 
        LD A,L
 
        OR H
 
        JR NZ,ZZ7b
 
        LD (IX+3),A ;разрушЬ шахту
 
ZZ7b    CALL HL_IX0
 
        POP IX
 
        LD (IX+14),L ;запомнить коорд шахты
 
        LD (IX+15),H
 
        LD (IX+9),23
 
        LD (IX+3),#80+15;время нахожд. в шахте
 
        JP ZZ57
 
 
 
ZZ8     ;идти на стр-во
 
        CALL DISTpH
 
        ;подошли к зданию?
 
        CP 2
 
        JP NC,ZZ2
 
        ;начать стройку/ремонт
 
        PUSH IX
 
        CALL HL_IXt
 
        CALL GMAP2
 
        LD A,(HL)
 
        SUB #40 ;шахты не чинить
 
        JR C,ZZ8_0
 
        CP 64
 
        JR NC,ZZ8_0
 
        ADD A,8
 
        CALL B_IX
 
        LD A,(IX+0)
 
        OR A
 
        JR NZ,ZZ8_1
 
        ;здания нет
 
ZZ8_0   POP IX
 
        JP IX_98
 
ZZ8_1   LD A,(IX+4)
 
        CP 253
 
        JR Z,ZZ8_2
 
        CP 254
 
        JR Z,ZZ8_2
 
        ;ремонт
 
        LD A,(IX+2)
 
        LD HL,bHEALT
 
        CALL BA
 
        CP (IX+3)
 
        JR Z,ZZ8_0 ;ремонт не нужен
 
        LD A,(SIDE_N)
 
        OR A
 
        JR NZ,ZZ8k ;для врага - бесплатно
 
        LD DE,#02
 
        LD BC,#03
 
        CALL dMN_WD ;для наших - уменьшить MN/WD
 
        JP C,ZZ8n
 
ZZ8k    INC (IX+3)
 
        POP IX
 
        CALL HL_IXt ;направить удар ремонтника
 
        EX DE,HL
 
        CALL HL_IX0
 
        CALL DIR
 
        LD (IX+2),A
 
        JP IMPIX3
 
ZZ8n    POP IX;нет средств на ремонт
 
         if EGA
 
         push ix
 
         endif
 
        CALL nMN_WD ;при EGA портит ix!!!
 
         if EGA
 
         pop ix
 
         endif
 
        JP IX_98
 
ZZ8_2   ;cтройка
 
        LD A,(IX+7)
 
        INC A
 
        JR NZ,ZZ8_0 ;строитель уже есть
 
        LD A,(HER_N)
 
        LD (IX+7),A
 
        POP IX
 
        CALL HL_IX0
 
        CALL GMAP2
 
        LD (HL),0
 
        CALL HL_IXt
 
        CALL IX0_HL
 
        LD (IX+9),22
 
unseeM  ;сделать человека невидимым
 
        SET 7,(IX+1)
 
        SET 7,(IY+1)
 
        RET
 
 
 
DISTpH  ;расст до здания для крестьян
 
        CALL HL_IXt
 
DIST_H  CALL DIST2 ;-""- для воинов
 
        CP 3
 
        RET NC
 
        PUSH HL
 
        PUSH AF
 
        CALL GMAP2
 
        LD A,(HL)
 
        SUB #38
 
        PUSH IX
 
        CALL B_IX
 
        CALL HL_IX0
 
        LD A,(IX+2)
 
        POP IX
 
        CP 8
 
        JR Z,ddp1
 
        CP 18
 
        JR Z,ddp1
 
ddp_0   POP AF
 
        POP HL
 
        DEC A
 
        RET
 
ddp1    LD A,L
 
        CP (IX+0)
 
        JR C,ddp_1
 
        LD A,H
 
        CP (IX+1)
 
        JR NC,ddp_0
 
ddp_1   POP AF
 
        POP HL
 
        RET
 
 
 
;----допустимость применения магии---
 
 
 
ZZddin  ;опред дистанции до движ цели
 
        LD A,(IX+12)
 
        PUSH IX
 
        CALL N_IX ;параметры врага
 
        LD (en_IX),HL
 
        CALL HL_IX0
 
        POP IX
 
        CALL IXt_HL
 
        LD A,L
 
        OR A
 
        JR Z,_ex98 ;цель погибла
 
        BIT 7,H
 
        JR NZ,_ex98 ;цель в здании
 
        CALL DIST2
 
        JR ZZd1
 
 
 
ZZdist  CALL HL_IXt ;опредление дистанции
 
        CALL DIST2
 
        OR A
 
        JR Z,_ex98
 
ZZd1    CP 9 ;дистанция до объекта магии-1
 
        RET C
 
        POP HL ;!!
 
        JP NC,ZZ2 ;цель далеко
 
 
 
isMANA  ;есть волш энергия? (С)
 
        LD A,(IX+6)
 
        SUB C
 
        JR C,noMANA
 
        LD (IX+6),A
 
        RET
 
noMANA  LD A,(SIDE_N)
 
        OR A
 
        CALL Z,pb07
 
_ex98   POP HL ;!!
 
        JP IX_98
 
 
 
;------ix+9---магия волш-------
 
 
 
ZZ12    ;cтеногрыз
 
        LD BC,MANA-1+#1A00
 
        JR ZZ10a
 
ZZ13    ;паук
 
        LD BC,MANA/4+#1200
 
        JR ZZ10a
 
ZZ15    ;демон
 
        LD BC,MANA-1+#1900
 
        JR ZZ10a
 
 
 
ZZ10    ;cкорп
 
        LD BC,MANA/4+#1400
 
ZZ10a   ;пров. возможность
 
        LD A,(IX+6)
 
        SUB C
 
        JP C,IX_98
 
        LD (IX+6),A
 
        ;родить чудище
 
        PUSH IX
 
        PUSH IY
 
        LD A,B
 
        EX AF,AF
 
        CALL HL_IX0
 
        CALL stayON
 
        CALL NEWB09 ;звёзды
 
        LD A,(SIDE_N)
 
        CALL NEWHER
 
        JR NZ,ZZ10b ;mem?
 
        LD (IX+13),3;чудище->в атаку
 
        CALL HL_IX0
 
ZZ10b   POP IY
 
        POP IX
 
        JP NZ,IX_98 ;нет памяти
 
        JR ZZ_En2
 
 
 
ZZ14    ;смерч
 
        CALL ZZdist
 
        LD A,(TIC)
 
        AND 7
 
        RET NZ
 
        LD C,MANA/6
 
        CALL isMANA
 
        CALL NEWB12
 
        CALL HL_IXt
 
        JR ZZ_En2
 
 
 
ZZ11    ;огненый дождь
 
        CALL ZZdist
 
        LD C,MANA/14 ;часть дождя
 
        CALL isMANA
 
        PUSH IY
 
        EX DE,HL
 
        LD B,4 ;кол-во дождинок
 
ZZ11a   CALL RND
 
        RRA
 
        LD C,31 ;в 50% - более точное прицеливание
 
        JR C,ZZ11c
 
        LD C,63
 
ZZ11c   CALL RND
 
        AND C
 
        LD HL,GO_Ntb
 
        CALL WT
 
        LD A,L
 
        ADD A,E
 
        CP 63
 
        JR NC,ZZ11b
 
        LD L,A
 
        LD A,H
 
        ADD A,D
 
        CP 63
 
        JR NC,ZZ11b
 
        LD H,A
 
        CALL NEWB08
 
ZZ11b   DJNZ ZZ11a
 
        POP IY
 
        CALL HL_IXt
 
        JR ZZ_En2
 
 
 
 
 
ZZ_EnV  LD HL,(PX)
 
ZZ_End  ;конец действия
 
        CALL IX_98
 
ZZ_En2  ;HL-напр колд
 
        EX DE,HL
 
        CALL HL_IX0
 
        CALL DIR_F
 
        LD (IX+2),A
 
        JP IMPIX3
 
 
 
 
 
;------магия свящ
 
 
 
ZZ16    ;дать здоровье
 
        CALL ZZddin
 
        LD A,(IX+6)
 
        CP MANA/32 ;нижний придел
 
        JP C,IX_98
 
        LD HL,(en_IX)
 
        LD DE,4
 
        ADD HL,DE
 
        LD A,(HL) ;тип объекта
 
        INC HL
 
        EX DE,HL
 
        LD HL,HEALTH
 
        CALL WA
 
        LD C,A
 
        EX DE,HL
 
        LD A,(HL) ;текущ здоровье
 
        CP C
 
        JR NC,ZZ_EnV
 
        LD B,64 ;количество попыток передачи здоровья
 
ZZ16a   LD A,(HL)
 
        CP C
 
        JR NC,ZZ16b ;уже полностью здоров
 
        LD A,(IX+6)
 
        SUB 2
 
        JR C,ZZ16b ;кончилась мана
 
        LD (IX+6),A
 
        INC (HL) ;добавить здоровья (1HP for 2MANA)
 
        DJNZ ZZ16a
 
ZZ16b   PUSH IY
 
        LD HL,(en_IX);звёздочки
 
        LD A,(HL)
 
        INC HL
 
        LD H,(HL)
 
        LD L,A
 
        PUSH HL
 
        CALL NEWB09
 
        POP HL
 
        POP IY
 
        JR ZZ_End
 
 
 
ZZ20    ;чёрное зрение
 
ZZ17    ;белое зрение
 
        LD HL,(PX)
 
        PUSH HL
 
        CALL GMAP
 
        LD A,(HL)
 
        POP HL
 
        OR A
 
        JP Z,IX_98 ;на границе
 
        LD C,MANA/2
 
        CALL isMANA
 
        PUSH IY
 
        PUSH HL
 
        CALL ONSEEm
 
        POP HL
 
        PUSH HL
 
        INC L
 
        ;звёзды
 
        CALL NEWB09
 
        POP HL
 
        PUSH HL
 
        DEC L
 
        CALL NEWB09
 
        POP HL
 
        PUSH HL
 
        INC H
 
        CALL NEWB09
 
        POP HL
 
        DEC H
 
        CALL NEWB09
 
        POP IY
 
        JP ZZ_EnV
 
 
 
ZZ19    ;оживление скелетов
 
        CALL ZZdist
 
        JP NC,ZZ2
 
        LD (ZZ_tar),HL
 
        LD HL,HUMAN
 
        LD B,102
 
ZZ19a   LD A,(HL)
 
        OR A
 
        JR NZ,ZZ19b
 
        INC L
 
        LD A,(HL)
 
        DEC L
 
        OR A
 
        JR Z,ZZ19b
 
        LD A,(IX+6) ;маны достаточно?
 
        CP MANA/4
 
        JR C,ZZ19x
 
        PUSH BC
 
        PUSH HL
 
        PUSH IX
 
         PUSH HL
 
         POP IX
 
        LD A,(IX+4)
 
        CP 8 ;труп оживляем (0..7) ?
 
        JR NC,ZZ19c
 
        LD HL,(ZZ_tar)
 
        CALL DIST
 
        CP 4 ;радиус оживления -1
 
        JR NC,ZZ19c
 
        ;убрать труп
 
        LD (IX+1),0
 
        ;поднять скелета
 
        PUSH IY
 
        CALL HL_IXt
 
        CALL stayON
 
        CALL NEWB09 ;звёзды
 
        LD A,19
 
        EX AF,AF
 
        LD A,(SIDE_N)
 
        CALL NEWHER
 
        JR NZ,ZZ19z ;нет памяти
 
        LD (IX+13),3
 
ZZ19z   POP IY
 
        POP IX
 
        LD A,(IX+6)
 
        SUB MANA/4
 
        LD (IX+6),A
 
        JR ZZ19d
 
ZZ19c   POP IX
 
ZZ19d   POP HL
 
        POP BC
 
ZZ19b   LD DE,16
 
        ADD HL,DE
 
        DJNZ ZZ19a
 
ZZ19x   ;мана кончилась
 
        LD HL,(ZZ_tar)
 
        JP ZZ_End
 
 
 
 
 
ZZ18    ;огн пояс
 
        LD A,%00001000 ;(1)
 
        JR ZZ21a
 
ZZ21    ;хруст сфера
 
        LD A,%00010000 ;(2)
 
ZZ21a   EX AF,AF
 
        CALL ZZddin
 
        LD C,MANA-1
 
        CALL isMANA
 
        PUSH IX
 
        LD HL,(en_IX)
 
        LD DE,7
 
        ADD HL,DE
 
        POP IX
 
        LD A,(HL)
 
        AND %11111000
 
        JP NZ,IX_98 ;уже есть заклинание
 
        EX AF,AF
 
        LD C,A
 
        LD A,(HL)
 
        AND %00000111
 
        OR C
 
        LD (HL),A
 
        LD A,C
 
        CP %00001000
 
        LD C,14
 
        JR Z,ZZ21b
 
        DEC C
 
ZZ21b   CALL NEWB14
 
        JP Z,ZZ16b
 
        LD A,(HL) ;неудача - нет места
 
        AND %111
 
        LD (HL),A
 
        JP ZZ16b
 
 
 
;-----ix+9---крестьяне работают---------------
 
ZZ22    ;строит дом
 
        RET ;none
 
ZZ23    ;выйти из шахты
 
        INC (IX+4)
 
        INC (IX+4)
 
        LD C,5
 
        CALL basOUT
 
        JP basTAR
 
 
 
ZZ24    ;выйти из базы
 
        LD A,(IX+4)
 
        LD C,6
 
        CP 9
 
        JR NC,ZZ24a
 
        LD (IX+4),0
 
        DEC A
 
        JR ZZ24ex
 
ZZ24a   LD (IX+4),9
 
        SUB 10
 
ZZ24ex  JR Z,ZZ24c
 
        INC C
 
ZZ24c   ;\
 
basOUT  ;выйти из базы/шахты (C-нов действие)
 
        LD (IX+9),C
 
        LD (IX+8),#80
 
        LD A,(IX+2) ;развернись
 
        ADD A,4
 
        AND 7
 
        LD (IX+2),A
 
        ;попробуй выйти, где вошёл
 
        RES 7,(IX+1)
 
        RES 7,(IY+1)
 
        CALL HL_IX0
 
        CALL GMAP2
 
        LD A,(HL)
 
        OR A
 
        JR Z,bos11
 
        ;найти другую позицию
 
        CALL HL_IXt
 
        CALL stayON
 
        CALL IX0_HL
 
        PUSH HL
 
        XOR A
 
        CALL NEWiy_
 
        POP HL
 
        CALL GMAP2
 
bos11   LD A,(HER_N)
 
        ADD A,#80
 
        LD (HL),A
 
        LD L,(IX+14)
 
        LD H,(IX+15)
 
        JP IXt_HL
 
 
 
 
 
ZZ25    ;pубит лес
 
        LD A,(IX+2)
 
        CALL isTREE
 
        JR NC,noWOOD
 
        DEC (IX+12)
 
        ;удар по дереву
 
        JP NZ,IMPIX3
 
ZZ25a   ;повалить дерево
 
        CALL deTREE
 
        CALL HL_IXt
 
        LD (IX+14),L
 
        LD (IX+15),H
 
        LD A,(LEV_T)
 
        OR A
 
        JP NZ,IX_98 ;для подземелий
 
        ;идти на базу
 
        CALL basTAR
 
        INC (IX+4)
 
        JP EVENT
 
noWOOD  ;нет леса перед носом
 
        LD (IX+9),6
 
        LD (IX+8),#80
 
        RET
 
 
 
basTAR ;найти базу и направить на неё
 
        CALL HL_IX0
 
        LD C,#FF ;миним расст
 
        PUSH IX
 
        LD B,32
 
        LD DE,8
 
        LD IX,HBUILD
 
        LD A,(SIDE_N)
 
        OR A
 
        JR Z,bst0
 
        LD IX,KBUILD
 
bst0    LD A,(IX+2)
 
        ;это база?
 
        OR A
 
        JR Z,bst1
 
        CP 10
 
        JR NZ,bst2
 
        ;расст меньше минимального?
 
bst1    LD A,(IX+0)
 
        OR A
 
        JR Z,bst2
 
        PUSH BC
 
        CALL DIST2
 
        POP BC
 
        CP C
 
        JR NC,bst2
 
        LD C,A
 
        LD (en_IX),IX
 
bst2    ADD IX,DE
 
        DJNZ bst0
 
        LD A,C
 
        CP #FF
 
        JR NZ,bstt
 
        ;некуда идти
 
        POP IX
 
        JP IX_98
 
bstt    ;идти на ближайшую базу
 
        LD IX,(en_IX)
 
        CALL HL_IX0
 
        POP IX
 
        CALL IXt_HL
 
        LD (IX+9),5
 
        LD (IX+8),#80
 
        RET
 
 
 
isTREE  ;в направлении A - дерево? (С-да/NC-нет)
 
        LD HL,GO_Ntb
 
        CALL WT
 
        LD A,(IX+0)
 
        ADD A,L
 
        LD L,A
 
        LD A,(IX+1)
 
        ADD A,H
 
        LD H,A
 
isTRE_  CALL GMAP
 
        LD A,(HL)
 
        AND #7F
 
        SUB 61  ;деревья 61,62,63
 
        CP 3
 
        RET
 
 
 
deTREE  ;повалить дерево ;HL-адр в мап
 
        LD A,(HL)
 
        LD C,A
 
        AND #80
 
        ADD A,6
 
        LD (HL),A
 
        CALL deT1
 
        LD A,C
 
        AND #7F
 
        CP 62
 
        JR C,deTTOP
 
        JR Z,deTMID
 
deTBOT  LD DE,-64 ;низ
 
        ADD HL,DE
 
        LD A,(HL)
 
        OR A
 
        RET Z
 
        LD C,A
 
        AND #7F
 
        CP 62
 
        LD A,63
 
detb0   JR Z,detb1
 
        LD A,6
 
detb1   LD (HL),A
 
        BIT 7,C
 
        JR Z,detb2
 
        SET 7,(HL)
 
detb2   CP 6
 
        JR Z,deT1
 
        RET
 
        ;
 
deTTOP  LD DE,64 ;верх
 
deTTO2  ADD HL,DE
 
        LD A,(HL)
 
        OR A
 
        RET Z
 
        LD C,A
 
        AND #7F
 
        CP 62
 
        LD A,61
 
        JR detb0
 
deTMID  CALL deTBOT
 
        LD DE,128
 
        JR deTTO2
 
        ;
 
deT1    SET 4,H
 
        LD A,(HL)
 
        CP 2
 
        JR NZ,deT11
 
        LD (HL),0
 
deT11   RES 4,H
 
        RET
 
 
 
;------главный цикл обработки шахт-------
 
MINER   XOR A
 
        LD (brNUM),A ;очистить список погорельцев
 
        LD IX,MINE
 
        LD BC,#800
 
        LD E,B ;LD DE,8
 
        LD D,C ;
 
Mim0    LD A,(IX)
 
        OR A
 
        JR Z,Mim1
 
        LD A,(IX+3)
 
        OR A
 
        JR Z,KilMim
 
        CP (IX+6)
 
        CALL C,HomBrk
 
        LD A,(IX+4)
 
        OR (IX+5)
 
        JR Z,KilMim
 
Mim1    ADD IX,DE
 
        INC C
 
        DJNZ Mim0
 
        RET
 
 
 
KilMim  ;разрушить шахту
 
        CALL DESTRY
 
        JR Mim1
 
 
 
;------главный цикл обработки зданий ------------------------
 
HOMER   LD HL,SIDE_N
 
        LD (HL),0 ;свои здания
 
        PUSH HL
 
        CALL HOMER_
 
        POP HL
 
        INC (HL)  ;здания врага
 
HOMER_  LD B,32 ;в С - номер
 
Hom0    LD A,(IX)
 
        OR A
 
        JR Z,Hom1
 
        LD A,(IX+3)
 
        OR A
 
        JR Z,KilHom
 
        CP (IX+6)
 
        CALL C,HomBrk
 
        LD A,(IX+4)
 
        INC A
 
        JR Z,Hom1
 
        CP #80
 
        PUSH AF
 
        CALL NC,HomBld
 
        POP AF
 
        CALL C,HomFct
 
Hom1    ADD IX,DE
 
        INC C
 
        DJNZ Hom0
 
        RET
 
 
 
HomBrk  ;занести повреждённое здание в список brHom для vFLAME
 
        LD HL,brNUM
 
        LD A,(HL)
 
        CP 24
 
        RET NC
 
        INC (HL)
 
        INC HL
 
        CALL BA
 
        LD (HL),C
 
        LD A,(SIDE_N)
 
        OR A
 
        RET NZ
 
        LD A,(DIFFIC) ;индикация/горение
 
        OR A
 
        JR Z,Hmbr1
 
        LD A,(TIC)
 
        AND #7
 
        JR NZ,Hmbr1
 
        DEC (IX+3) ;наши здания сгорают :( при DIFFIC=1
 
Hmbr1    LD A,1
 
         LD (LED+5),A ;on индик5
 
        RET
 
 
 
KilHom  ;разрушть здание
 
        CALL DESTRY
 
        JR Hom1
 
 
 
DESTRY  ;разрушить объект IX (C-его номер)
 
        PUSHs
 
         LD A,21
 
         LD (LED+2),A ;on индик2
 
         LD A,2
 
         CALL SOUNDn  ;FX
 
        CALL EVENT
 
        ;отменить пометку
 
        LD HL,SEL_T
 
        LD A,(HL)
 
        CP 8
 
        JR C,pec4
 
        INC HL
 
        LD A,(HL)
 
        CP C
 
        JR NZ,pec4
 
        DEC HL
 
        LD (HL),0
 
pec4    ;выпустить строителя, если он там
 
        LD A,(IX+4)
 
        CP 253
 
        JR C,pec0
 
        INC A
 
        JR Z,pec0
 
        LD A,(IX+7)
 
        INC A
 
        CALL NZ,outMAN
 
pec0    ;вызвать облако
 
        CALL NEWB11
 
        ;разрушить зд
 
        CALL HL_IX0
 
        LD (IX+0),0
 
        CALL GMAP
 
        LD A,(IX+2)
 
        CP 8
 
        JR Z,pec1
 
        CP 18
 
        JR Z,pec1
 
        LD C,17
 
        CALL pecDES
 
        DEC HL
 
        CALL pecDES
 
        LD DE,-64
 
        ADD HL,DE
 
        CALL pecDES
 
        INC HL
 
        CALL pecDES
 
        INC HL
 
        CALL pecDES
 
        LD DE,64
 
        ADD HL,DE
 
        CALL pecDES
 
        ADD HL,DE
 
        CALL pecDES
 
        DEC HL
 
        CALL pecDES
 
        DEC HL
 
        CALL pecDES
 
        JR pec2
 
pec1    LD C,23
 
        CALL pecDES
 
        DEC HL
 
        LD C,25
 
        CALL pecDES
 
        LD DE,-64
 
        ADD HL,DE
 
        LD C,19
 
        CALL pecDES
 
        INC HL
 
        LD C,21
 
        CALL pecDES
 
pec2    POPs
 
        RET
 
        ;
 
pecDES  ;уничт кусочек здания с учётом видим
 
        SET 4,H
 
        LD (HL),0
 
        RES 4,H
 
        LD A,(HL)
 
        AND #80
 
        OR C
 
        LD (HL),A
 
        INC C
 
        RET
 
 
 
HomBld  ;строительство
 
        LD A,(IX+7)
 
        INC A
 
        RET Z ;нет строителя
 
        DEC (IX+5)
 
        RET NZ
 
        PUSH BC
 
        PUSH DE
 
        INC (IX+4)
 
        LD A,(IX+4)
 
        INC A
 
        CALL Z,outMA_
 
        LD A,(IX+2)
 
        LD HL,bcTIME
 
        CALL BA
 
        LD (IX+5),A
 
        LD A,C
 
        CALL placeB
 
        POP DE
 
        POP BC
 
        JP EVENT
 
 
 
outMA_   LD A,15
 
         LD (LED+1),A ;on индик1
 
outMAN  CALL HL_IX0
 
        PUSH IX  ;отпусти строителя
 
        PUSH BC
 
        LD A,(IX+7)
 
        PUSH AF
 
        PUSH HL
 
        CALL N_IXIY
 
        POP HL
 
        CALL stayON
 
        CALL IX0_HL
 
        CALL IX_98
 
        PUSH HL
 
        XOR A
 
        CALL NEWiy_
 
        POP HL
 
        CALL GMAP2
 
        POP AF
 
        ADD A,#80
 
        LD (HL),A
 
        POP BC
 
        POP IX
 
        RET
 
 
 
HomFct  ;пр_во/иссл
 
        DEC (IX+5)
 
        RET NZ
 
        CALL EVENT
 
        LD A,(IX+4)
 
        LD (IX+4),255
 
        CP 18
 
        JR C,HFChum
 
        SUB 20
 
        PUSH AF
 
        LD HL,HFCvar
 
        CALL WT
 
        LD A,(SIDE_N)
 
        OR A
 
        JR Z,HoFc1
 
        LD DE,kTOWER-hTOWER ;теперь неверно
 
        ADD HL,DE
 
HoFc1   POP AF
 
        PUSH HL
 
        LD HL,HFCdat
 
        CALL BA
 
        POP HL
 
        LD (HL),A
 
        RET
 
 
 
HFChum  ;появляется новый член общества A
 
        EX AF,AF
 
        CALL HL_IX0
 
        PUSH IX
 
        PUSHs
 
        CALL stayON
 
        LD A,(SIDE_N)
 
        OR A
 
        JR NZ,hFC1
 
         LD A,11
 
         LD (LED+4),A ;on индик4
 
         XOR A
 
hFC1    CALL NEWHER
 
        POPs
 
        POP IX
 
        RET
 
 
 
 
 
HFCvar  DEFW hARC,hARC, hBLADE,hBLADE, hHORSE,hHORSE,hHORSE
 
        DEFW hSHILD,hSHILD, hCLRIC+0,hCLRIC+1,hCLRIC+2
 
        DEFW hWIZRD+0,hWIZRD+1,hWIZRD+2
 
HFCdat  DEFB 1,2, 1,2, 1,2,3
 
        DEFB 1,2, 1,1,1, 1,1,1
 
        ;(за врагов можно проводить исследования)