Login

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

;---ОБРАБОТКА НАЖАТИЯ FIRE

ACTION  ;реакция на управл ***********
        CALL FIRBUT
        CALL capSEL
        CALL SELECT
        LD A,(T_FIRE)
        DEC A
        RET NZ
ACT_F   LD A,(BX)
        CP 24
        RET NC
        LD A,(SEL_T)
        OR A
        RET Z
        CP 7
        RET Z
        JP NC,acHOM
        LD A,(fixTAR) ;цель зафиксирована?
        OR A
        JR Z,acNfx
        LD HL,G_MAP1
        LD A,(TIC)
        RRA
        JR C,acFx
        LD HL,G_FIX1
acFx    LD (G_IMG),HL
        RET
acNfx   LD HL,G_MAP1 ;сменить курсор
        LD (G_IMG),HL
        LD A,(ext_M)
        CP 1
        LD A,(F_FUNC)
        JP NC,acPEON
        ;для людей/группы
        CP #FF
        RET NC
        OR A
        JR NZ,acM1
        ;кнопка 0-я
acMOV   LD C,2; move
act00   CALL PXcorr
        EX DE,HL
act0    LD HL,SEL_T
        LD B,(HL)
        INC HL
act1    LD A,(HL)
        INC HL
        PUSH HL
        CALL N_IX
        LD (IX+10),E
        LD (IX+11),D
        LD (IX+9),C
        LD (IX+8),#80
        POP HL
        DJNZ act1
        RET
acM1    LD HL,(PX) ;кнопка 1я
        DEC A
        JP NZ,acM2
        ;кнопка 1-я
        LD A,(BUT_N+1)
        CP 18
        JR Z,acM1_1
        ;атака
        CALL HLcorr
        PUSH HL
        CALL GMAP2
        POP DE
        LD A,(HL)
        SUB #38
act03   LD C,3 ;на позицию
        JR C,act00
        RES 4,H
        BIT 7,(HL)
        SET 4,H
        JR NZ,act00 ;на тёмное поле ->вых
        CP #48
        JR NC,act12
        SET 7,A ;атака на здание
        JR act10
act12   SUB #48 ;атака на человека
        CP #30
        JR C,act03 ;не атакуй своего
act10   LD C,A
        LD HL,SEL_T
        LD B,(HL)
        INC HL
act11   LD A,(HL)
        INC HL
        CP C ;сам себя?
        JR Z,act17
        PUSH HL
        CALL N_IX
        LD (IX+10),E
        LD (IX+11),D
        LD (IX+12),C
        LD (IX+9),4 ;атаковать цель
        LD (IX+8),#80
        POP HL
act17   DJNZ act11
        LD L,C
        LD H,6 ;время мигания кв. цели
        LD (sel_en),HL
        LD A,H
        LD (fixTAR),A ;цель зафиксрована
        RET

acM1_1  ;идти в лес/шахту
        CALL HLcorr
        CALL GMAP
        LD A,(HL)
        AND #7F
        CP 78
        LD C,6
        JR C,acM1_a
        INC C ;7
acM1_a  CALL act00
        LD (IX+14),E
        LD (IX+15),D
        RET

acM2    DEC A
        JR NZ,acM3
        ;кнопка 2-я
        LD A,(BUT_N+2)
        CP 19
        JP Z,acREM
acM3    LD A,(BUT_N+3)
        CP 71
        JR NZ,acM3_
        ;свободный выcтрел из катапульты
        LD C,27
        PUSH HL
        CALL GMAP
        POP DE
        LD A,(HL)
        OR A
        RET Z ;нельзя целить на бордюр
        AND #80
        RET NZ ;нельзя целить в тёмное поле
        JP act0
        ;колдовство
acM3_   LD A,(BUT_H)
        CP 66
        JR C,acM301
        ;у кунгов
        LD C,14
        JP NZ,acMANA
        LD A,(F_FUNC)
        ADD A,17
        LD C,A
        CP 21
        JP NZ,act00
        JR act30
acM301  ;у людей
        CP 57
        LD C,11
        JP Z,acMANA
        LD A,(F_FUNC)
        ADD A,14
        LD C,A
        CP 17
        JP Z,act00
        JR act30
        ;
acMANA  ;пров mana
        LD A,(SEL_N)
        CALL N_IX
        LD A,(IX+6)
        CP MANA/2
        JP NC,act00
        JP C,pb07

act30   ;заклинание(С) на цель
        LD A,(SEL_T+1)
        LD B,A
        CALL N_IX
        LD HL,(PX)
        CALL IXt_HL
        CALL IX_98
        CALL GMAP2
        LD A,(HL)
        SUB #80 ;не человек?
        RET C
        CP B ;сам себя?
        RET Z;
        LD (IX+12),A
        LD (IX+9),C ;атаковать цель
        LD (IX+8),#80
        LD L,A
        LD H,1 ;время мигания кв. цели
        LD (sel_en),HL
        RET

acREM   ;ремонт/стр-во (C=8)
        CALL HLcorr
        CALL GMAP2
        LD A,(HL)
        SUB #38
        JP C,acMOV
        CP 72
        JP NC,acMOV
        LD C,8
        JP act00


nMN_WD  ;дать сообщ, если нехв mn/wd
        ADD A,44
        JP dirTX

acHOM   LD A,(F_FUNC)
        CP #FF
        RET NC
        CALL mayBLT
        RET NZ
        LD A,(F_FUNC)
        CALL GETmw
        CALL dMN_WD
        JR C,nMN_WD
        LD HL,(PX)
        CALL GMAP
        LD A,(F_FUNC)
        OR A
        JR NZ,acH1
        ;дорожка
        LD A,(MASTER)
        ADD A,7
        LD (HL),A
        RET
        ;
acH1    ;заборчик
        LD (HL),66
        CALL putWAL
        DEC L
        CALL putWAL
        INC L
        INC L
        CALL putWAL
        LD DE,-65
        ADD HL,DE
        CALL putWAL
        LD DE,128
        ADD HL,DE
putWAL  ;поставить стенку, учтя вокруг
        LD A,(HL)
        AND #7F
        CP 64
        RET C
        CP 78
        RET NC
        CP 71
        LD (HL),64
        JR C,pUW1
        LD (HL),71
pUW1    LD C,0
        PUSH HL
        DEC L
        CALL pUWsub
        INC L
        INC L
        CALL pUWsub
        LD DE,-65
        ADD HL,DE
        CALL pUWsub
        LD DE,128
        ADD HL,DE
        CALL pUWsub
        LD HL,pUWtab
        LD A,C
        CALL BA
        LD C,A
        POP HL
        PUSH HL
        ADD A,(HL)
        LD (HL),A
        SET 4,H
        LD (HL),2
        RES 4,H
        LD E,64
        ADD HL,DE
        LD A,(HL)
        AND #7F
        CP 51
        JR NZ,pUW3
        LD A,C
        CP 4
        JR Z,pUW2
        LD (HL),1
        JR pUW2
pUW3    CP 64
        JR C,pUW5
        CP 78
        JR C,pUW2
pUW5    LD A,C
        CP 4
        JR NZ,pUW2
        ;SET 4,H
        LD A,(HL)
        OR A
        JR Z,pUW11
        CP 7
        JR C,pUW4
        CP 17
        JR C,pUW11
        CP 26
        JR C,pUW4
pUW11   POP HL
        INC (HL)
        RET
pUW4    LD (HL),0
        RES 4,H
        LD (HL),51
pUW2    POP HL
        RET
pUWtab  DEFB 2,4,4,4,2,0,5,0,2,3,6,3,2,1,2,1
pUWsub  SLA C
        LD A,(HL)
        AND #7F
        CP 64
        RET C
        CP 78
        RET NC
        INC C
        RET


acPEON  ;строительство для крестьян
        JR NZ,acPex2
        ;меню 1
        CP #FF
        RET NC
        CALL mayBLT
        RET NZ
        LD A,(F_FUNC)
        OR A
        JR NZ,acP2
        LD A,8
        JR acP2
acPex2  CP #FF
        RET NC
        CALL mayBLT
        RET NZ
        LD A,(F_FUNC)
        ADD A,3
acP2    LD C,A
        PUSH BC
        LD A,(F_FUNC)
        CALL GETmw
        CALL dMN_WD
        POP BC
        JP C,nMN_WD
        LD A,(MASTER)
        OR A
        JR Z,acP3
        LD A,10
acP3    ADD A,C
        LD C,A
        LD HL,(PX)
        INC L
        INC H
        PUSH HL
        XOR A
        CALL BLTNEW
        CALL onsee2
        POP DE
        LD C,8
        CALL act0
        EX DE,HL
        CALL EVENTr
        CALL oneSE_
        RET ;!

PXcorr  ;коррекция PX,если указывает на край здания (вых: HL)
        LD HL,(PX)
HLcorr  ;то же для HL
        PUSH HL
        CALL GMAP
        LD A,(HL)
        AND #7F
        SUB 120
        POP HL
        RET C
        PUSH HL
        LD HL,PXcrT
        CALL WT
        POP DE
        LD A,L
        ADD A,E
        LD L,A
        LD A,H
        ADD A,D
        LD H,A
        RET

PXcrT   DEFB 1,0, 1,1, 0,1, -1,1, -1,0
        DEFB -1,-1, 0,-1, 1,-1