;--СТРАНИЦА 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