Login

Subversion Repositories NedoOS

Rev

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

;--СТРАНИЦА 0

;--подсчёты--
COMPUT  ;подгот данных для выв панели
        CALL BUTING
        LD A,(NAME)
        CALL putTX
        CALL BUTmw
       if 1==0
       LD HL,WX_BAD-#2080
       LD A,(TIC)
       CP 64
       CALL Z,_crc9
       endif
        JP gtINDY

;---операц с деньгами/лесом
;;cMN_WD  ;очиcтка денег/леcа
;;        LD HL,MONEY
;;        LD B,12
;;clrmw   LD (HL),0
;;        INC HL
;;        DJNZ clrmw
;;        RET

aMONEY  ;добавить денег/леcа (DE-в BCD-form)
        CALL chkCRC
        LD HL,MONEY+5
        CALL addmw
        JP setCRC
aWOOD   LD HL,WOOD+5
addmw   CALL addmw1
        LD E,D
        CALL addmw1
        LD E,0
addmw1  LD A,E
        CALL aDIG
        LD A,E
        RLCA
        RLCA
        RLCA
        RLCA
aDIG    AND #F
        ADD A,(HL)
        LD (HL),A
        DEC HL
        CP 10
        RET C
        SUB 10
        INC HL
        LD (HL),A
        DEC HL
        INC (HL)
        RET

dMN_WD ;убавить DE-деньги BC-леc С(A=0/1)/NC -нельзя(mn/wd)/можно
        PUSH DE
        LD HL,MONEY
        CALL can_d
        POP DE
        LD A,0
        RET C
        PUSH DE
        LD E,C
        LD D,B
        LD HL,WOOD
        CALL can_d
        POP DE
        LD A,1
        RET C
        LD HL,MONEY+5
        CALL chkCRC
        CALL d_ok
        CALL setCRC
        LD E,C
        LD D,B
        LD HL,WOOD+5
        CALL d_ok
        XOR A
        RET
d_ok    CALL d_ok1
        LD E,D
        CALL d_ok1
        LD E,0
d_ok1   LD A,E
        CALL dDIG
        LD A,E
        RLCA
        RLCA
        RLCA
        RLCA
dDIG    AND #F
        SUB (HL)
        NEG
        LD (HL),A
        DEC HL
        OR A
        RET P
        INC HL
        LD A,10
        ADD A,(HL)
        LD (HL),A
        DEC HL
        DEC (HL)
        RET

can_d   LD A,(HL)
        INC HL
        OR (HL)
        RET NZ
        CALL c_d1
        RET NZ
        LD D,E
        CALL c_d1
        RET NZ
        CCF
        RET Z
        CCF
        RET
c_d1    INC HL
        LD A,D
        RLCA
        RLCA
        RLCA
        RLCA
        AND #F
        CP (HL)
        INC HL
        CCF
        RET NZ
        LD A,D
        AND #F
        CP (HL)
        CCF
        RET

        if 1==0
_crc9   ;[--9]
        LD A,(LEVEL)
        CP 6
        RET C
        LD DE,#2080
        ADD HL,DE
        LD BC,#81F
_crc9a  LD A,(HL)
        ADD A,C
        LD C,A
        INC HL
        DJNZ _crc9a
        INC HL
        CP (HL)
        RET Z
        CALL MEM7 ;err
        endif

BUTmw   ;уcт знач денег/леc по кнопкам
        LD HL,(BX)
        LD A,L
        CP 25
        RET C
        CP 31
        RET NC
        LD L,0
        CP 28
        JR C,bm1
        INC L
bm1     LD A,H
        CP 10
        RET C
        CP 19
        RET NC
        CP 13
        JR NC,bm2
        XOR A
        JR bm3
bm2     CP 16
        LD A,2
        JR C,bm3
        LD A,4
bm3     ADD A,L
        LD C,A
        LD HL,BUT_N
        CALL BA
        OR A
        JR Z,bm4
        LD A,C
        LD HL,BUT_mn
        CALL WT
        LD (MONEY1),HL
        LD A,C
        LD HL,BUT_wd
        CALL WT
bm5     LD (WOOD1),HL
        RET
bm4     LD H,A
        LD L,H
        LD (MONEY1),HL
        JR bm5

GETmw   ;получить m/w для кнопки A -> DE/BC
        LD HL,BUT_mn
        CALL WA
        LD E,(HL)
        INC HL
        LD D,(HL)
        LD BC,11
        ADD HL,BC
        LD C,(HL)
        INC HL
        LD B,(HL)
        RET


vpTAB1  ;табл стр-ва 1 (ДЕНЬГИ,лес)
        DEFW #500,#300 ;изба
        DEFW #700,#500 ;креп
        DEFW #600,#400 ;лесоп
vpTAB2  ;табл стр-ва 2
        DEFW #800,#500
        DEFW #900,#400
        DEFW #1000,#400
        DEFW #1400,#300

BUTval  ;дать значения ресурсов кнопкам
        LD A,(SEL_T)
        CP 8
        JP Z,bVhome
        DEC A
        RET NZ
        ;для пеонов
        LD A,(ext_M)
        CP 1
        RET C
        LD HL,vpTAB1
        JR Z,bV1
        LD HL,vpTAB2
bV1     ADD A,2
bV_     EXX
        LD DE,BUT_wd
        EXX
        LD DE,BUT_mn
        LD BC,BUT_N
bV0     PUSH AF
        LD A,(BC)
        INC BC
        OR A
        JR NZ,bV2
        INC DE
        INC DE
        EXX
        INC DE
        INC DE
        EXX
        INC HL
        INC HL
        INC HL
        INC HL
        JR bV3
bV2     LD A,(HL)
        LD (DE),A
        INC HL
        INC DE
        LD A,(HL)
        LD (DE),A
        INC HL
        INC DE
        LD A,(HL)
        EXX
        LD (DE),A
        INC DE
        EXX
        INC HL
        LD A,(HL)
        EXX
        LD (DE),A
        INC DE
        EXX
        INC HL
bV3     POP AF
        DEC A
        JR NZ,bV0
        RET

bvTB_M  ;для базы (m/w)
        DEFW #50,0,#400,0,#100,#75
bvTBch  ;для церкви (m)
        DEFW #800,#750,#1500,#3000
bvTBwz  ;для башни  (m)
        DEFW #900,#750,#1500,#3000
bvTBtw  ;для крепости (m/w)
        DEFW #400,0, #450,#50, #850,0, #900,#200
bvUPG1  ;upgrade для коней
        DEFW #350
bvUPGR  ;upgrade
        DEFW #750,#1500,#3000
bv_JP   DEFW bvj0,bvj1,bvj2,bvj3,bvj4,bvj5,bvj6
bVhome  ;для зданий
        LD A,(SEL_N)
        SUB 8
        RET C
        CP 32
        RET NC
        LD H,HBUILD/256
        ADD A,A
        ADD A,A
        ADD A,A
        ADD A,2
        LD L,A
        LD A,(HL)
        CP 10
        JR C,bvs0
        SUB 10
bvs0    CP 7
        RET NC
        LD HL,bv_JP
        CALL WT
        JP (HL)
bvj0    ;база
        LD HL,bvTB_M
        LD A,3
        JP bV_
bvj1    ;крепость
        LD HL,bvTBtw
        LD A,4
        JP bV_
bvj4    ;кузня
        LD A,(hSHILD)
        LD HL,bvUPGR
        CALL WT
        LD (BUT_mn+2),HL
        LD A,(hBLADE)
        JR bv2_
bvj5    ;конюшн
        LD A,(hHORSE)
        LD HL,bvUPG1
        JR bv2a_
bvj2    ;лесоп
        LD A,(hARC)
bv2_    LD HL,bvUPGR
bv2a_   CALL WT
        LD (BUT_mn),HL
        RET
bvj6    ;башня
        LD HL,bvTBwz
        JR bvj_
bvj3    ;церквь
        LD HL,bvTBch
bvj_    LD DE,BUT_mn
        LD BC,BUT_N
        LD A,4
bVh0    PUSH AF
        LD A,(BC)
        INC BC
        OR A
        JR NZ,bVh2
        INC DE
        INC DE
        INC HL
        INC HL
        JR bVh3
bVh2    LD A,(HL)
        LD (DE),A
        INC HL
        INC DE
        LD A,(HL)
        LD (DE),A
        INC HL
        INC DE
bVh3    POP AF
        DEC A
        JR NZ,bVh0
        RET



;---------кнопки----------
cBUini  ;очиcтка кнопок с обновлением
        LD HL,_BUT_H
        LD B,7
cBU1i   LD (HL),#FF
        INC HL
        DJNZ cBU1i
        ;
cBUT    ;очиcтка кнопок
        LD HL,BUT_H
        LD DE,BUT_H+1
        LD (HL),0
        LD BC,6+12+12
        LDIR
        RET

BUTING  ;занеcение кнопок героя в BUT_N
        LD A,(_event)
        OR A
        RET Z
        XOR A
        LD (_event),A
        CALL BUTI1
        CALL BUTval
        LD A,(F_FUNC) ;коррекц ф-ции выбора
        CP #FF
        RET Z
        LD HL,BUT_N
        CALL BA
        CP 71 ;/для кат/
        RET Z
        CP 50
        JR NC,Bii
        LD HL,spc_DO
        CALL BA
        CP 1
        RET Z
        JR C,Bii
        LD A,(SEL_T)
        CP 7
        RET C
Bii     LD A,(BUT_N) ;0я кнопка- стрелка?
        DEC A
        JR Z,Bii0
        LD A,#FF
Bii0    LD (F_FUNC),A
        RET

BUTI1   CALL cBUT
        LD A,(SEL_T)
        CP 1
        JR Z,hUfrnd
        JR NC,hU1
        ;none
        LD (NAME),A
        RET
hU1     CP 7
        JP C,hUgrp
        JP NZ,hUblt
        ;враги/плен
        LD A,(SEL_N)
        CP #60
        JR C,hU2
        LD A,18
        LD (NAME),A
        LD A,60
        JR hU0
hU2     CALL N_IX
        LD A,(IX+4)
        PUSH AF
        LD HL,hMSG
        CALL BA
        LD (NAME),A
        POP AF
        LD HL,hBUT
        CALL BA
hU0     LD (BUT_H),A
        RET
hUfrnd  ;наш
        LD A,1
        LD (BUT_N),A
        LD A,4
        LD (BUT_N+5),A
        LD A,(SEL_N)
        CALL N_IX
        LD C,(IX+4)
        LD A,C
        LD HL,hMSG
        CALL BA
        LD (NAME),A
        LD A,C
        LD HL,hBUT
        CALL BA
        LD (BUT_H),A
        LD A,C
        CP 9
        JR C,hU4
        SUB 9
hU4     LD HL,hCASE
        CALL WT
        JP (HL)
hCASE   DEFW c0,c1,c2,c3,c4,c5,c6,c7,c8
        DEFW c18,c19,c20,c21,c22,c23,c24,c25,c26
c3      LD A,(hARC) ;лучн
        ADD A,10
c3A     LD (BUT_N+1),A
        LD A,(hSHILD)
        ADD A,4
        LD (BUT_N+5),A
c3B     LD A,3
        LD (BUT_N+2),A
        RET
c4      ;\
c8      LD A,(hBLADE) ;кон,луч
        ADD A,7
        JR c3A
c5      LD DE,hCLRIC;cвящ
        LD C,45
        JR c6A
c6      LD DE,hWIZRD;волш
        LD C,48
c6A     LD HL,BUT_N+1
        LD (HL),44
        LD B,3
c6B     LD A,(DE)
        INC DE
        INC HL
        OR A
        JR Z,c6C
        LD (HL),C
c6C     INC C
        DJNZ c6B
        RET
c18     ;\
c19     ;\
c20     ;\
c21     ;\
c24     ;\
c25     LD A,25
        JR c7A
c7      ;катап
        LD A,71
        LD (BUT_N+3),A
c26     LD A,44 ;кат,cтеногр
c7A     LD (BUT_N+1),A
        JR c3B
c22     ;\
c23     RET
c0      LD A,(ext_M)
        CP 1
        JR NC,c_peon
        LD C,18
        JR c2A
c1      ;\
c2      LD A,(ext_M)
        CP 1
        JR NC,c_peon
        LD C,22
c2A     LD HL,BUT_N+1
        LD (HL),C
        INC C
        INC HL
        LD (HL),C
        LD A,(hmaxB1)
        OR A
        RET Z ;осн м.стр-ва запрещено
        INC HL
        LD (HL),20
        LD A,(hmaxB2)
        OR A
        RET Z ;доп меню запрещено
        PUSH HL ;определение наличия лесопили
        LD A,2
        CALL searcB
        POP HL
        OR A
        RET Z ;нет леcопили!
        INC HL
        LD (HL),21
        RET
c_peon  ;другие меню пеонов
        LD A,(MASTER)
        JR NZ,c_p2
        ;стндрт (1-3)
        LD HL,#1B22
        LD C,28
        OR A
        JR Z,cp10
        LD HL,#242B
        LD C,37
cp10    LD A,(hmaxB1)
        LD (BUT_N),HL
        CP 2
        JR C,cp11
        LD A,C
        LD (BUT_N+2),A
cp11    LD A,2
        LD (BUT_N+5),A
        ;проверка числа построен ферм
        LD A,8
        CALL searcB
        CP 9 ;макс число ферм
        RET C
        XOR A
        LD (BUT_N),A
        RET
c_p2    ;дополн (от 1 до 4х)
        OR A
        LD C,#1D
        JR Z,cp20
        LD C,#26
cp20    LD A,(hmaxB2)
        LD B,A
        LD HL,BUT_N
cp20a   LD (HL),C
        INC C
        INC HL
        DJNZ cp20a
        JR cp11

hUgrp   ;группа
        LD B,A
        LD HL,SEL_N
        LD A,(ext_M)
        OR A
        JR NZ,hUgr1
        DEC B
        LD A,(HL)
        PUSH HL
        CALL N_IX
        POP HL
        LD A,(IX+4)
        CP 9
        JR C,hU1a
        SUB 9
hU1a    CP 2
        JR C,hU5
        JR Z,hU8
        LD A,2
        JR hU5
hU8     DEC A
hU5     LD C,A
hU6     INC HL
        LD A,(HL)
        PUSH HL
        CALL N_IX
        POP HL
        LD A,(IX+4)
        CP 9
        JR C,hU6a
        SUB 9
hU6a    CP 2
        JR C,hU15
        JR Z,hU18
        LD A,2
        JR hU15
hU18    DEC A
hU15    CP C
        JR NZ,hU20
        DJNZ hU6
        ;однородн группа
        LD A,C
        CP 1
        JR Z,hU21
        JR NC,hU22
        ;гр.пеонов
        LD HL,#1312
        JR hU23
hU21    ;гр.грузчиков
        LD HL,#1716
        JR hU23
hU22    ;гр.воинов
        LD HL,#0319
hU23    LD (BUT_N+1),HL
hU20    ;разнор группа
        LD HL,#0118
        LD (BUT_H),HL
        LD A,4
        LD (BUT_N+5),A
hU40    LD A,42
        LD (NAME),A
        RET
hUgr1   LD DE,BUT_N
hU41    LD A,(HL)
        PUSH HL
        CALL N_IX
        LD A,(IX+4)
        LD HL,hBUT
        CALL BA
        POP HL
        LD (DE),A
        INC HL
        INC DE
        DJNZ hU41
        LD A,24
        LD (BUT_H),A
        JR hU40


;=======работа со зданиями
hUBnam  DEFB 28,29,37,31,38,39,40,41 ;назв зд. кунгов
hUBsub  DEFW BD0,BD1,BD2,BD3,BD4,BD5,BD6,BD7,BD8

hUblt   ;здания
        LD A,(SEL_N)
        CALL B_IX
        LD A,(IX+2)
        CP 255
        JP Z,hUMIN
        CP 10
        JR C,hUB1
        DEC A
hUB1    LD B,A
        ADD A,26
        LD D,A
        INC A
        CP 37
        JR C,hUB2
        LD HL,hUBnam-37
        CALL BA
hUB2    LD E,A
        LD (NAME),DE
        LD A,(SEL_N)
        CP #28
        RET NC
        LD A,(IX+4)
        INC A
        JR NZ,BD_FF
        LD A,B
        CP 9
        JR C,hUB3
        SUB 9
hUB3    LD HL,hUBsub
        CALL WT
        JP (HL)
BD_FF   ;стр-во/пр-во
        LD A,2
        LD (BUT_N+5),A
        RET
BD8     ;изба
        LD HL,#4F4E
        LD (BUT_N),HL
        DEC L
        LD (BUT_N+2),HL
BD7     ;храм
        RET
BD4     ;кузня
        LD A,(hSHILD)
        CP 2
        JR NC,BD4_1
        ADD A,5
        LD (BUT_N+1),A
BD4_1   LD A,(hBLADE)
        CP 2
        RET NC
        ADD A,8
        JR BD_
BD1     ;крепость
        LD HL,BUT_N
        LD A,(hTOWER)
        LD B,A
        LD A,(MASTER)
        OR A
        LD A,52
        JR Z,BD1a
        LD A,62
BD1a    LD (HL),A
        INC A
        INC HL
        DJNZ BD1a
        ;если нет лесоп->нет никого
        LD A,2
        CALL searcB
        JR NZ,BD1n1
        LD (BUT_N+1),A
        JR BD1nA
        ;если нет конюшн->нет всадн
BD1n1   LD A,5
        CALL searcB
        JR NZ,BD1n2
        LD (BUT_N+2),A
        ;если нет кузни->нет катап
BD1n2   LD A,4
        CALL searcB
        RET NZ
BD1nA   LD (BUT_N+3),A
        LD (BUT_N+2),A
        RET
BD2     ;лесоп
        LD A,(hARC)
        CP 2
        RET NC
        ADD A,11
BD_     LD (BUT_N),A
        RET
BD5     ;конюшн
        LD A,(hHORSE)
        CP 3
        RET NC
        ADD A,13
        JR BD_
BD6     ;башня
        LD C,48
        LD A,(hmaxW)
        LD B,A
        LD A,57
        LD DE,hWIZRD
        JR BD3_1
BD3     ;церкв
        LD C,45
        LD A,(hmaxC)
        LD B,A
        LD A,56
        LD DE,hCLRIC
BD3_1   PUSH AF
        LD HL,BUT_N+1
BD3_0   LD A,(DE)
        OR A
        JR NZ,BD3_3
        LD (HL),C
BD3_3   INC DE
        INC HL
        INC C
        DJNZ BD3_0
        POP DE
        LD A,(MASTER)
        OR A
        LD A,D
        JR Z,BD3_4
        ADD A,10
BD3_4   LD (BUT_N),A
        RET

BD0     ;гл.дом
        LD A,(MASTER)
        OR A
        LD HL,#3310
        JR Z,BD0a
        LD H,#3D
BD0a    LD (BUT_N),HL
        LD A,(hWALL)
        LD (BUT_N+2),A
        RET
hUMIN    ;шахты
        LD HL,#4C1A
        LD (NAME),HL
        LD HL,#5050
        LD (BUT_N+2),HL
        RET

gtINDY  ;получить значения для индикаторов
        LD A,(SEL_T)
        CP 1
        JR Z,gY1
        JR NC,gY2
gY0     LD HL,#100 ;none/группа
        LD (IND1),HL
        LD (IND2),HL
gY0_0   XOR A
gY0_1   LD (IND2TP),A
        RET
gY1     ;один чел
        LD A,(SEL_N)
        CALL N_IX
        LD B,(IX+6)
gY1_0   LD C,(IX+5)
        LD A,(IX+4)
        LD HL,HEALTH
        CALL WT
        EX DE,HL
        LD A,D
        OR A
        JR Z,gY1_2
        LD D,MANA
gY1_2   LD HL,IND1
        LD (HL),C
        INC HL
        LD (HL),E
        INC HL
        LD (HL),B
        INC HL
        LD (HL),D
        INC HL
        LD A,D
        OR A
        JR Z,gY1_1
        LD A,1
gY1_1   LD (HL),A
        RET
gY2     CP 7
        JR C,gY0
        JR Z,gY4
        ;здания
        LD A,(SEL_N)
        LD C,A
        CALL B_IX
        LD A,(IX+2)
        LD HL,bHEALT
        CALL BA
        LD E,A
        LD A,C
        CP 8
        JR C,gY2_2
        CP 40
        JR NC,gY2_3
        ;у наших
        LD A,(IX+4)
        CP 255
        JR NC,gY2_3
        CP 253
        JR C,gY4_1
        ;cтадия стр_ва
        EX AF,AF
        LD A,(IX+2)
        LD HL,bcTIME
        CALL BA
        LD C,A
        ADD A,C
        LD H,A
        EX AF,AF
        JR Z,gY4_0
        LD C,0
gY4_0   EX AF,AF
        SUB C
        JR gY4_2
gY4_1   ;пр_во/иссл
        LD HL,hcTIME
        CALL BA
        LD H,A
gY4_2   SUB (IX+5)
        LD L,A
        LD (IND2),HL
        LD H,E
        LD L,(IX+3)
        LD (IND1),HL
        LD A,2
        JP gY0_1

gY2_2   ;шахты
        LD E,bHmine
gY2_3   ;здан врагов
        LD C,(IX+3)
        LD B,0
        LD D,B
        JR gY1_2
gY4     ;враг
        LD A,(SEL_N)
        CALL N_IX
        LD B,0
        CALL gY1_0
        JP gY0_0

bcTIME   ;время на cтр-во зданий /2
        DEFB 100,50,50,75,60,60,75,100,40
        DEFB 0
        DEFB 100,50,50,75,60,60,75,100,40