?login_element?

Subversion Repositories NedoOS

Rev

Rev 424 | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;-----cобытие------
  2.  
  3. EVENTr  ;смена героя - новое меню
  4.         XOR A
  5. _EXT    LD (ext_M),A
  6.         LD A,1
  7.         LD (F_FUNC),A
  8. EVENT   ;произошло событие, возможна смена меню
  9.         LD A,1
  10.         LD (_event),A
  11.         RET
  12.  
  13.  
  14. ;------обновление окна cоcтояний
  15.  
  16. TX_ADR  ;выч адр назв (A->HL)
  17.        if EGA
  18. ;[8*4*6 = 192]
  19. ;7*4*6
  20.         ;ld l,a
  21.         ;add a,a
  22.         ;add a,l
  23.         ;ld l,a ;x3
  24.         ;ld h,0
  25.         ;add hl,hl
  26.         LD L,A ;x3
  27.         ADD A,A
  28.         ADD A,L
  29.         LD L,A
  30.         LD E,A
  31.         XOR A
  32.         LD H,A
  33.         LD D,A
  34.         ADD HL,HL;x7
  35.         ADD HL,DE
  36.         ADD HL,HL
  37.         ADD HL,DE
  38.         ADD HL,HL;x7
  39.         add hl,hl
  40.         add hl,hl
  41.         LD DE,0xc000+(8*4*192) ;WNAMES
  42.         ADD HL,DE
  43.        else
  44.         LD L,A ;x3
  45.         ADD A,A
  46.         ADD A,L
  47.         LD L,A
  48.         LD E,A
  49.         XOR A
  50.         LD H,A
  51.         LD D,A
  52.         ADD HL,HL;x7
  53.         ADD HL,DE
  54.         ADD HL,HL
  55.         ADD HL,DE
  56.         ADD HL,HL;x7
  57.         LD DE,WNAMES
  58.         ADD HL,DE
  59.        endif
  60.         RET
  61.  
  62.  
  63. putTX   ;напр на выв cообщ A
  64.         LD HL,_msg
  65.         CP (HL)
  66.         RET Z ;еcли дублируетcя
  67.         LD (HL),A
  68.         CALL TX_ADR
  69.         LD (pTX_AD),HL
  70.         LD A,1
  71.         LD (pTXdel),A
  72.         RET
  73.  
  74. dirTX
  75. ;keep ix!!! иначе виснет, если нет ресурсов на ремонт или когда кончается мана при огненном дожде (там и iy тоже)
  76. ;но просто обернуть push-ами не помогает, только напрямую в wlih.asm/ZZ8n
  77.         CALL TX_ADR ;экcтр cообщ A
  78.         LD A,(pTXdel)
  79.         OR A
  80.         JR NZ,dtx1
  81.         LD DE,(TX_AD)
  82.         LD (pTX_AD),DE
  83. dtx1    LD (TX_AD),HL
  84.         LD A,6 ;t задер экcтр c
  85. dtx2    LD (pTXdel),A
  86.         CALL MEM7
  87.          if EGA
  88.          push ix
  89.          push iy
  90.          endif
  91.         CALL otx1
  92.          if EGA
  93.          pop iy
  94.          pop ix
  95.          endif
  96.         JP MEM0
  97.  
  98. outTX   LD HL,pTXdel
  99.         LD A,(HL)
  100.         OR A
  101.         RET Z
  102.         DEC (HL)
  103.         RET NZ
  104.         LD HL,(pTX_AD)
  105.         LD (TX_AD),HL
  106. otx1
  107.         if EGA
  108.         jp TX48x7
  109.         else
  110.         LD BC,#207
  111.         LD HL,#819 ;для isOVER
  112.         LD A,2
  113.         LD (V_FLAG),A
  114.         CALL isOVER
  115.         JR NC,otx2
  116.         CALL V_PUT1
  117.         CALL TX48x7
  118.         CALL V_GET1
  119.         CALL V_MRK1
  120.         JR otx0
  121. otx2    CALL TX48x7
  122. otx0    XOR A
  123.         LD (V_FLAG),A
  124.         RET
  125.         endif
  126.  
  127.  
  128. indSYM
  129.         if EGA
  130. ;%rlrrrlll
  131. _10=0x47
  132. _01=0xb8
  133. _00=0x00
  134. _11=0xff
  135. indsym_nomana
  136.         db _00,_00,_00,_00
  137.         db _00,_00,_00,_00
  138.         db _00,_00,_00,_00
  139.         db _00,_00,_00,_00
  140.         db _00,_00,_00,_00
  141. indsym_mana
  142.         db _00,_10,_00,_10
  143.         db _00,_11,_01,_10
  144.         db _00,_10,_10,_10
  145.         db _00,_10,_00,_10
  146.         db _00,_10,_00,_10
  147. indsym_percent
  148.         db _00,_11,_00,_10
  149.         db _00,_11,_01,_00
  150.         db _00,_00,_10,_00
  151.         db _00,_01,_01,_10
  152.         db _00,_10,_01,_10
  153.         else
  154.         DEFB #FF,#FF,#FF,#FF,#FF ;no mana indication
  155.         ;DEFB #DD,#C9,#D5,#DD,#DD
  156.         db 0b11011101 ;M
  157.         db 0b11001001
  158.         db 0b11010101
  159.         db 0b11011101
  160.         db 0b11011101
  161.         ;DEFB #CD,#CB,#F7,#E9,#D9
  162.         db 0b11001101 ;%
  163.         db 0b11001011
  164.         db 0b11110111
  165.         db 0b11101001
  166.         db 0b11011001
  167.         endif
  168.  
  169. oINDY   ;выв инд
  170.         if 1==0
  171.         CALL _TST#7
  172.         endif
  173.        
  174.         if 1==0
  175.  
  176.         if EGA
  177.         call setpgsscr40008000_current
  178.         call oINDYpp
  179.         call changescrpg_current
  180.         call setpgsscr40008000_current
  181.         call oINDYpp
  182.         call changescrpg_current
  183.         jp setpgsmain40008000
  184. oINDYpp
  185.         endif
  186.        
  187.         else
  188.        
  189.         if EGA
  190.         LD A,2
  191.         LD (V_FLAG),A ;cursor off
  192.         CALL V_PUT1 ;visible screen
  193.         call setpgsscr40008000_current
  194.         call oINDYpp
  195.         CALL V_GET1
  196.         call V_MRK1 ;на видимом экране (в это время G_MX не обновляется, т.к. стрелочка выключена)
  197.         xor a
  198.         LD (V_FLAG),A ;cursor on
  199.         CALL V_PUT2
  200.         call setpgsscr40008000
  201.         call oINDYpp
  202.         call setpgsmain40008000
  203.         jp V_GET_MRK2
  204. oINDYpp
  205.         endif
  206.  
  207.         endif
  208.        
  209.         if EGA
  210.         LD HL,scrbase+0x2000+(40*40)+0x1d
  211.         else
  212.         LD HL,SCR+189 ;0xbd
  213.         endif
  214.         LD BC,IND1
  215.         CALL oIND_
  216.         LD A,(IND2TP)
  217.         OR A
  218.        
  219.         if EGA
  220. ;mana indication symbol
  221.         PUSH AF
  222.         LD DE,indsym_nomana
  223.         CP 1
  224.         JR C,oiL1
  225.         LD DE,indsym_mana
  226.         JR Z,oiL1
  227.         LD DE,indsym_percent
  228. oiL1
  229.         LD HL,scrbase+(59*40)+0x1e
  230.         LD B,5
  231. oinL
  232.         push hl
  233.         LD A,(DE)
  234.         LD (HL),A
  235.         INC DE
  236.         ld a,h
  237.         add a,0x40
  238.         ld h,a
  239.         LD A,(DE)
  240.         LD (HL),A
  241.         INC DE
  242.         ld a,h
  243.         add a,0x20-0x40
  244.         ld h,a
  245.         LD A,(DE)
  246.         LD (HL),A
  247.         INC DE
  248.         ld a,h
  249.         add a,0x40
  250.         ld h,a
  251.         LD A,(DE)
  252.         LD (HL),A
  253.         INC DE
  254.         pop hl
  255.         ld a,l
  256.         add a,40
  257.         ld l,a
  258.         jr nc,$+3
  259.         inc h
  260.         DJNZ oinL
  261.         POP AF
  262.        
  263.         else ;~EGA
  264.        
  265.         PUSH AF
  266.         LD DE,indSYM
  267.         CP 1
  268.         JR C,oiL1
  269.         LD DE,indSYM+5
  270.         JR Z,oiL1
  271.         LD DE,indSYM+10
  272. oiL1
  273.         LD HL,SCR+#3FE
  274.         LD B,5
  275. oinL    LD A,(DE)
  276.         LD (HL),A
  277.         INC DE
  278.         INC H
  279.         DJNZ oinL
  280.         POP AF
  281.        
  282.         endif ;~EGA
  283.        
  284.         if EGA
  285.         LD HL,scrbase+0x2000+(40*40)+0x1e
  286.         else
  287.         LD HL,SCR+190 ;0xbe
  288.         endif
  289.         JR NZ,oin0
  290.         LD B,16
  291.         if EGA
  292.         ld e,0;%00111111
  293.         else
  294.         LD E,%10111110
  295.         endif
  296.         JR oin3
  297. oin0    LD BC,IND2
  298. oIND_   PUSH HL
  299.         LD A,(BC)
  300.         INC BC
  301.         LD L,A
  302.         LD H,0
  303.         ADD HL,HL
  304.         ADD HL,HL
  305.         ADD HL,HL
  306.         ADD HL,HL;x16
  307.         EX DE,HL
  308.         LD A,(BC)
  309.         LD L,A
  310.         CALL DIVB2;->E
  311.         LD A,E
  312.         OR A
  313.         JR NZ,oin1
  314.         DEC BC
  315.         LD A,(BC)
  316.         OR A
  317.         JR Z,oin1
  318.         LD A,1
  319. oin1    LD C,A
  320.         LD A,16
  321.         SUB C
  322.         POP HL
  323.         JR Z,oin2
  324.         LD B,A
  325.         if EGA
  326.         ld e,0;%00111111
  327.         else
  328.         LD E,%10111110
  329.         endif
  330.         CALL oin3
  331. oin2    LD A,C
  332.         OR A
  333.         RET Z
  334.         LD B,C
  335.         if EGA
  336.         ld e,%00011011
  337.         else
  338.         LD E,%10100010
  339.         endif
  340. oin3    LD (HL),E
  341.         if EGA
  342.         ld a,l
  343.         add a,40
  344.         ld l,a
  345.         jr nc,$+3
  346.         inc h
  347.         else
  348.         INC H
  349.         LD A,H
  350.         AND 7
  351.         JR NZ,oin31
  352.         LD A,H
  353.         SUB 8
  354.         LD H,A
  355.         LD A,L
  356.         ADD A,32
  357.         LD L,A
  358. oin31
  359.         endif
  360.         DJNZ oin3
  361.         RET
  362.  
  363. ;---------кнопки----------
  364. oBUT    LD HL,_BUT_H ;выв кнопок
  365.         EXX
  366.         LD DE,BUT_H ;выв гер
  367.         LD HL,#519
  368.         CALL BUT_1
  369.         LD HL,#A19  ;выв 6 кноп
  370.         LD B,3
  371. obu1    PUSH BC
  372.         PUSH HL
  373.         PUSH HL
  374.         CALL BUT_1
  375.         POP HL
  376.         INC L
  377.         INC L
  378.         INC L
  379.         CALL BUT_1
  380.         POP HL
  381.         INC H
  382.         INC H
  383.         INC H
  384.         POP BC
  385.         DJNZ obu1
  386.         RET
  387.  
  388. BUT_1   LD A,(DE)
  389.         INC DE
  390.         EXX
  391.         CP (HL)
  392.         LD (HL),A
  393.         INC HL
  394.         EXX
  395.         RET Z
  396.         PUSH DE
  397.         PUSH HL
  398.         LD L,A
  399.         LD H,0
  400.        
  401.         if EGA
  402.        
  403. ;*288 = 12 * 24 = 9 * 32
  404.         ld d,h
  405.         ld e,l
  406.         add hl,hl
  407.         add hl,hl
  408.         add hl,hl
  409.         add hl,de ;*9
  410.         add hl,hl
  411.         add hl,hl
  412.         add hl,hl
  413.         add hl,hl
  414.         add hl,hl ;*9*32
  415.         ld de,0xa000
  416.         add hl,de
  417.         bit 6,h
  418.         ld a,30
  419.         jr nz,BUT_1_nopg0
  420.         ld d,0x20
  421.         ;ld de,0x2000
  422.         add hl,de
  423.         dec a
  424. BUT_1_nopg0
  425.         call _128
  426.         ex de,hl
  427.        
  428.         else
  429.        
  430.         PUSH HL
  431.         ADD HL,HL
  432.         ADD HL,HL
  433.         PUSH HL
  434.         ADD HL,HL
  435.         ADD HL,HL
  436.         ADD HL,HL
  437.         ADD HL,HL
  438.         POP DE
  439.         ADD HL,DE
  440.         POP DE
  441.         ADD HL,DE;x69
  442.         LD DE,WBUTT+23
  443.         ADD HL,DE
  444.         EX DE,HL
  445.        
  446.         endif
  447.        
  448.         if 1==0
  449.        
  450.         POP HL
  451.         PUSH HL
  452.         PUSH DE
  453.         LD BC,#404
  454.         LD A,2
  455.         LD (V_FLAG),A
  456.         CALL isOVER ;курсор над кнопками?
  457.         JR NC,btt1
  458.        
  459.         if EGA
  460.         LD A,2
  461.         LD (V_FLAG),A ;выключить стрелочку
  462.         CALL V_PUT1 ;на видимом экране
  463.         pop de
  464.         pop hl
  465.         push de
  466.         push hl
  467.         call setpgsscr40008000_current
  468.         CALL PUTbut ;в конце делает setpgsmain40008000
  469.         CALL V_GET1
  470.         call V_MRK1 ;на видимом экране (в это время G_MX не обновляется, т.к. стрелочка выключена)
  471.         xor a
  472.         LD (V_FLAG),A ;включить стрелочку
  473.         pop hl
  474.         pop de
  475.         call setpgsscr40008000 ;на рисуемом экране
  476.         CALL PUTbut ;в конце делает setpgsmain40008000
  477.        
  478.         else ;~EGA
  479.  
  480.         CALL V_PUT1
  481.         POP DE
  482.         POP HL
  483.         CALL PUTbut
  484.         CALL V_GET1
  485.         CALL V_MRK1 ;перерисовываем курсор
  486.        
  487.         endif ;~EGA
  488.        
  489.         JR btt0
  490. btt1
  491. ;стрелочка не на панели (а вдруг она была на панели и нельзя будет восстановить?)
  492.         if EGA
  493.         LD A,2
  494.         LD (V_FLAG),A ;выключить стрелочку
  495.         CALL V_PUT1 ;на видимом экране
  496.         pop de
  497.         pop hl
  498.         push de
  499.         push hl
  500.         call setpgsscr40008000_current
  501.         CALL PUTbut
  502.         CALL V_GET1
  503.         call V_MRK1 ;на видимом экране (в это время G_MX не обновляется, т.к. стрелочка выключена)
  504.         xor a
  505.         LD (V_FLAG),A ;включить стрелочку
  506.         pop hl
  507.         pop de
  508.         call setpgsscr40008000 ;на рисуемом экране
  509.         CALL PUTbut
  510.         else ;~EGA
  511.         POP DE
  512.         POP HL
  513.         CALL PUTbut
  514.         endif ;~EGA
  515.        
  516. btt0    XOR A
  517.         LD (V_FLAG),A
  518.         POP DE
  519.         RET
  520.  
  521.         else
  522.        
  523.         POP HL
  524.  
  525.         if EGA
  526.         PUSH HL
  527.         PUSH DE
  528.  
  529.          ;LD BC,#404
  530.          ;LD A,2
  531.          ;LD (V_FLAG),A
  532.          ;CALL isOVER ;курсор над кнопками?
  533.          ;JR C,$ ;над кнопками
  534.  
  535.         LD A,2
  536.         LD (V_FLAG),A ;выключить стрелочку
  537.         CALL V_PUT1 ;на видимом экране
  538.         POP DE
  539.         POP HL
  540.         push de
  541.         push hl
  542.         call setpgsscr40008000_current
  543.         CALL PUTbut ;в конце делает setpgsmain40008000
  544.         CALL V_GET1
  545.         call V_MRK1 ;на видимом экране (в это время G_MX не обновляется, т.к. стрелочка выключена)
  546.         xor a
  547.         LD (V_FLAG),A ;включить стрелочку
  548.         CALL V_PUT2 ;на рисуемом экране
  549.         pop hl
  550.         pop de
  551.         call setpgsscr40008000 ;на рисуемом экране
  552.         CALL PUTbut ;в конце делает setpgsmain40008000
  553.         CALL V_GET_MRK2 ;на рисуемом экране
  554.        
  555.         else ;~EGA
  556.  
  557.         PUSH HL
  558.         PUSH DE
  559.         LD BC,#404
  560.         LD A,2
  561.         LD (V_FLAG),A
  562.         CALL isOVER ;курсор над кнопками?
  563.         JR NC,btt1        
  564.         CALL V_PUT1
  565.         POP DE
  566.         POP HL
  567.         CALL PUTbut
  568.         CALL V_GET1
  569.         CALL V_MRK1 ;перерисовываем курсор        
  570.         JR btt0
  571. btt1
  572. ;стрелочка не на панели (а вдруг она была на панели на другом экране и нельзя будет восстановить?)
  573.         POP DE
  574.         POP HL
  575.         CALL PUTbut
  576. btt0    XOR A
  577.         LD (V_FLAG),A
  578.        
  579.         endif ;~EGA
  580.  
  581.         POP DE
  582.         RET
  583.        
  584.         endif
  585.  
  586. PUTbut
  587.         if EGA
  588. ;hl=yx (chrs)
  589.         ld a,l
  590.         ld l,h
  591.         ld h,0
  592.         sla l
  593.         sla l
  594.         sla l ;y*8
  595.         ld b,0x40/8
  596.         ld c,l
  597.         add hl,hl
  598.         add hl,hl
  599.         add hl,bc
  600.         add hl,hl
  601.         add hl,hl
  602.         add hl,hl ;y*8*40
  603.          add a,scrbase&0xff        
  604.         add a,l
  605.         ld l,a
  606.         jr nc,$+3
  607.         inc h
  608. ;hl=scr
  609.         ld bc,0x180c
  610.         jp primgega_pixsz ;в конце делает setpgsmain40008000
  611.  
  612.         else ;~EGA
  613.        
  614.         LD B,3
  615. ptg0    PUSH BC
  616.         PUSH HL
  617.         PUSH DE
  618.          EX DE,HL
  619.          LD A,(HL)
  620.          PUSH AF
  621.          LD (HL),0
  622.          LD BC,-23
  623.          ADD HL,BC
  624.         EX DE,HL
  625.         LD BC,#301
  626.         CALL PUTSYM
  627.         POP AF
  628.         POP HL
  629.         LD (HL),A
  630.         LD BC,23
  631.         ADD HL,BC
  632.         EX DE,HL
  633.         POP HL
  634.         POP BC
  635.         INC L
  636.         DJNZ ptg0
  637.         RET
  638.        
  639.         endif
  640.  
  641.  
  642.  
  643. isOVER  ;?перкр курcор и обл вывода? NC-не перекр
  644.         ;HL-угол,BC-размер окна+1
  645.         LD A,(G_MX)
  646.         RRA
  647.         RRA
  648.         RRA
  649.         AND %11111
  650.         INC A
  651.         SUB L
  652.         CP C
  653.         RET NC
  654.         LD A,(G_MY)
  655.         RRA
  656.         RRA
  657.         RRA
  658.         AND %11111
  659.         INC A
  660.         SUB H
  661.         CP B
  662.         RET
  663.  
  664.  
  665. outNUM  ;выв чисел для шахты/избы
  666.         ;display "outNUM=",$
  667.         LD A,(BUT_N+2) ;текущие номера изображений кнопок (6 шт)
  668.         CP 80
  669.         JR Z,oNmine
  670.         CP 77
  671.         RET NZ
  672.         ;изба
  673.         CALL oNUMh
  674.         LD E,C
  675.         LD HL,#E1D
  676.         CALL oNbcd
  677.         CALL oHOMh
  678.         LD E,A
  679.         LD HL,#B1D
  680. oNbcd   PUSH HL
  681.         CALL BCD
  682.         POP DE
  683.         LD A,(DCstr+3)
  684.         CALL iPRINT
  685.         LD A,(DCstr+4)
  686.         JP iPRINT
  687.         ;
  688. oNUMh   ;число юнитов, которым нужна пища ->C
  689.         LD HL,HUMAN
  690.         LD D,0
  691.         LD BC,#3000
  692. oNh1    LD A,(HL)
  693.         OR A
  694.         JR NZ,oNh2
  695.         LD E,16
  696.         JR oNh3
  697. oNh2    LD E,4
  698.         ADD HL,DE
  699.         LD A,(HL)
  700.         CP 18
  701.         JR NC,oNh4
  702.         INC C
  703. oNh4    LD E,12
  704. oNh3    ADD HL,DE
  705.         DJNZ oNh1
  706.         RET
  707.         ;
  708. oHOMh   LD A,8 ;число предост пищи (4*N_ферм+1)->A
  709.         CALL searcB
  710.         ADD A,A
  711.         ADD A,A
  712.         INC A
  713.         RET
  714.         ;
  715. oNmine  ;шахта
  716.         LD A,(SEL_T)
  717.         CP 8
  718.         RET NZ
  719.         LD A,(SEL_N)
  720.         CALL B_IX
  721.         LD E,(IX+4)
  722.         LD D,(IX+5)
  723.         CALL BCD
  724.         LD DE,#E19
  725.         LD HL,DCstr+1
  726.         LD B,4
  727. oNm1    LD A,(HL)
  728.         INC HL
  729.         CALL iPRINT
  730.         DJNZ oNm1
  731.         XOR A
  732.         CALL iPRINT
  733.         XOR A
  734.         JP iPRINT
  735.  
  736. searcB  ;поиск здания A; кол-во построеных->A
  737.         LD C,A
  738.         XOR A
  739.         EX AF,AF
  740.         LD HL,HBUILD
  741.         LD D,0
  742.         LD B,32
  743. oNi1    LD A,(HL)
  744.         OR A
  745.         JR NZ,oNi2
  746.         LD E,8
  747.         JR oNi3
  748. oNi2    INC L
  749.         INC L
  750.         LD A,(HL)
  751.         CP 10
  752.         JR C,oNi6
  753.         SUB 10
  754. oNi6    CP C    ;то?
  755.         LD E,6
  756.         JR NZ,oNi3
  757.         INC HL
  758.         INC HL
  759.         LD E,4
  760.         LD A,(HL) ;построено?
  761.         INC A
  762.         CP 253
  763.         JR NC,oNi3
  764.         EX AF,AF
  765.         INC A
  766.         EX AF,AF
  767. oNi3    ADD HL,DE
  768.         DJNZ oNi1
  769.         EX AF,AF
  770.         RET
  771.  
  772. DCMM    DEFW 10000,1000,100,10,1
  773. ;DCstr  DEFM "roXet"
  774. ;       DEFB #7F
  775.  
  776. BCD     ;BCD-конв DE->DCstr
  777.         EXX
  778.         LD HL,DCstr
  779.         EXX
  780.         LD HL,DCMM
  781.         LD B,5
  782. bcd0    LD A,(HL)
  783.         INC HL
  784.         PUSH HL
  785.         LD H,(HL)
  786.         LD L,A
  787.         EX DE,HL
  788.         XOR A
  789. bcd1    AND A
  790.         SBC HL,DE
  791.         JR C,bcd2
  792.         INC A
  793.         JR bcd1
  794. bcd2    ADD HL,DE
  795.         EX DE,HL
  796.         EXX
  797.         LD (HL),A
  798.         INC HL
  799.         EXX
  800.         POP HL
  801.         INC HL
  802.         DJNZ bcd0
  803.         RET
  804.  
  805. iPRINT  ;inv печать символа А в поз DE(yx)
  806.         PUSHs
  807.         if EGA
  808.         call prcharinv
  809.         else
  810.         LD C,A
  811.         CALL SCOORD
  812.         EX DE,HL
  813.         LD A,C
  814.         ADD A,A
  815.         LD BC,(FONT)
  816.         LD L,A
  817.         LD H,0
  818.         ADD HL,HL
  819.         ADD HL,HL
  820.         ADD HL,BC
  821.         LD B,4
  822. iPR1    LD A,(HL)
  823.         CPL
  824.         LD (DE),A
  825.         INC HL
  826.         INC D
  827.         LD A,(HL)
  828.         CPL
  829.         LD (DE),A
  830.         INC HL
  831.         INC D
  832.         DJNZ iPR1
  833.         endif
  834.         POPs
  835.         INC E
  836.         RET
  837.  
  838. spc_DO  ;1-команда иcп по space ;2-исполняется только для героев
  839.         DEFB 0,1,0,0,0,0,0,2,2,2
  840.         DEFB 2,2,2,0,0,0,1,1,1,1
  841.         DEFB 0,0,0,0,0,1,1,1,1,1
  842.         DEFB 1,1,1,1,1,1,1,1,1,1
  843.         DEFB 1,1,1,1,1,2,2,2,0,2
  844.         ;оcтальные -0
  845.  
  846.         if EGA
  847. ;sq1=scrbase+25+(10*8*40)
  848. sqrADR
  849.         ;dw sq1,sq1+3
  850.         ;dw sq1+(3*8*40),sq1+3+(3*8*40)
  851.         ;dw sq1+(6*8*40),sq1+3+(6*8*40)
  852.         dw 0x4fc8,0x4fe0
  853.         dw 0x67c8,0x67e0
  854.         dw 0x7fc8,0x7fe0
  855.         ;dw 0x50c9,0x50e1
  856.         ;dw 0x68c9,0x68e1
  857.         ;dw 0x80c9,0x80e1
  858.         else
  859. sq1     EQU ATR+345
  860. sqrADR  DEFW sq1,sq1+3,sq1+96,sq1+99,sq1+192,sq1+195
  861.         endif
  862.  
  863.  
  864. sqrCOL  ;закрасить квадр. c HL цветом A
  865.         if EGA
  866. ;TODO
  867.         ret
  868.         else
  869.         PUSH DE
  870.         LD DE,30
  871.         LD (HL),A
  872.         INC L
  873.         LD (HL),A
  874.         INC L
  875.         LD (HL),A
  876.         ADD HL,DE
  877.         LD (HL),A
  878.         INC L
  879.         LD (HL),A
  880.         INC L
  881.         LD (HL),A
  882.         ADD HL,DE
  883.         LD (HL),A
  884.         INC L
  885.         LD (HL),A
  886.         INC L
  887.         LD (HL),A
  888.         POP DE
  889.         RET
  890.         endif
  891.  
  892. clearbuttonframes
  893.         if EGA
  894. ;убираем все обводки кнопок (для избы/шахты только внешнюю рамочку, которую не могли затереть кнопки при перерисовке)
  895.         ld de,0x4fc8
  896.         ld hl,0x4fc8+0x4830
  897.         LD A,(BUT_N+2) ;текущие номера изображений кнопок (6 шт)
  898.         CP 80
  899.         JR Z,outSQRizba ;шахта
  900.         CP 77
  901.         jr z,outSQRizba ;изба
  902.         ;ld de,0x4fc8
  903.         ld hl,0x4fc8+0x4818
  904.         ;xor a
  905.         ;ex af,af'
  906. ;de=top left
  907. ;hl=bottom right
  908. ;a'=pattern
  909.         call clearbuttonframes_frame;outBOXsolid_nomargins
  910.         ld de,0x4fe0
  911.         ld hl,0x4fe0+0x4818
  912.         ;xor a
  913.         ;ex af,af'
  914. ;de=top left
  915. ;hl=bottom right
  916. ;a'=pattern
  917.         call clearbuttonframes_frame;outBOXsolid_nomargins
  918.         ld de,0x4fc8+0x1800
  919.         ld hl,0x4fc8+0x3030
  920. outSQRizba
  921. clearbuttonframes_frame
  922.         xor a
  923.         ex af,af'
  924. ;de=top left
  925. ;hl=bottom right
  926. ;a'=pattern
  927.         jp outBOXsolid_nomargins
  928.         endif
  929.  
  930. ;выв 6и квдр
  931. outSQR
  932.         LD A,(F_FUNC) ;функция по нажатию Space - идти или атаковать/нести, или фармить (#ff = ничего?)
  933.         LD B,A
  934.         LD A,(N_FUN1) ;нажатый квдр ;FIRBUT пишет туда (_n_FUN)
  935.         cp 0xff
  936.         jr z,$+3
  937.         ld b,a
  938.         LD DE,sqrADR
  939.         XOR A
  940.        
  941. oQ0     PUSH AF
  942.         CP B
  943.        if EGA
  944.         LD A,(DE)
  945.         INC DE
  946.         LD L,A
  947.         LD A,(DE)
  948.         INC DE
  949.         LD H,A ;hl=YX кнопки
  950.         JR NZ,oQ1 ;не та кнопка
  951.         ld a,0x99;ff
  952.         ;jr z,$+3
  953.         ;xor a ;не та кнопка - стираем обводку
  954.         ex af,af'
  955.        push de
  956.        ex de,hl
  957.        ld a,d
  958.        add a,24
  959.        ld h,a
  960.        ld a,e
  961.        add a,24
  962.        ld l,a      
  963. ;de=top left
  964. ;hl=bottom right
  965. ;a'=pattern
  966.         push bc
  967.         call outBOXsolid_nomargins
  968.         pop bc
  969.         pop de
  970. oQ1
  971.        else
  972.         LD A,(MCOLOR) ;цвет панели (#28/#30) [текущ действие?]
  973.         LD C,A
  974.         JR NZ,oQ1 ;не та кнопка
  975.         ;та кнопка - красим красным
  976.         INC C
  977.         INC C ;+2=красный
  978.         LD A,(isCOLR) ;игра цветная?
  979.         OR A
  980.         JR NZ,oQ1
  981.         RES 3,C
  982. oQ1     LD A,(DE)
  983.         INC DE
  984.         LD L,A
  985.         LD A,(DE)
  986.         INC DE
  987.         LD H,A ;hl=адрес атрибута кнопки
  988.         LD A,(HL)
  989.         CP C
  990.         LD A,C
  991.         CALL NZ,sqrCOL ;не тот атрибут - красим
  992.        endif
  993.         POP AF
  994.         INC A
  995.         CP 6
  996.         JR C,oQ0
  997.        
  998.         LD A,(N_FUN1) ;нажатый квдр ;FIRBUT пишет туда (_n_FUN)
  999.         CP #FF
  1000.         JR Z,oQ5
  1001.         LD C,A
  1002.         LD HL,BUT_N ;текущие номера изображений кнопок (6 шт)
  1003.         CALL BA
  1004.         CP 77
  1005.         JR NC,oQ5
  1006.         LD A,C
  1007.         LD HL,sqrADR
  1008.         CALL WT
  1009.        
  1010.         LD A,(HL)
  1011.         OR %01111001
  1012.         CALL sqrCOL
  1013.        
  1014. oQ5    
  1015.         if EGA
  1016.         ret
  1017.         else
  1018.         LD A,(SEL_T) ;квдр героя
  1019.         CP 7
  1020.         LD A,#38
  1021.         JR C,oQ2
  1022.         LD A,#39
  1023.         JR NZ,oQ2
  1024.         LD A,#3A
  1025. oQ2     LD HL,ATR+185
  1026.         CP (HL)
  1027.         RET Z
  1028.         JR sqrCOL
  1029.         endif
  1030.  
  1031. ;----------------
  1032. mayBLT  ;можно ли разместить здание? Z/NZ-да/нет;
  1033.         LD HL,(PX)
  1034.         CALL GMAP2
  1035.         LD A,(szPLAT)
  1036.         CP 1
  1037.         JP Z,aB001
  1038.         LD C,A
  1039.         LD B,A
  1040.         LD DE,64
  1041. aB0     PUSH HL
  1042.         PUSH BC
  1043. aB1     LD A,(HL)
  1044.         OR A
  1045.         JR NZ,aBN
  1046.         RES 4,H
  1047.         LD A,(HL)
  1048.         SET 4,H
  1049.         DEC A
  1050.         CP 7-1
  1051.         JR C,aB1a
  1052.         CP 17-1
  1053.         JR C,aBN
  1054.         CP 26-1
  1055.         JR NC,aBN
  1056. aB1a    INC L
  1057.         DJNZ aB1
  1058.         POP BC
  1059.         POP HL
  1060.         ADD HL,DE
  1061.         DEC C
  1062.         JR NZ,aB0
  1063.         LD HL,(PX)
  1064.         CALL GMAP
  1065.         LD A,(szPLAT)
  1066.         CP 2
  1067.         JR NZ,aBh3
  1068.  
  1069.       ;дом 2X2
  1070.         LD A,(MASTER)
  1071.         ADD A,7
  1072.         LD DE,-65
  1073.         ADD HL,DE
  1074.         CP (HL)
  1075.         RET Z
  1076.         INC L
  1077.         CP (HL)
  1078.         RET Z
  1079.         INC L
  1080.         CP (HL)
  1081.         RET Z
  1082.         INC L
  1083.         CP (HL)
  1084.         RET Z
  1085.         LD DE,61
  1086.         ADD HL,DE
  1087.         CP (HL)
  1088.         RET Z
  1089.         INC L
  1090.         INC L
  1091.         INC L
  1092.         CP (HL)
  1093.         RET Z
  1094.         ADD HL,DE
  1095.         CP (HL)
  1096.         RET Z
  1097.         INC L
  1098.         INC L
  1099.         INC L
  1100.         CP (HL)
  1101.         RET Z
  1102.         ADD HL,DE
  1103.         CP (HL)
  1104.         RET Z
  1105.         INC L
  1106.         CP (HL)
  1107.         RET Z
  1108.         INC L
  1109.         CP (HL)
  1110.         RET Z
  1111.         INC L
  1112.         CP (HL)
  1113.         RET
  1114. aBN     POP HL
  1115.         POP HL
  1116.         OR A ;nz
  1117.         RET
  1118.  
  1119. aBh3  ;дом 3Х3
  1120.         LD A,(MASTER)
  1121.         ADD A,7
  1122.         LD DE,-65
  1123.         ADD HL,DE
  1124.         LD B,5
  1125. aBhL0   CP (HL)
  1126.         RET Z
  1127.         INC L
  1128.         DJNZ aBhL0
  1129.         DEC L
  1130.         LD DE,60
  1131.         LD B,3
  1132. aBhL1   ADD HL,DE
  1133.         CP (HL)
  1134.         RET Z
  1135.         INC L
  1136.         INC L
  1137.         INC L
  1138.         INC L
  1139.         CP (HL)
  1140.         RET Z
  1141.         DJNZ aBhL1
  1142.         ADD HL,DE
  1143.         LD B,5
  1144. aBhL2   CP (HL)
  1145.         RET Z
  1146.         INC L
  1147.         DJNZ aBhL2
  1148.         DEC B
  1149.         RET NZ
  1150. aB001 ;1x1
  1151.         SET 4,H
  1152.         LD A,(HL)
  1153.         OR A
  1154.         RET NZ
  1155.         RES 4,H
  1156.         LD A,(HL)
  1157.         OR A
  1158.         JR Z,aBN1
  1159.         CP 26
  1160.         JR C,aBB1
  1161.         CP 51
  1162.         RET NZ
  1163.         LD A,(waPLAT)
  1164.         DEC A
  1165.         RET NZ
  1166. aBB1    LD A,(waPLAT)
  1167.         OR A
  1168.         JR NZ,aBwa
  1169.         ;дорожка
  1170.         LD A,(MASTER)
  1171.         ADD A,7
  1172.         CP (HL)
  1173.         JR Z,aBN1
  1174.         DEC L
  1175.         CP (HL)
  1176.         RET Z
  1177.         INC L
  1178.         INC L
  1179.         CP (HL)
  1180.         RET Z
  1181.         LD DE,-65
  1182.         ADD HL,DE
  1183.         CP (HL)
  1184.         RET Z
  1185.         LD DE,128
  1186.         ADD HL,DE
  1187.         CP (HL)
  1188.         RET
  1189. aBwa    ;стенка
  1190. maxWAL  EQU 4+1 ;макс расст до стенки+1
  1191.          LD A,(HL)
  1192.          CP 7
  1193.          JR C,aBW0
  1194.          CP 17
  1195.          JR C,aBN1
  1196. aBW0    LD DE,(PX)
  1197.         LD HL,HBUILD
  1198. aBW1    LD A,(HL)
  1199.         OR A
  1200.         JR Z,aBW2
  1201.         SUB E
  1202.         JR NC,aBW3
  1203.         NEG
  1204. aBW3    CP maxWAL
  1205.         JR NC,aBW2
  1206.         INC L
  1207.         LD A,(HL)
  1208.         DEC L
  1209.         SUB D
  1210.         JR NC,aBW4
  1211.         NEG
  1212. aBW4    CP maxWAL
  1213.         JR NC,aBW2
  1214.         XOR A
  1215.         RET
  1216. aBW2    LD A,L
  1217.         ADD A,8
  1218.         LD L,A
  1219.         JR NZ,aBW1
  1220. aBN1    XOR A
  1221.         INC A
  1222.         RET
  1223.  
  1224.  
  1225. M_PLAT ;показать площадку под стр-во
  1226.         if EGA==0
  1227.         CALL ofPLAT
  1228.         endif
  1229.         LD A,(F_FUNC)
  1230.         CP #FF
  1231.         RET NC
  1232.         LD HL,BUT_N ;текущие номера изображений кнопок (6 шт)
  1233.         CALL BA
  1234.         CP 16
  1235.         RET C
  1236.         CP 18
  1237.         JR C,M_P1x1
  1238.         CP 26
  1239.         RET C
  1240.         CP 44
  1241.         RET NC
  1242.         LD C,2
  1243.         CP 34
  1244.         JR Z,M_Pxx
  1245.         CP 43
  1246.         JR Z,M_Pxx
  1247.         LD C,3
  1248. M_Pxx   LD A,C
  1249.         LD (szPLAT),A
  1250.         JR M_Pxz
  1251. M_P1x1  SUB 16
  1252.         LD (waPLAT),A
  1253.         LD A,1
  1254.         LD (szPLAT),A
  1255. M_Pxz   CALL mayBLT ;можно ли разместить здание? Z/NZ-да/нет
  1256.         if EGA
  1257.         ld a,0x99
  1258.         jr nz,$+4
  1259.         ld a,0xff
  1260.         else
  1261.         LD A,#10 ;саn't
  1262.         JR NZ,plt2
  1263.         LD A,(isCOLR)
  1264.         OR A
  1265.         LD A,#39
  1266.         JR Z,plt2
  1267.         LD A,(COLOR)
  1268.         XOR #8
  1269. plt2   
  1270.         endif
  1271.         EX AF,AF
  1272.         LD HL,(BX)
  1273.         LD A,L
  1274.         CP 24
  1275.         RET NC
  1276.         AND #FE
  1277.         LD L,A
  1278.         LD A,H
  1279.         AND #FE
  1280.         LD H,A
  1281.         LD A,(szPLAT)
  1282.         ADD A,A
  1283.         LD C,A
  1284.         LD B,A
  1285.         LD A,24
  1286.         SUB B
  1287.         SUB L
  1288.         JR NC,plt0
  1289.         ADD A,B
  1290.         LD B,A
  1291. plt0   
  1292.         LD A,24
  1293.         SUB C
  1294.         SUB H
  1295.         JR NC,plt1
  1296.         ADD A,C
  1297.         LD C,A
  1298. plt1    LD (bcPLAT),BC
  1299.         CALL STS ;выб.осн.экр (только адрес)
  1300. ;h=Y/8
  1301. ;l=X/8
  1302. ;c=hgt/8
  1303. ;b=wid/8
  1304.         if EGA
  1305.          ;ld hl,0
  1306.         ;jr $
  1307.         add hl,hl
  1308.         add hl,hl
  1309.         add hl,hl
  1310.         ld a,c
  1311.         add a,a
  1312.         add a,a
  1313.         add a,a
  1314.         ld d,h
  1315.         add a,h
  1316.         dec a
  1317.         ld h,a
  1318.         ld a,b
  1319.         add a,a
  1320.         add a,a
  1321.         add a,a
  1322.         ld e,l
  1323.         add a,l
  1324.         dec a
  1325.         ld l,a
  1326. ;de=top left
  1327. ;hl=bottom right
  1328.         jp outBOXsolid
  1329.        
  1330.         else
  1331.  
  1332.         CALL ACOORD ;hl=attr addr
  1333.         LD (adPLAT),HL
  1334.         LD (isPLAT),A
  1335.         EX AF,AF ;a=color
  1336.         JR PA0
  1337.         endif
  1338.  
  1339.         if EGA==0
  1340. ofPLAT  LD HL,isPLAT;cтереть площадку
  1341.         LD A,(HL)
  1342.         OR A
  1343.         RET Z
  1344.         XOR A
  1345.         LD (HL),A
  1346.         INC HL
  1347.         INC HL
  1348.         LD C,(HL)
  1349.         INC HL
  1350.         LD B,(HL)
  1351.         INC HL
  1352.         LD A,(HL)
  1353.         INC HL
  1354.         LD H,(HL)
  1355.         LD L,A
  1356.         LD A,(isCOLR)
  1357.         OR A
  1358.         LD A,#30
  1359.         JR Z,PA0a
  1360.         LD A,(COLOR)
  1361. PA0a    HALT ;??
  1362. PA0     LD E,A
  1363. PA1     PUSH BC
  1364.         PUSH HL
  1365. PA2     LD A,(HL)
  1366.         AND #40
  1367.         OR E
  1368.         LD (HL),A
  1369.         INC L
  1370.         DJNZ PA2
  1371.         POP HL
  1372.         LD BC,32
  1373.         ADD HL,BC
  1374.         POP BC
  1375.         DEC C
  1376.         JR NZ,PA1
  1377.         RET
  1378.         endif
  1379.  
  1380. ;------------новый герой------
  1381.  
  1382. MANA    EQU #F0 ;-макс.знач. магич. маны
  1383. HEALTH  ;нач.здоровье (+ [#100 * нач.магия])
  1384.         DEFW 50,50,50,60,70,#4000+60,#4000+50,200,120
  1385.         DEFW 50,50,50,60,70,#4000+60,#4000+50,200,120
  1386.         DEFW #E000+50,#D000+38,#E000+50,88,50,50,150,#E400+200,#E400+180
  1387.  
  1388.  
  1389. NEWHER  ;A-0,1,2:чел/кунг/пл HL-поз;A'-тип
  1390.         ;вых Z/NZ - O.K./нет места
  1391.         PUSH HL
  1392.         CALL sFREE
  1393.         POP HL
  1394.         RET NZ ;nz ->>
  1395.         CALL IX0_HL
  1396.          LD (IX+14),L ;исходная позиц для охранников врага
  1397.          LD (IX+15),H
  1398.         PUSH HL
  1399.         CALL GMAP2
  1400.         LD (HL),C
  1401.         EX AF,AF
  1402.         LD (IX+4),A
  1403.         LD C,A
  1404.         CALL RND
  1405.         AND 7
  1406.         LD (IX+2),A
  1407.         CALL IX_98
  1408.         LD (IX+3),A
  1409.         LD (IX+7),A
  1410.         LD HL,HEALTH
  1411.         LD A,C
  1412.         CALL WT
  1413.         LD (IX+5),L
  1414.         LD (IX+6),H
  1415.         LD A,C
  1416.         LD HL,AT_TY_
  1417.         CALL BA
  1418.         POP HL
  1419. NEWiy_  PUSH HL ;вх A=0/1 -2x2/3x3
  1420.         CP 1
  1421.         JR Z,nH1
  1422.         LD H,0
  1423.         ADD HL,HL
  1424.         ADD HL,HL
  1425.         ADD HL,HL
  1426.         ADD HL,HL
  1427.         LD (IY+0),L
  1428.         LD (IY+1),H
  1429.         POP AF
  1430.         INC A
  1431.         ADD A,A
  1432.         ADD A,A
  1433.         LD L,A
  1434.         LD H,0
  1435.         ADD HL,HL
  1436.         ADD HL,HL
  1437.         DEC HL
  1438.         DEC HL
  1439.         DEC HL
  1440.         LD (IY+2),L
  1441.         LD (IY+3),H
  1442.         XOR A
  1443.         RET ;z ->>
  1444. nH1     LD H,0
  1445.         ADD HL,HL
  1446.         ADD HL,HL
  1447.         ADD HL,HL
  1448.         ADD HL,HL
  1449.         DEC HL
  1450.         DEC HL
  1451.         DEC HL
  1452.         DEC HL
  1453.         LD (IY+0),L
  1454.         LD (IY+1),H
  1455.         POP AF
  1456.         INC A
  1457.         ADD A,A
  1458.         ADD A,A
  1459.         LD L,A
  1460.         LD H,0
  1461.         ADD HL,HL
  1462.         ADD HL,HL
  1463.         INC HL
  1464.         INC HL
  1465.         INC HL
  1466.         LD (IY+2),L
  1467.         LD (IY+3),H
  1468.         XOR A
  1469.         RET ;z ->>
  1470.  
  1471. CLRALL  LD HL,HUMAN
  1472.         LD DE,HUMAN+1
  1473.         LD BC,2047
  1474.         LD (HL),0
  1475.         LDIR
  1476.         RET
  1477.  
  1478. sFREE   ;поиск св.места и уст IX/IY (Вх:A-чей)
  1479.         ; (вых z/nz - ok/нет места, C - номер+#80)
  1480.         CP 1
  1481.         LD HL,HUMAN
  1482.         LD BC,#3000
  1483.         LD DE,16
  1484.         JR C,sF1
  1485.         LD HL,KUNGE
  1486.         LD C,#30
  1487.         JR Z,sF1
  1488.         LD HL,SLAVE
  1489.         LD BC,#660
  1490. sF1     INC L;  (ix+1)==0
  1491.         PUSH BC
  1492.         PUSH HL
  1493.         CALL sF10
  1494.         LD A,C
  1495.         POP HL
  1496.         POP BC
  1497.         JR Z,sF2
  1498.         DEC L ; (ix)==0
  1499.         CALL sF10
  1500.         LD A,C
  1501.         RET NZ ;nz->нет места
  1502. sF2     LD C,A
  1503.         SET 7,C
  1504.         CALL N_IXIY
  1505.         XOR A
  1506.         RET ;z->выделено место (ix,iy)
  1507.         ;
  1508. sF10    LD A,(HL) ;z-ok
  1509.         OR A
  1510.         RET Z
  1511.         INC C
  1512.         ADD HL,DE
  1513.         DJNZ sF10
  1514.         RET ;nz
  1515.  
  1516. stayON  ;поиск места, чтобы поставить героя (hl)
  1517.         LD C,3
  1518. sY00    CALL stay1
  1519.         DEC H
  1520.         DEC L
  1521.         LD B,C
  1522. sYupL   CALL stay1
  1523.         INC L
  1524.         DJNZ sYupL
  1525.         DEC L
  1526.         INC H
  1527.         LD B,C
  1528.         DEC B
  1529.         DEC B
  1530. sYrtL   CALL stay1
  1531.         INC H
  1532.         DJNZ sYrtL
  1533.         LD B,C
  1534. sYdwL   CALL stay1
  1535.         DEC L
  1536.         DJNZ sYdwL
  1537.         INC L
  1538.         DEC H
  1539.         LD B,C
  1540.         DEC B
  1541.         DEC B
  1542. sYlfL   CALL stay1
  1543.         DEC H
  1544.         DJNZ sYlfL
  1545.         INC C
  1546.         INC C
  1547.         JR sY00
  1548.  
  1549. stay1   ;пров позиции; вых POP AF!!
  1550.         LD A,L
  1551.         CP 63
  1552.         RET NC
  1553.         LD A,H
  1554.         CP 63
  1555.         RET NC
  1556.         PUSH HL
  1557.         CALL GMAP2
  1558.         LD A,(HL)
  1559.         POP HL
  1560.         OR A
  1561.         RET NZ
  1562.         POP AF ;!
  1563.         RET
  1564.  
  1565. CORiy_  ;коррекция коорд (E+iy(0,1); D+iy(2,3))
  1566.         PUSH IY
  1567.         POP HL
  1568. cii_    CALL cii0
  1569.         INC HL
  1570.         LD E,D
  1571. cii0    LD A,(HL)
  1572.         ADD A,E
  1573.         LD (HL),A
  1574.         INC HL
  1575.         EX AF,AF
  1576.         LD A,E
  1577.         RLCA
  1578.         JR C,cii1
  1579.         EX AF,AF
  1580.         RET NC
  1581.         INC (HL)
  1582.         RET
  1583. cii1    EX AF,AF
  1584.         LD A,(HL)
  1585.         ADC A,#FF
  1586.         LD (HL),A
  1587.         RET
  1588.  
  1589. ;--------------------
  1590.  
  1591. colorL  ;цвета индикаторов
  1592.         if EGA
  1593.         db 0b00011011
  1594.         db 0b00100100
  1595.         db 0b00110110
  1596.         db 0b00101101
  1597.         db 0b00100100
  1598.         db 0b00010010
  1599.         else
  1600.         DEFB #58,#60,#70,#28,#60,#50
  1601.         endif
  1602.  
  1603. outLED  ;подсветка 6-и индикаторов
  1604.         ;+0-атакует враг
  1605.         ;+1-здание построено
  1606.         ;+2-здание/шахта разрушены
  1607.         ;+3-атакуем мы
  1608.         ;+4-появился новый человек
  1609.         ;+5-наше здание горит
  1610.        if EGA
  1611. ;TODO обновлять только при изменении
  1612.         LD HL,colorL
  1613.         EXX
  1614.         LD HL,LED ;внутри level!
  1615.         ld de,scrbase+(40*160)+24
  1616.         call outled3
  1617.         ld de,scrbase+(40*176)+24
  1618. outled3
  1619.         call outled1
  1620.         call outled1
  1621. outled1
  1622.         push de
  1623.         push hl
  1624.         LD A,(HL)
  1625.         OR A
  1626.         JR Z,oLL2
  1627.         DEC (HL)
  1628.         AND 1
  1629.         JR Z,oLL2
  1630.         EXX
  1631.         LD A,(HL) ;цвет индикатора
  1632.         EXX
  1633.         JR oLL1
  1634. oLL2    LD A,0b00001001 ;#8
  1635. oLL1    ld (outledcolor),a
  1636.         ex de,hl
  1637.         call setpgsscr40008000
  1638.         ld c,8
  1639. outledcols0
  1640.         ld de,40
  1641.         ld b,16
  1642. outledcol0
  1643.         ld a,(hl)
  1644.         or a
  1645.         jr z,outledcol0_skip
  1646.         ;выделим нужные пиксели белым
  1647.         cp 8
  1648.         jr c,$+4
  1649.         or 0x38
  1650.         ld (hl),a
  1651.         and 7
  1652.         ld a,(hl)
  1653.         jr z,$+4
  1654.         or 7
  1655. outledcolor=$+1
  1656.         and 0 ;наложим нужный цвет
  1657.         ld (hl),a
  1658. outledcol0_skip
  1659.         add hl,de
  1660.         djnz outledcol0
  1661.         ld de,0x4000-(16*40)
  1662.         ld a,0x9f;0xa0
  1663.         cp h
  1664.         adc hl,de
  1665.         jp pe,outledcol0_columnq ;в половине случаев
  1666. ;8000->с000 (надо 6000) или a000->e001 (надо 4001)
  1667.          inc a
  1668.         xor h
  1669.         ld h,a
  1670. outledcol0_columnq
  1671.         dec c
  1672.         jr nz,outledcols0
  1673.         pop hl
  1674.         pop de
  1675.         inc hl
  1676.         inc de
  1677.         inc de
  1678.         exx
  1679.         inc hl
  1680.         exx
  1681.         jp setpgsmain40008000
  1682.  
  1683.        else
  1684.         LD HL,colorL
  1685.         EXX
  1686.         LD HL,LED
  1687.         LD DE,ATR+664
  1688.         PUSH DE
  1689.         CALL oLL_
  1690.         LD DE,ATR+728
  1691.         PUSH DE
  1692.         CALL oLL_
  1693.         POP HL
  1694.         LD DE,ATR+760
  1695.         LD C,6
  1696.         LDIR
  1697.         POP HL
  1698.         LD DE,ATR+696
  1699.         LD C,6
  1700.         LDIR
  1701.         RET
  1702.         ;
  1703. oLL_    LD B,3
  1704. oLL0    LD A,(HL)
  1705.         OR A
  1706.         JR Z,oLL2
  1707.         DEC (HL)
  1708.         AND 1
  1709.         JR Z,oLL2
  1710.         EXX
  1711.         LD A,(HL)
  1712.         EXX
  1713.         JR oLL1
  1714. oLL2    LD A,#8
  1715. oLL1    INC HL
  1716.         LD (DE),A
  1717.         INC E
  1718.         LD (DE),A
  1719.         INC E
  1720.         EXX
  1721.         INC HL
  1722.         EXX
  1723.         DJNZ oLL0
  1724.         RET
  1725.        endif
  1726.  
  1727. ;--[**]----супер энергия ;отключить на время - войти в режим карты
  1728. HiENER  LD C,32
  1729.         LD A,(MORTE)
  1730.         CP 86
  1731.         RET NZ
  1732.         CALL Z,loop_H
  1733. hie0    LD (IX+5),C
  1734.         ADD IX,DE
  1735.         DJNZ hie0
  1736.         RET
  1737.