Login

Subversion Repositories NedoOS

Rev

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

;----ВЫБОР ГЕРОЕВ--------

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 ;их разр