;----ВЫБОР ГЕРОЕВ--------
 
 
 
oneSEL  ;кто выбран в xy=HL
 
        ;jr $
 
        LD HL,(PX)
 
        LD A,L
 
        DEC A
 
        CP 62
 
        RET NC
 
        LD A,H
 
        DEC A
 
        CP 62
 
        RET NC
 
        CALL oneSE_
 
        LD HL,(PX)
 
        LD DE,(BX)
 
        RRC D
 
        LD A,E
 
        JR C,oS1
 
        RRCA
 
        JR C,oS01
 
        LD HL,(PX)
 
        DEC L
 
        CALL oneSE_
 
        LD HL,(PX)
 
        DEC L
 
os0_    DEC H
 
        CALL oneSE_
 
        LD HL,(PX)
 
        DEC H
 
os_     CALL oneSE_
 
        RET ;!
 
oS01    INC L
 
        CALL oneSE_
 
        LD HL,(PX)
 
        INC L
 
        JR os0_
 
oS1     RRCA
 
        JR C,oS11
 
        DEC L
 
        CALL oneSE_
 
        LD HL,(PX)
 
        DEC L
 
os1_    INC H
 
        CALL oneSE_
 
        LD HL,(PX)
 
        INC H
 
        JR os_
 
oS11    INC L
 
        CALL oneSE_
 
        LD HL,(PX)
 
        INC L
 
        JR os1_
 
        ;
 
oneSE_  CALL GMAP ;норм вых - лишний POP!
 
        BIT 7,(HL)
 
        RET NZ
 
        SET 4,H
 
        LD A,(HL)
 
        CP 2
 
        RET C
 
        CP #80
 
        JR C,homSEL
 
        SUB #80
 
        LD HL,SEL_T
 
        CP #30
 
        LD E,1
 
        JR C,ones1
 
        LD E,7
 
ones1   LD (HL),E
 
        INC HL
 
        LD (HL),A
 
        POP AF ;!
 
        RET
 
homSEL  CP #38
 
        JR C,hS1
 
        SUB #38
 
        LD HL,SEL_T
 
        LD (HL),8
 
        INC HL
 
        LD (HL),A
 
        POP AF ;!
 
        RET
 
hS1     RES 4,H
 
        LD A,(HL)
 
        AND #7F
 
        SUB 120
 
        RET C
 
        SET 4,H
 
        PUSH HL
 
        LD HL,GSAT
 
        CALL WT
 
        POP DE
 
        ADD HL,DE
 
        LD A,(HL)
 
        JR homSEL
 
 
 
selBOX  ;выбор в боксе
 
        LD HL,(BOXX)
 
        SRL L
 
        SRL L
 
        SRL L
 
        SRL H
 
        SRL H
 
        SRL H
 
        LD DE,(BX)
 
        XOR A
 
        PUSH HL
 
        SBC HL,DE
 
        POP HL
 
        JP Z,oneSEL
 
        SRL L
 
        SRL H
 
        LD DE,(X0)
 
        ADD HL,DE
 
        LD DE,(PX)
 
        LD (SEL_T),A
 
        LD A,D
 
        SUB H
 
        JR NC,sbX1
 
        NEG
 
        LD H,D
 
sbX1    INC A
 
        LD C,A
 
        LD A,E
 
        SUB L
 
        JR NC,sbX2
 
        NEG
 
        LD L,E
 
sbX2    INC A
 
        EX AF,AF
 
        CALL GMAP
 
sbXL0   PUSH HL
 
        EX AF,AF
 
        LD B,A
 
        EX AF,AF
 
sbXL1   PUSH HL
 
        BIT 7,(HL)
 
        JR NZ,sbXL2
 
        SET 4,H
 
        LD A,(HL)
 
        CP 2
 
        JR C,sbXL2
 
        CP #80
 
        JR C,sbXbu
 
        SUB #80
 
        LD E,A
 
        LD HL,SEL_T
 
        CP #30
 
        JR NC,sbXk
 
        LD A,(HL)
 
        CP 6
 
        JR C,sbXh
 
        XOR A
 
sbXh    INC A
 
        LD (HL),A
 
        PUSH AF
 
        CALL BA
 
        POP AF
 
        LD (HL),E
 
        CP 6
 
        JR C,sbXL2
 
        POP AF
 
        POP AF
 
        RET
 
sbXk    LD A,(HL)
 
        OR A
 
        JR NZ,sbXL2
 
        LD (HL),7
 
        INC HL
 
        LD (HL),E
 
        JR sbXL2
 
sbXbu   CP #38
 
        JR C,sbXb1
 
        LD E,A
 
        LD HL,SEL_T
 
        LD A,(HL)
 
        OR A
 
        JR NZ,sbXL2
 
        LD A,E
 
        SUB #38
 
        LD (HL),8
 
        INC HL
 
        LD (HL),A
 
        JR sbXL2
 
sbXb1   RES 4,H
 
        LD A,(HL)
 
        AND #7F
 
        SUB 120
 
        JR C,sbXL2
 
        SET 4,H
 
        PUSH HL
 
        LD HL,GSAT
 
        CALL WT
 
        POP DE
 
        ADD HL,DE
 
        LD A,(HL)
 
        JR sbXbu
 
sbXL2   POP HL
 
        INC HL
 
        DJNZ sbXL1
 
        POP HL
 
        LD DE,64
 
        ADD HL,DE
 
        DEC C
 
        JR NZ,sbXL0
 
        RET
 
 
 
 
 
centrS  ;поместить в центр
 
        LD A,(isMAP)
 
        OR A
 
        RET NZ
 
        LD A,(SEL_T)
 
        OR A
 
        RET Z
 
        CP 8
 
        LD A,(SEL_N)
 
        PUSH AF
 
        CALL NC,B_IX
 
        POP AF
 
        CALL C,N_IX
 
        LD A,(IX)
 
        CALL cesS
 
        LD L,A
 
        LD A,(IX+1)
 
        CALL cesS
 
        LD H,A
 
        LD (X0),HL
 
        RET
 
cesS    SUB 6
 
        JR NC,ces1
 
        XOR A
 
        RET
 
ces1    CP 52
 
        RET C
 
        LD A,52
 
        RET
 
 
 
deSEL   ;исключить А из N_SEL
 
        EX AF,AF
 
        LD HL,SEL_T
 
        LD A,(HL)
 
        OR A
 
        RET Z
 
        INC HL
 
        CP 7
 
        JR C,dL1
 
        RET NZ
 
        ;враг
 
        EX AF,AF
 
        CP (HL)
 
        RET NZ
 
        DEC HL
 
        LD (HL),0
 
        RET
 
dL1     ;наш
 
        LD B,A
 
        EX AF,AF
 
dL0     CP (HL)
 
        JR Z,dL2
 
        INC HL
 
        DJNZ dL0
 
        RET
 
dL2     DEC B
 
        JR Z,dL3
 
        PUSH HL
 
        POP DE
 
        INC HL
 
        LD C,B
 
        LD B,0
 
        LDIR
 
dL3     LD HL,SEL_T
 
        DEC (HL)
 
        RET
 
 
 
flpSEL  ;flip пометки селект
 
        LD HL,SyLOCK
 
        LD BC,#7FFE ;SYM Shift
 
        IN A,(C)
 
        AND %1111
 
        CP %1101
 
        JR Z,fP1
 
        LD (HL),0
 
        RET
 
fP1     LD A,(HL)
 
        OR A
 
        RET NZ
 
        INC (HL)
 
          CALL EVENTr
 
        LD A,(SEL_T)
 
        OR A
 
        JP Z,addSEL
 
        CP 7
 
        RET NC
 
        LD HL,(PX)
 
        CALL GMAP2
 
        LD A,(HL)
 
        SUB #80
 
        RET C
 
        CP #30
 
        RET NC
 
        LD BC,(SEL_T)
 
        PUSH BC
 
        CALL deSEL
 
        POP BC
 
        LD A,(SEL_T)
 
        CP C
 
        RET NZ
 
addSEL  LD HL,(PX)
 
        CALL GMAP2
 
        LD A,(HL)
 
        SUB #80
 
        RET C
 
        CP #30
 
        RET NC
 
        LD B,A
 
        LD HL,SEL_T
 
        LD A,(HL)
 
        CP 6
 
        RET NC
 
        INC (HL)
 
        INC HL
 
        CALL BA
 
        LD (HL),B
 
        RET
 
 
 
;процедуры выбора
 
capSEL  ;Выбор/рамка по CAPS
 
        LD HL,(MX)
 
        LD A,(T_FIRE)
 
        CP 2
 
        JR Z,BB1
 
        LD A,(isMAP)
 
        OR A
 
        JR NZ,BB0
 
        LD A,(begBOX)
 
        OR A
 
        RET Z
 
        CALL EVENTr
 
        CALL selBOX
 
BB0     XOR A
 
        LD (begBOX),A
 
        RET
 
BB1     ;pCAPS
 
        LD A,L
 
        CP 192
 
        RET NC
 
        LD A,(isMAP)
 
        OR A
 
        JR NZ,BBM
 
        LD A,(begBOX)
 
        OR A
 
        RET NZ
 
        INC A
 
        LD (begBOX),A
 
        LD A,L
 
        CP 192
 
        JR C,BB4
 
        LD L,191
 
BB4     LD (BOXX),HL
 
        LD HL,(PX)
 
        CALL EVENTr
 
         JP oneSEL
 
BBM     LD HL,(PX)
 
        CALL EVENTr
 
        CALL oneSE_ ;!
 
        RET
 
 
 
SELECT  ;Выбор ф-ции на панели упр
 
        ;функц кнопки
 
        LD BC,#F7FE
 
        IN A,(C)
 
        LD DE,#500
 
fun0    RRCA
 
        JR NC,fun1
 
        INC E
 
        DEC D
 
        JR NZ,fun0
 
        LD B,#FD
 
        IN A,(C)
 
        AND 7
 
        CP E
 
        JR Z,fun1
 
        LD E,#FF
 
fun1    LD A,E
 
        LD (_n_FUN),A
 
        CP #FF
 
        RET C
 
        ;fire на панели
 
        LD A,(T_FIRE)
 
        DEC A
 
        RET NZ
 
        LD HL,(BX)
 
        LD A,L
 
        CP 25
 
        RET C
 
        LD A,H
 
        CP 19
 
        RET Z
 
        JR NC,dwnPP
 
        CP 9
 
        RET Z
 
        JR NC,midPP
 
upPP    CP 4
 
        RET C
 
        LD A,(NAME)
 
        CP 42
 
        JP NZ,centrS
 
        LD A,(ext_M)
 
        XOR 1
 
        LD (ext_M),A
 
        JP EVENT
 
dwnPP   CP 26
 
        RET NC;индик предупр
 
        ;гл.меню *********
 
        XOR A
 
        LD (T_FIRE),A
 
        JP gmMENU
 
midPP   LD A,L
 
        SUB 25
 
        CP 6
 
        RET NC
 
        LD L,0
 
        LD E,L
 
        CP 3
 
        JR C,mi1
 
        INC L
 
mi1     LD A,H
 
        SUB 10
 
        CP 3
 
        JR C,mi2
 
        LD E,2
 
        CP 6
 
        JR C,mi2
 
        LD E,4
 
mi2     LD A,E
 
        ADD A,L
 
        LD (_n_FUN),A
 
        RET
 
 
 
;----------------------------------------------
 
FIRBUT  ;обработка нажатия иконки + подсветка
 
        LD A,#FF
 
        LD (N_FUN1),A
 
        LD HL,_n_FUN
 
        CP (HL)
 
        JR NZ,nSQ0
 
        INC HL
 
        LD (HL),A ;N_FUNC=#ff ;функция 0-5, или 255-none
 
        RET
 
nSQ0    LD A,(N_FUNC)
 
        CP #FF
 
        RET C
 
        LD A,(HL) ;_n_FUN
 
        INC HL
 
        LD (HL),A ;N_FUNC ;функция 0-5, или 255-none
 
        INC HL
 
        LD (HL),A ;N_FUN1 ;дубль для подсветки
 
        LD B,A
 
        LD HL,BUT_N
 
        CALL BA
 
        OR A
 
        RET Z ;пустая кн
 
        LD C,A
 
        CP 71     ;/катап _ cвободная стрельба?/
 
        JR Z,nSQ1
 
        CP 50
 
        JR NC,procB
 
        LD HL,spc_DO
 
        CALL BA
 
        OR A
 
        JR Z,procB
 
        CP 2
 
        LD A,(SEL_T)
 
        JR C,nSQ1
 
        CP 7
 
        JR NC,procB
 
nSQ1    LD A,B
 
        LD (F_FUNC),A ;выбор без немедл. действия
 
        RET
 
procB   ;обработка нажатий на кнопки (B-#кн,C-её тип)
 
        LD A,(SEL_T)
 
        CP 7
 
        RET Z
 
        JP NC,prcBLT
 
        ;для людей/отряда
 
        LD A,(BUT_H)
 
        CP 24
 
        JR NZ,pBH4
 
        LD A,(ext_M)
 
        OR A
 
        JR Z,pBH4
 
        ;один из отряда
 
        LD A,B
 
        LD HL,SEL_N
 
        PUSH HL
 
        CALL BA
 
        POP HL
 
        LD (HL),A
 
        DEC HL
 
        LD (HL),1
 
        JP EVENTr
 
 
 
pBH4    LD A,C
 
        CP 7
 
        JR NC,pBH1
 
        DEC A
 
        DEC A
 
        JR pBH0
 
pBH1    CP 24
 
        JR NC,pBH2
 
        SUB 15
 
        JR pBH0
 
pBH2    SUB 39
 
pBH0    LD HL,pBHt
 
        CALL WT
 
        JP (HL)
 
pBHt    DEFW pBF2,pBF3,pBF4,pBF4,pBF4,pBF20,pBF21,pBF22,pBF23
 
        DEFW pBF48,pBF48,pBF50
 
pBF2    ;возвр в меню0
 
        JP EVENTr
 
pBF20   ;осн меню стр-ва
 
        LD A,1
 
pBF20_  CALL _EXT
 
        LD A,#FF
 
        LD (F_FUNC),A
 
        RET
 
pBF21   ;доп меню стр-ва
 
        LD A,2
 
        JR pBF20_
 
pBF23   ;сбросить груз
 
        LD HL,SEL_T
 
        LD B,(HL)
 
pBF23a  INC HL
 
        PUSH BC
 
        PUSH HL
 
        LD A,(HL)
 
        CALL N_IX
 
        LD A,(IX+4)
 
        CP 3
 
        LD A,9
 
        JR NC,pb01
 
        XOR A
 
pb01    LD (IX+4),A
 
        CALL IX_98
 
        POP HL
 
        POP BC
 
        DJNZ pBF23a
 
        JP EVENTr
 
pBF3    ;стоять насмерть
 
        LD C,1
 
        JR pb03
 
pBF4    ;остановиться
 
        LD C,0
 
pb03    LD HL,SEL_T
 
        LD B,(HL)
 
pb02    INC HL
 
        PUSH HL
 
        LD A,(HL)
 
        CALL N_IX
 
        LD (IX+8),0
 
        LD (IX+9),C
 
        POP HL
 
        DJNZ pb02
 
        RET
 
pBF22   ;идти на базу
 
        XOR A
 
        LD (SIDE_N),A
 
        LD HL,SEL_T
 
        LD B,(HL)
 
pBF22a  INC HL
 
        PUSH BC
 
        PUSH HL
 
        LD A,(HL)
 
        CALL N_IX
 
        CALL basTAR
 
        POP HL
 
        POP BC
 
        DJNZ pBF22a
 
        RET
 
pBF50   ;родить монстра
 
        LD B,MANA-1
 
        LD A,(BUT_H)
 
        CP 57
 
        LD C,12
 
        JR Z,pb05
 
        LD C,15
 
        JR pb05
 
pBF48   ;родить пауков
 
        LD B,MANA/4
 
        LD A,(BUT_H)
 
        CP 57
 
        LD C,10
 
        JR Z,pb05
 
        LD C,13
 
pb05    LD A,(SEL_N)
 
        CALL N_IX
 
        LD A,(IX+6)
 
        CP B
 
        JR C,pb07
 
        LD (IX+9),C
 
        LD (IX+8),0
 
        RET
 
pb07    LD A,25 ;no mana
 
        JP dirTX
 
 
 
;---кнопки зданий--------------
 
prcBT1  DEFB 29,30,31,32,33,34,0,4,3,8,7,5,6
 
        DEFB #FF,#FF,#FF,9,13,12,17,16,14,15
 
prcBT0  DEFB 27,28,#FF,22,23
 
        DEFB #FF,20,21,24,25,26
 
 
 
prcBLT  ;C-k.typ
 
        LD A,C
 
        CP 51
 
        JR C,pCB4
 
        CP 68
 
        JR NC,pCB4
 
        ;для ПР-ВА юнитов проверить наличе пищи (4*N+1)
 
        PUSH BC
 
        CALL oNUMh ;едоки->C
 
        PUSH BC
 
        CALL oHOMh ;пища->A
 
        POP BC
 
        INC C
 
        CP C
 
        POP BC
 
        JR NC,pCB4
 
        LD A,43
 
        JP dirTX
 
pCB4    PUSH BC
 
        LD A,(N_FUNC)
 
        CALL GETmw
 
        CALL dMN_WD
 
        POP BC
 
        JP C,nMN_WD
 
        CALL EVENT
 
        LD A,(SEL_N)
 
        CALL B_IX
 
        LD A,C
 
        CP 16
 
        JR C,pCB1
 
        CP 68
 
        RET NC
 
        SUB 45
 
        RET C
 
        ;закл/герои
 
        LD HL,prcBT1
 
pCB2    CALL BA
 
        LD (IX+4),A
 
        LD HL,hcTIME
 
        CALL BA
 
        LD (IX+5),A
 
        RET
 
pCB1    SUB 5
 
        LD HL,prcBT0
 
        JR NC,pCB2
 
        CP -3
 
        RET NZ
 
        LD A,(IX+4)
 
        CP #80
 
        JR C,pCBr
 
        ;уничт.здание
 
        LD (IX+3),0
 
        RET
 
        ;прекр.разработку
 
pCBr    LD (IX+4),255
 
        RET
 
 
 
;NN производств: 255-none
 
;0..8 наши
 
;9..17 враги
 
;20-лук1, 21-лук2, 22-меч1, 23-меч2, 24-конь1, 25-конь2, 26-конь3
 
;27-щит1, 28-щит2, 29-волш1,30-волш2,31-волш3
 
;32-закл1, 33-закл2, З4-закл3
 
;(40..-то же для врагов)
 
hcTIME  ;время на пр-во
 
        DEFB 100,100,100,120,120,140,150,200,140 ;наши
 
        DEFB 100,100,100,120,120,140,150,200,140 ;враги
 
        DEFB 1,1 ;none
 
        DEFB 150,200,150,200,100,150,200, 150,200, 150,200,250
 
        DEFB 120,180,230 ;наши разр
 
 
 
;/      DEFB 0,0,0,0,0
 
;/      DEFB 150,200,150,200,100,150,200, 150,200, 150,200,250
 
;/      DEFB 120,180,230 ;;0,0,0,0,0 ;их разр