?login_element?

Subversion Repositories NedoOS

Rev

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

  1. ;-----------Вывод спрайтов героев
  2.         if EGA==0
  3. t7tab   DEFB 23,#20 ;[**]
  4.         DEFB 11,#21
  5.         DEFB 12,#60
  6.         DEFB 13,#40  ;           LD HL,#4060
  7.         DEFB 24,#F8    ;           JR NZ,tst70
  8.         DEFB 25,#21
  9.         DEFB 18,#23      ;           INC HL
  10.         DEFB 19,#0D      ;           DEC C
  11.         DEFB 29,#C9     ;       RET
  12.         DEFB 20,#20
  13.         DEFB 21,#FB    ;           JR NZ,tst70
  14.         DEFB 26,#FE
  15.         DEFB 15,#00
  16.         DEFB 16,#35  ;           LD BC,#3500
  17.         DEFB 17,#AE      ;   tst70   XOR (HL)
  18.         DEFB 28,#BE      ;           CP (HL)
  19.         DEFB 22,#05      ;           DEC B
  20.         DEFB 27,#FF  ;           LD HL,#FFFE
  21.         DEFB 14,#01
  22.         DEFB 0
  23.  
  24. ;старшие байты адресов (к ним прибавляется (направление*2 + шаг)*64)
  25. AT_HER  DEFB #C0,#C6,#CA,#CE,#D2
  26.         DEFB #D8,#DE,#E4,#F1
  27.         DEFB #C4,#CA,#D0,#D6,#DC,#DC
  28.  
  29. ;старшие байты адресов фазы удара (к ним прибавляется (направление)*64)
  30. AT_WAR  DEFB #C4,#C4,#C4,#00,#D6
  31.         DEFB #DC,#E2,#ED,#FA
  32.         DEFB #C8,#CE,#D4,#DA,#00,#00
  33.         endif
  34.  
  35.         if EGA
  36. theropg
  37. ;pg,shift in pg
  38.         db 8,0 ;0=крестьянин
  39.         db 8,24 ;1=крестьянин с дровами?
  40.         db 8,24+16 ;2=крестьянин с мешком?
  41.         db 9,0 ;3=лучник
  42.         db 9,16 ;4=мечник
  43.         db 10,0 ;5=священник
  44.         db 10,24 ;6=волшебник
  45.         db 11,0 ;7=катапульта
  46.         db 12,0 ;8=всадник
  47.  
  48.         db 13,0 ;9=пеон
  49.         db 13,24 ;10=пеон с дровами?
  50.         db 13,24+16 ;11=пеон с мешком?
  51.         db 14,0 ;12=лангольер
  52.         db 14,16 ;13=кунг
  53.         db 15,0 ;14=некромант
  54.         db 15,24 ;15=варлок
  55.         db 16,0 ;16=катапульта на гусеницах
  56.         db 17,0 ;17=грюнвер
  57.  
  58.         db 18,0 ;18=паук
  59.         db 18,24 ;19=скелет
  60.         db 19,0 ;20=скорпион
  61.         db 19,24 ;21=звезда
  62.         db 20,0 ;22=князь
  63.         db 20,16 ;23=гризольда
  64.         db 21,0 ;24=костолом
  65.         db 22,0 ;25=демон
  66.         db 23,0 ;26=стеногрыз
  67.        
  68. ;tbodypg ;все 16 рисунков в pg 24
  69. ;pg,shift in pg
  70.  
  71. ;0..3=человек (меньше=дохлее)
  72. ;4..7=кунг (меньше=дохлее)
  73. ;8..10=шарик (меньше=дохлее)
  74. ;11=звезда
  75. ;12=мокрое место
  76. ;13=паук
  77. ;14=скорпион
  78. ;15=скелет
  79. ;(>=17 используется для трупа катапульты)
  80.        
  81.         endif
  82.  
  83. ;для рамки
  84. ;в зависимости от полного ID
  85. ;0: 16x16, 1: 24x24, 2: 24x16
  86. AT_TY_  DEFB 0,0,0,0,0, 0,0,1,1
  87. ;далее продолжение в AT_TYP
  88. ;для героя
  89. ;в зависимости от ID (для кунгов вычитается 9)
  90. ;0: 16x16, 1: 24x24, 2: 24x16
  91. AT_TYP  DEFB 0,0,0,0,0, 0,0,1,1
  92.         DEFB 0,0,0,0,0,0, 2,2,2
  93. ;0=крестьянин
  94. ;1=крестьянин с дровами?
  95. ;2=крестьянин с мешком?
  96. ;3=лучник
  97. ;4=мечник
  98. ;5=священник
  99. ;6=волшебник
  100. ;7=катапульта
  101. ;8=всадник
  102.  
  103. ;9=пеон
  104. ;10=пеон с дровами?
  105. ;11=пеон с мешком?
  106. ;12=лангольер
  107. ;13=кунг
  108. ;14=некромант
  109. ;15=варлок
  110. ;16=катапульта на гусеницах
  111. ;17=грюнвер
  112.  
  113. ;18=паук
  114. ;19=скелет
  115. ;20=скорпион
  116. ;21=звезда
  117. ;22=князь
  118. ;23=гризольда
  119. ;24=костолом
  120. ;25=демон
  121. ;26=стеногрыз
  122.  
  123. ;виды трупов:
  124. ;0..3=человек (меньше=дохлее)
  125. ;4..7=кунг (меньше=дохлее)
  126. ;8..10=шарик (меньше=дохлее)
  127. ;11=звезда
  128. ;12=мокрое место
  129. ;13=паук
  130. ;14=скорпион
  131. ;15=скелет
  132. ;(>=17 используется для трупа катапульты)
  133.  
  134. XY0pos  LD A,(X0) ;выч смещ _X0pos в пикс
  135.         CALL _xy0
  136.         LD (_X0pos),HL
  137.         LD A,(Y0)
  138.         CALL _xy0
  139.         LD (_Y0pos),HL
  140.         RET
  141. _xy0    LD L,A
  142.         LD H,0
  143.         LD D,H
  144.         LD E,H
  145.         ADD HL,HL
  146.         ADD HL,HL
  147.         ADD HL,HL
  148.         ADD HL,HL
  149.         EX DE,HL
  150.         XOR A
  151.         SBC HL,DE
  152.         RET
  153.  
  154.         if EGA==0
  155. ;*M+
  156.         macro HENs lbl
  157.         POP DE
  158.         DJNZ $+5
  159.         JP SET_SP
  160.         INC H
  161.         LD A,H
  162.         AND 7
  163.         JP NZ,lbl
  164.         LD A,L
  165.         ADD A,32
  166.         LD L,A
  167.         JR C,lbl
  168.         LD A,H
  169.         SUB 8
  170.         LD H,A
  171.         JR lbl
  172.         ENDM
  173.  
  174. HE_N    DEFW HE0,HE1,HE2,HE3,HE4,HE5,HE6,HE7
  175. HE_L    DEFW SET_SP,HE1L,HE2L,HE3L,HE4L,HE5L,HE6L,HE7L
  176.  
  177. ;HE0L   EQU SET_SP
  178.  
  179. HE0     LD A,(HL)
  180.         OR E
  181.         XOR D
  182.         LD (HL),A
  183.         HENs HE0
  184.  
  185. HE1     LD A,E
  186.         RRCA
  187.         LD C,A
  188.         AND #7F
  189.         OR (HL)
  190.         LD (HL),A
  191.         LD A,C
  192.         AND #80
  193.         INC L
  194.         OR (HL)
  195.         LD (HL),A
  196.         LD A,D
  197.         RRCA
  198.         LD C,A
  199.         AND #80
  200.         XOR (HL)
  201.         LD (HL),A
  202.         LD A,C
  203.         AND #7F
  204.         DEC L
  205.         XOR (HL)
  206.         LD (HL),A
  207.         HENs HE1
  208.  
  209.  
  210. HE2     LD A,E
  211.         RRCA
  212.         RRCA
  213.         LD C,A
  214.         AND #3F
  215.         OR (HL)
  216.         LD (HL),A
  217.         LD A,C
  218.         AND #C0
  219.         INC L
  220.         OR (HL)
  221.         LD (HL),A
  222.         LD A,D
  223.         RRCA
  224.         RRCA
  225.         LD C,A
  226.         AND #C0
  227.         XOR (HL)
  228.         LD (HL),A
  229.         LD A,C
  230.         AND #3F
  231.         DEC L
  232.         XOR (HL)
  233.         LD (HL),A
  234.         HENs HE2
  235.  
  236. HE3     LD A,E
  237.         RRCA
  238.         RRCA
  239.         RRCA
  240.         LD C,A
  241.         AND #1F
  242.         OR (HL)
  243.         LD (HL),A
  244.         LD A,C
  245.         AND #E0
  246.         INC L
  247.         OR (HL)
  248.         LD (HL),A
  249.         LD A,D
  250.         RRCA
  251.         RRCA
  252.         RRCA
  253.         LD C,A
  254.         AND #E0
  255.         XOR (HL)
  256.         LD (HL),A
  257.         LD A,C
  258.         AND #1F
  259.         DEC L
  260.         XOR (HL)
  261.         LD (HL),A
  262.         HENs HE3
  263.  
  264. HE4     LD A,E
  265.         RRCA
  266.         RRCA
  267.         RRCA
  268.         RRCA
  269.         LD C,A
  270.         AND #F
  271.         OR (HL)
  272.         LD (HL),A
  273.         LD A,C
  274.         AND #F0
  275.         INC L
  276.         OR (HL)
  277.         LD (HL),A
  278.         LD A,D
  279.         RRCA
  280.         RRCA
  281.         RRCA
  282.         RRCA
  283.         LD C,A
  284.         AND #F0
  285.         XOR (HL)
  286.         LD (HL),A
  287.         LD A,C
  288.         AND #F
  289.         DEC L
  290.         XOR (HL)
  291.         LD (HL),A
  292.         HENs HE4
  293.  
  294. HE5     LD A,E
  295.         RLCA
  296.         RLCA
  297.         RLCA
  298.         LD C,A
  299.         AND #7
  300.         OR (HL)
  301.         LD (HL),A
  302.         LD A,C
  303.         AND #F8
  304.         INC L
  305.         OR (HL)
  306.         LD (HL),A
  307.         LD A,D
  308.         RLCA
  309.         RLCA
  310.         RLCA
  311.         LD C,A
  312.         AND #F8
  313.         XOR (HL)
  314.         LD (HL),A
  315.         LD A,C
  316.         AND #7
  317.         DEC L
  318.         XOR (HL)
  319.         LD (HL),A
  320.         HENs HE5
  321.  
  322. HE6     LD A,E
  323.         RLCA
  324.         RLCA
  325.         LD C,A
  326.         AND #3
  327.         OR (HL)
  328.         LD (HL),A
  329.         LD A,C
  330.         AND #FC
  331.         INC L
  332.         OR (HL)
  333.         LD (HL),A
  334.         LD A,D
  335.         RLCA
  336.         RLCA
  337.         LD C,A
  338.         AND #FC
  339.         XOR (HL)
  340.         LD (HL),A
  341.         LD A,C
  342.         AND #3
  343.         DEC L
  344.         XOR (HL)
  345.         LD (HL),A
  346.         HENs HE6
  347.  
  348. HE7     LD A,E
  349.         RLCA
  350.         LD C,A
  351.         AND #1
  352.         OR (HL)
  353.         LD (HL),A
  354.         LD A,C
  355.         AND #FE
  356.         INC L
  357.         OR (HL)
  358.         LD (HL),A
  359.         LD A,D
  360.         RLCA
  361.         LD C,A
  362.         AND #FE
  363.         XOR (HL)
  364.         LD (HL),A
  365.         LD A,C
  366.         AND #1
  367.         DEC L
  368.         XOR (HL)
  369.         LD (HL),A
  370.         HENs HE7
  371.  
  372. HE1L    LD A,E
  373.         RRCA
  374.         AND #80
  375.         OR (HL)
  376.         LD (HL),A
  377.         LD A,D
  378.         RRCA
  379.         AND #80
  380.         XOR (HL)
  381.         LD (HL),A
  382.         HENs HE1L
  383.  
  384. HE2L    LD A,E
  385.         RRCA
  386.         RRCA
  387.         AND #C0
  388.         OR (HL)
  389.         LD (HL),A
  390.         LD A,D
  391.         RRCA
  392.         RRCA
  393.         AND #C0
  394.         XOR (HL)
  395.         LD (HL),A
  396.         HENs HE2L
  397.  
  398. HE3L    LD A,E
  399.         RRCA
  400.         RRCA
  401.         RRCA
  402.         AND #E0
  403.         OR (HL)
  404.         LD (HL),A
  405.         LD A,D
  406.         RRCA
  407.         RRCA
  408.         RRCA
  409.         AND #E0
  410.         XOR (HL)
  411.         LD (HL),A
  412.         HENs HE3L
  413.  
  414. HE4L    LD A,E
  415.         RRCA
  416.         RRCA
  417.         RRCA
  418.         RRCA
  419.         AND #F0
  420.         OR (HL)
  421.         LD (HL),A
  422.         LD A,D
  423.         RRCA
  424.         RRCA
  425.         RRCA
  426.         RRCA
  427.         AND #F0
  428.         XOR (HL)
  429.         LD (HL),A
  430.         HENs HE4L
  431.  
  432. HE5L    LD A,E
  433.         RLCA
  434.         RLCA
  435.         RLCA
  436.         AND #F8
  437.         OR (HL)
  438.         LD (HL),A
  439.         LD A,D
  440.         RLCA
  441.         RLCA
  442.         RLCA
  443.         AND #F8
  444.         XOR (HL)
  445.         LD (HL),A
  446.         HENs HE5L
  447.  
  448. HE6L    LD A,E
  449.         RLCA
  450.         RLCA
  451.         AND #FC
  452.         OR (HL)
  453.         LD (HL),A
  454.         LD A,D
  455.         RLCA
  456.         RLCA
  457.         AND #FC
  458.         XOR (HL)
  459.         LD (HL),A
  460.         HENs HE6L
  461.  
  462. HE7L    LD A,E
  463.         RLCA
  464.         AND #FE
  465.         OR (HL)
  466.         LD (HL),A
  467.         LD A,D
  468.         RLCA
  469.         AND #FE
  470.         XOR (HL)
  471.         LD (HL),A
  472.         HENs HE7L
  473.        
  474.         endif ;~EGA
  475.  
  476. BCOORD  LD      A,D ;de(0-191,0-31) -- hl
  477.         RRCA
  478.         RRCA
  479.         RRCA
  480.         AND     %00011000
  481.         LD      H,A
  482.         LD      A,D
  483.         AND     %00000111
  484.         ADD     A,H
  485.         ADD     A,DSCR/256
  486.         LD      H,A
  487.         LD      A,D
  488.         RLA
  489.         RLA
  490.         AND     %11100000
  491.         OR      E
  492.         LD      L,A
  493.         RET
  494.  
  495. XPUT    ;формированиe вывода для героя IX
  496. ;IY=блок координат героя
  497.         XOR A
  498. _XPUT   EX AF,AF ;Z-герой, NZ-(A=1:рамка/A>1:снаряд)
  499.         LD L,(IY+2) ;получение Xh Yh SHIFTh
  500.         LD H,(IY+3) ;Ypos
  501.         LD DE,(_Y0pos)
  502.         ADD HL,DE
  503.         LD A,H
  504.         OR A
  505.         RET NZ
  506.         LD A,L
  507.         CP 192+32;24
  508.         RET NC
  509.         LD (Yh),A
  510.         LD L,(IY+0)
  511.         LD H,(IY+1) ;Xpos
  512.         LD DE,(_X0pos)
  513.         ADD HL,DE
  514.         LD A,H
  515.         OR A
  516.         JR NZ,UT3
  517.         LD A,L
  518.         CP 192
  519.         RET NC
  520.         LD L,A
  521.         SRL L
  522.         JR UT2
  523. UT3     INC A
  524.         RET NZ
  525.         LD A,L
  526.         CP 192+32;40
  527.         RET C
  528.         LD L,A
  529.         SRA L
  530. UT2     AND 7
  531.         LD (SHIFTh),A
  532.         SRA L
  533.         SRA L
  534.         LD A,L
  535.         JP M,UT21
  536.         CP 24
  537.         RET NC
  538.         JR UT22
  539. UT21    CP -8
  540.         RET C
  541. UT22    LD (Xh),A
  542.         ;получть Wh,Hh,IMGh, выбрать страницу
  543.        
  544.         if EGA
  545.  
  546.         EX AF,AF
  547.         JR Z,WY_0 ;героя, а не рамка/снаряд
  548.         ;для рамки
  549.         DEC A
  550.         JP NZ,WYbull;->обр снарядов ;заполняет данные и переходит на HeF1
  551.         CALL MEM1
  552.         LD A,(IX+4) ;ID (0..26)
  553.         LD HL,AT_TY_
  554.         CALL BA ;hl+=a: A=(HL)
  555.         DEC A
  556.         JR Z,WYr33
  557.         ;LD BC,#1002 ;HhWh
  558.         ;LD DE,fr2x2h
  559.         ld iy,fr2x2h;testspr+4
  560.         ;ld bc,0x1002 ;HhWh
  561.         JR WYr
  562. WYr33   ;LD BC,#1803 ;HhWh
  563.         ;LD DE,fr3x3h
  564.         ld iy,fr3x3h;testspr+4
  565.         ;ld bc,0x1803 ;HhWh
  566. WYr     JP HeF1
  567. WY_0   
  568.         LD A,(IX+0) ;x героя (0=труп)
  569.         OR A
  570.         LD A,(IX+4) ;ID (0..26)
  571.         JR NZ,WY2
  572.         ;для трупа a=вид трупа
  573.          add a,24
  574.         add a,a
  575.         ld (WYbody_where),a
  576.          ld a,23;24
  577.         call _128
  578. WYbody_where=$+2 ;LSB
  579.         ld iy,(0xc000)
  580.         JP HeF1
  581.         ;
  582. WY2     ;для героя
  583.         ;ld a,24;8
  584.  
  585.         ld hl,theropg ;pg, shift in pg
  586.         add a,a
  587.         add a,l
  588.         ld l,a
  589.         jr nc,$+3
  590.         inc h
  591.         ld a,(hl)
  592.         call _128
  593.         inc hl
  594.  
  595.         LD D,(IX+2) ;направление (0..7)
  596.         LD A,(IX+3) ;фаза (=0 - целиком в квадрате) ;или (%1ibttttt, где i-удар b-назад ttttt-задержка) ;или (%10000xxx, где ххх-ожидание свободного прохода)
  597.         CP #80
  598.         JR C,H221 ;не бьёт
  599.         CP #A0
  600.         LD A,0
  601.         JR C,H221 ;не фаза удара
  602.         LD A,D ;направление (0..7)
  603.         add a,16
  604.         JR H222
  605. H221   
  606.         AND 1 ;шаг0 или шаг1
  607.         ADD A,D
  608.         ADD A,D ;a=направление*2 + шаг
  609. H222
  610.         add a,(hl) ;ahift in pg
  611.         add a,a
  612.         ld (H222_where),a
  613.  
  614.         ;ld iy,testspr+4
  615.          ;jr $
  616. H222_where=$+2 ;LSB
  617.         ld iy,(0xc000)
  618.         ;ld bc,0x1002 ;HhWh
  619.  
  620.         else
  621. ;       --------------------
  622.         EX AF,AF
  623.         JR Z,WY_0 ;героя, а не рамка/снаряд
  624.         ;для рамки
  625.         DEC A
  626.       if EGA==0
  627.         JP NZ,WYbull;->обр снарядов
  628.       endif
  629.         CALL MEM1
  630.         LD A,(IX+4) ;ID (0..26)
  631.         LD HL,AT_TY_
  632.         CALL BA ;hl+=a: A=(HL)
  633.         DEC A
  634.         JR Z,WYr33
  635.         LD BC,#1002 ;HhWh
  636.         LD DE,fr2x2h
  637.         JR WYr
  638. WYr33   LD BC,#1803 ;HhWh
  639.         LD DE,fr3x3h
  640. WYr     JP HeF1
  641. WY_0    LD A,(IX+0) ;x героя (0=труп)
  642.         OR A
  643.         LD A,(IX+4) ;ID (0..26)
  644.         JR NZ,WY2
  645.         ;для трупа a=вид трупа
  646.         CP 17
  647.         JR C,WYTr
  648.         CALL MEM6 ;труп катап
  649.         LD DE,WMISC3 ;gfxdata трупа катапульты
  650.         LD BC,#1803 ;HhWh
  651.         JP HeF1
  652. WYTr    ADD A,A
  653.         ADD A,A
  654.         ADD A,A
  655.         LD L,A
  656.         LD H,0
  657.         ADD HL,HL
  658.         ADD HL,HL
  659.         ADD HL,HL ;вид трупа*64
  660.         LD DE,WMISC2
  661.         ADD HL,DE
  662.         EX DE,HL ;gfxdata
  663.         CALL MEM1
  664.         LD BC,#1002 ;HhWh
  665.         JP HeF1
  666.         ;
  667. WY2     ;для героя
  668.         LD E,A ;ID (0..26)
  669.         SUB 9
  670.         JR NC,WY1
  671.         if 1==0
  672.         LD A,4 ;люди
  673.         else
  674.         call MEM_humans
  675.         endif
  676.         JR WY0
  677. WY1     LD E,A ;ID - 9 (0..17)
  678.         CP 9
  679.         JR C,WY04
  680.         CP 16
  681.         if 1==0
  682.         LD A,6 ;креат 18-24
  683.         JR C,WY0
  684.         XOR A   ;креат 25-26
  685.         JR WY0
  686.         else
  687.         jr c,WY_MEM_char0
  688.         call MEM_char1 ;креат 25-26
  689.         JR WY0
  690. WY_MEM_char0
  691.         call MEM_char0 ;креат 18-24
  692.         JR WY0
  693.         endif
  694. WY04   
  695.         if 1==0
  696.         LD A,3  ;кунги
  697.         else
  698.         call MEM_kungs
  699.         endif
  700. WY0    
  701.         if 1==0
  702.         CALL MEM ;page
  703.         endif
  704.         LD A,E ;ID (0..26)
  705.         LD HL,AT_TYP
  706.         CALL BA ;hl+=a: A=(HL)
  707.         CP 1
  708.         LD D,(IX+2) ;направление (0..7)
  709.         LD A,(IX+3) ;фаза (=0 - целиком в квадрате) ;или (%1ibttttt, где i-удар b-назад ttttt-задержка) ;или (%10000xxx, где ххх-ожидание свободного прохода)
  710.         JR Z,H3x3
  711.         JP NC,H3x2
  712. H2x2    CP #80
  713.         JR C,H221 ;не бьёт
  714.         CP #A0
  715.         LD A,0
  716.         JR C,H221 ;не фаза удара
  717.         LD A,D ;направление (0..7)
  718.         LD BC,AT_WAR
  719.         JR H222
  720. H221    LD BC,AT_HER
  721.         AND 1 ;шаг0 или шаг1
  722.         ADD A,D
  723.         ADD A,D ;a=направление*2 + шаг
  724. H222    ADD A,A
  725.         ADD A,A
  726.         ADD A,A
  727.         ADD A,A
  728.         LD L,A
  729.         LD H,0
  730.         ADD HL,HL
  731.         ADD HL,HL ;*64
  732.         LD A,E ;ID
  733.         EX DE,HL
  734.         LD L,C
  735.         LD H,B
  736.         LD BC,#1002 ;HhWw
  737. H225    CALL BA
  738.         LD H,A
  739.         LD L,0
  740.         ADD HL,DE
  741.         EX DE,HL
  742.         JR HeF1
  743.         ;
  744.         ;H3x2 - в WLIB2x3
  745.         ;
  746. H3x3    CP #80
  747.         JR C,H331 ;не бьёт
  748.         CP #A0
  749.         LD A,0
  750.         JR C,H331 ;не фаза удара
  751.         LD BC,#ED00 ;gfxdata
  752.         LD A,D ;направление
  753.         JR H332
  754. H331    LD BC,#E400 ;gfxdata
  755.         AND 1 ;шаг0 или шаг1
  756.         ADD A,D
  757.         ADD A,D
  758.         LD D,A ;направление*2 + шаг
  759. H332    ADD A,A
  760.         ADD A,D
  761.         LD D,A
  762.         ADD A,A
  763.         ADD A,D
  764.         LD L,A
  765.         LD H,0
  766.         ADD HL,HL
  767.         ADD HL,HL
  768.         ADD HL,HL
  769.         ADD HL,HL ;*144
  770.         ADD HL,BC ;+gfxdata
  771.         LD BC,#1803 ;HhWh
  772.         LD A,E ;ID
  773.         CP 7
  774.         JR Z,H333 ;катапульта на колёсах
  775.         LD DE,#D80
  776.         ADD HL,DE ;катапульта на гусеницах
  777. H333    EX DE,HL
  778.         endif ;~EGA
  779. ;       --------------------
  780. HeF1    ;корректировка ширины,длины и др. по границам окна
  781.         if EGA
  782.         ld c,(iy-4) ;Wh
  783.         srl c
  784.         srl c
  785.         ld b,(iy-3) ;Hh
  786.         endif
  787.  
  788. ;YhXh (Xh в знакоместах)
  789. ;SHIFTh = 0..7 (xlow)
  790. ;bc=HhWh (Wh в знакоместах)
  791. ;de=gfxdata
  792.         LD (Wh),BC
  793.         LD HL,(Xh)
  794.         LD A,H
  795.         SUB B
  796.         LD (Yh),A
  797.        
  798.         if EGA==0
  799.        
  800.         LD A,L
  801.         CP 24
  802.         JR NC,eF3
  803.         SUB 24
  804.         NEG
  805.         CP C
  806.         JR NC,eF4
  807.         LD C,A
  808.         JR eF4
  809. eF3     INC A
  810.         LD L,A
  811.         ADD A,C
  812.          RET M
  813.          RET Z
  814.         LD C,A
  815.         LD A,-1
  816.         LD (Xh),A
  817.         LD A,L
  818.         NEG
  819.         LD L,A
  820.         JR Z,eF4
  821.         XOR A
  822. eF5     ADD A,B
  823.         ADD A,B
  824.         DEC L
  825.         JR NZ,eF5
  826.         ADD A,E
  827.         LD E,A
  828.         JR NC,eF4
  829.         INC D
  830. eF4    
  831.         LD A,(Yh)
  832.         CP 192
  833.         JR NC,eF1
  834.         SUB 192
  835.         NEG
  836.         CP B
  837.         JR NC,eF2
  838.         LD B,A
  839.         JR eF2
  840. eF1     LD L,A
  841.         ADD A,B
  842.          RET M
  843.          RET Z
  844.         LD B,A
  845.         XOR A
  846.         LD (Yh),A
  847.         LD A,L
  848.         NEG
  849.         ADD A,A
  850.         ADD A,E
  851.         LD E,A
  852.         JR NC,eF2
  853.         INC D
  854. eF2    
  855.         endif
  856.  
  857. ;собств вывод
  858. ;YhXh (Xh в знакоместах)
  859. ;HhWh (Wh в знакоместах)
  860. ;SHIFTh = 0..7 (xlow)
  861. ;de=gfxdata
  862.         if EGA
  863.       ;ld iy,testspr+4
  864.         jp prsprega
  865.         else
  866.  
  867.         PUSH DE
  868.         LD HL,HE_N
  869.         LD DE,(Xh)
  870.         BIT 7,E
  871.         JR Z,HRU8
  872.         LD HL,HE_L
  873.         LD E,0
  874. HRU8    EX AF,AF
  875.         LD A,(SHIFTh)
  876.         CALL WT
  877.         LD (JP_SUB+1),HL
  878.         CALL BCOORD
  879.         POP DE
  880. HRU0    PUSH HL
  881.         PUSH DE
  882.         PUSH BC
  883.         LD (IMGh),HL
  884.         CALL HRUp
  885.         POP BC
  886.         POP DE
  887.         POP HL
  888.         DEC C
  889.         JR Z,HRU5
  890.         EX AF,AF
  891.         JR NZ,HRUm
  892.         INC L
  893.         JR HRUm1
  894. HRUm    LD A,(SHIFTh)
  895.         PUSH HL
  896.         LD HL,HE_N
  897.         CALL WT
  898.         LD (JP_SUB+1),HL
  899.         POP HL
  900. HRUm1   XOR A
  901.         EX AF,AF
  902.         LD A,(Hh)
  903.         ADD A,A
  904.         ADD A,E
  905.         LD E,A
  906.         JR NC,HRU0
  907.         INC D
  908.         JR HRU0
  909.  
  910. HRU5    RET
  911.  
  912. HRUp    EX DE,HL
  913.         LD E,(HL)
  914.         INC HL
  915.         LD D,(HL)
  916.         INC HL
  917.         LD (SET_SP+1),SP
  918.         LD SP,HL
  919.         LD HL,(IMGh)
  920.         JP JP_SUB
  921.         endif ;~EGA
  922.  
  923. vBUF    EQU #7E00;BUF512
  924.         ;256 - eсть в строке?(ptr+1/0); 256-1_2:IX,3_4:IY,5й:next+1/null
  925. vSORT   ;видео сортировка
  926.         LD HL,vBUF
  927.         LD DE,vBUF+1
  928.         LD BC,192+24
  929.         LD (HL),0
  930.         LDIR
  931.         ;
  932.         EXX
  933.         LD HL,vBUF+1+256
  934.         EXX
  935.         LD IX,HUMAN
  936.         LD B,102
  937.         LD IY,XY ;зачем отдельный массив? в каждом проходе прибавляем 4
  938. vS0     LD A,(IX+0) ;x героя (0=труп)
  939.         OR A
  940.         JR Z,vS6 ;???
  941.         LD L,(IY+0)
  942.         LD H,(IY+1) ;Xpos
  943.         LD DE,(_X0pos)
  944.         ADD HL,DE
  945.         LD A,H
  946.         OR A
  947.         JR NZ,vS3
  948.         LD A,L
  949.         CP 192
  950.         JR NC,vS1
  951.         JR vS4
  952. vS6     LD A,(IX+1) ;y героя (0=пусто)
  953.         OR A
  954.         JR Z,vS1 ;нет героя
  955.         LD L,0
  956.         JR vS4_
  957. vS3     INC A
  958.         JR NZ,vS1
  959.         LD A,L
  960.         CP 192+40
  961.         JR C,vS1
  962. vS4     LD L,(IY+2)
  963.         LD H,(IY+3) ;Ypos
  964.         LD DE,(_Y0pos)
  965.         ADD HL,DE
  966.         LD A,H
  967.         OR A
  968.         JR NZ,vS1
  969.         LD A,L
  970.         CP 192+24
  971.         JR NC,vS1
  972. vS4_    LD H,vBUF/256
  973.         LD A,(HL)
  974.         OR A
  975.         JR Z,vS5
  976.         LD H,vBUF/256+1
  977. vSM6    LD L,A
  978.         LD A,(HL)
  979.         OR A
  980.         JR NZ,vSM6
  981. vS5     EXX
  982.         PUSH IX
  983.         POP DE
  984.         LD (HL),E
  985.         INC L
  986.         LD (HL),D
  987.         INC L
  988.         PUSH IY
  989.         POP DE
  990.         LD (HL),E
  991.         INC L
  992.         LD (HL),D
  993.         INC L
  994.         LD A,L
  995.         LD (HL),0
  996.         INC L
  997.         EXX
  998.         LD (HL),A
  999.         RET Z ;более 51 героя в экране
  1000. vS1     LD DE,16
  1001.         ADD IX,DE ;следующий герой
  1002.         LD E,4
  1003.         ADD IY,DE ;следующий блок координат
  1004.         DJNZ vS0
  1005.         RET
  1006.  
  1007. vXPUT   ;отсорт вывод
  1008.         CALL outSEL
  1009.         LD HL,vBUF
  1010. vX0     LD A,(HL)
  1011.         OR A
  1012.         JR Z,vX1
  1013.         PUSH HL
  1014.         LD H,vBUF/256+1
  1015. vX2     LD L,A
  1016.         PUSH HL
  1017.         DEC L
  1018.         LD D,(HL)
  1019.         DEC L
  1020.         LD E,(HL)
  1021.         PUSH DE
  1022.         POP IY ;адрес в блоке координат
  1023.         DEC L
  1024.         LD D,(HL)
  1025.         DEC L
  1026.         LD E,(HL)
  1027.         PUSH DE
  1028.         POP IX ;адрес героя
  1029.         CALL XPUT
  1030.         POP HL
  1031.         LD A,(HL)
  1032.         OR A
  1033.         JR NZ,vX2
  1034.         POP HL
  1035. vX1     INC L
  1036.         LD A,L
  1037.         CP 192+24
  1038.         JR C,vX0
  1039.         RET
  1040.  
  1041. vrYLF   LD A,#D8 ;ограничители
  1042.         LD HL,#1000
  1043.         JR vrYs
  1044. vrYRT   LD A,#FF
  1045.         LD HL,#C098
  1046. vrYs    LD DE,#D800
  1047.         JR vr_
  1048. vrXUP   LD DE,#2800
  1049.         JR vrXs
  1050. vrXDW   LD DE,#D8B0
  1051. vrXs    LD A,#D8
  1052.         LD HL,#C000
  1053. vr_     CALL vrSET
  1054.         CALL XY0pos
  1055.         ;сортировка по окну
  1056.         LD HL,vBUF
  1057.         LD DE,vBUF+1
  1058.         LD BC,256
  1059.         LD (HL),0
  1060.         LDIR
  1061.         ;
  1062.         EXX
  1063.         LD HL,vBUF+256
  1064.         EXX
  1065.         LD IX,HUMAN
  1066.         LD B,102
  1067.         LD IY,XY
  1068. vrS0    LD A,(IX)
  1069.         OR A
  1070.         JR Z,vrS6
  1071.         LD L,(IY+0)
  1072.         LD H,(IY+1)
  1073.         LD DE,(_X0pos)
  1074.         ADD HL,DE
  1075.         LD A,H
  1076.         OR A
  1077.         JR NZ,vrS3
  1078.         LD A,L
  1079. vrH     CP 0    ;<-H
  1080.         JR NC,vrS1
  1081. vrL     CP 0    ;<-L
  1082.         JR C,vrS1
  1083.         JR vrS4
  1084. vrS6    LD A,(IX+1)
  1085.         OR A
  1086.         JR Z,vrS1
  1087.         LD L,0
  1088.         JR vrS4_
  1089. vrS3    INC A
  1090.         JR NZ,vrS1
  1091.         LD A,L
  1092. vrA     CP 0    ;<-A
  1093.         JR C,vrS1
  1094. vrS4    LD L,(IY+2)
  1095.         LD H,(IY+3)
  1096.         LD DE,(_Y0pos)
  1097.         ADD HL,DE
  1098.         LD A,H
  1099.         OR A
  1100.         JR NZ,vrS1
  1101.         LD A,L
  1102. vrD     CP 0    ;<-D
  1103.         JR NC,vrS1
  1104. vrE     CP 0    ;<-E
  1105.         JR C,vrS1
  1106. vrS4_   LD H,vBUF/256
  1107.         LD A,(HL)
  1108.         OR A
  1109.         JR Z,vrS5
  1110.         LD H,vBUF/256+1
  1111. vrSM6   LD L,A
  1112.         LD A,(HL)
  1113.         OR A
  1114.         JR NZ,vrSM6
  1115. vrS5    EXX
  1116.         PUSH IX
  1117.         POP DE
  1118.         LD (HL),E
  1119.         INC L
  1120.         LD (HL),D
  1121.         INC L
  1122.         PUSH IY
  1123.         POP DE
  1124.         LD (HL),E
  1125.         INC L
  1126.         LD (HL),D
  1127.         INC L
  1128.         LD A,L
  1129.         LD (HL),0
  1130.         INC L
  1131.         EXX
  1132.         LD (HL),A
  1133.         RET Z ;более 51 героя в экране
  1134. vrS1    LD DE,16
  1135.         ADD IX,DE
  1136.         LD E,4
  1137.         ADD IY,DE
  1138.         DJNZ vrS0
  1139. vrS51   XOR A
  1140.         LD L,A
  1141.         LD H,A
  1142.         LD D,A
  1143.         LD E,A
  1144. vrSET   LD (vrA+1),A
  1145.         LD A,L
  1146.         LD (vrL+1),A
  1147.         LD A,H
  1148.         LD (vrH+1),A
  1149.         LD A,E
  1150.         LD (vrE+1),A
  1151.         LD A,D
  1152.         LD (vrD+1),A
  1153.         RET
  1154.  
  1155. outSEL  ;выв выбр об'ектов и рамки цели
  1156.         CALL STD
  1157.         LD HL,sel_ti
  1158.         LD A,(HL)
  1159.         OR A
  1160.         JR Z,uS3
  1161.         DEC (HL)
  1162.         LD A,(TIC)
  1163.         RRCA
  1164.         JR C,uS3
  1165.         DEC HL
  1166.         LD A,(HL)
  1167.         BIT 7,A
  1168.         JR NZ,uS5
  1169.         ;рамка героя-цели
  1170.         CALL N_IXIY
  1171.         LD A,(IX+0)
  1172.         OR A
  1173.         JR Z,uS3
  1174.         LD A,1 ;nz,A=1
  1175.         CALL _XPUT
  1176.         JR uS3
  1177. uS5     ;рамка здания-цели
  1178.         AND #7F
  1179.         CALL uS6
  1180. uS3     LD A,(SEL_T) ;объекты
  1181.         OR A
  1182.         RET Z
  1183.         LD HL,SEL_N
  1184.         CP 7
  1185.         JR C,uS4
  1186.         JR NZ,uS1
  1187.         LD A,1
  1188. uS4     LD B,A
  1189. uS0     PUSH BC
  1190.         PUSH HL
  1191.         LD A,(HL)
  1192.         CALL N_IXIY
  1193.         XOR A
  1194.         INC A ;nz,A=1
  1195.         CALL _XPUT
  1196.         POP HL
  1197.         INC HL
  1198.         POP BC
  1199.         DJNZ uS0
  1200.         RET
  1201. uS1     ;выд.здания
  1202.         LD A,(HL)
  1203. uS6     CALL B_IX
  1204.         LD A,(IX+0)
  1205.         OR A
  1206.         JP NZ,_BPUT
  1207.         RET
  1208.  
  1209. B_IX    ;получить IX здания по номеру А
  1210.         PUSH HL
  1211.         PUSH DE
  1212.         ADD A,A
  1213.         LD L,A
  1214.         LD H,0
  1215.         ADD HL,HL
  1216.         ADD HL,HL
  1217.         LD DE,MINE
  1218.         ADD HL,DE
  1219.         PUSH HL
  1220.         POP IX
  1221.         POP DE
  1222.         POP HL
  1223.         RET
  1224.  
  1225. N_IXIY  ;получить IX,IY героя по номеру А
  1226.         PUSH AF
  1227.         ADD A,A
  1228.         LD L,A
  1229.         LD H,0
  1230.         ADD HL,HL
  1231.         LD A,L
  1232.         ADD A,XY&255
  1233.         LD L,A
  1234.         LD A,XY/256
  1235.         ADC A,H
  1236.         LD H,A
  1237.         PUSH HL
  1238.         POP IY
  1239.         POP AF
  1240. N_IX    ADD A,A
  1241.         LD L,A
  1242.         LD H,0
  1243.         ADD HL,HL
  1244.         ADD HL,HL
  1245.         ADD HL,HL
  1246.         LD A,HUMAN/256
  1247.         ADD A,H
  1248.         LD H,A
  1249.         PUSH HL
  1250.         POP IX
  1251.         RET
  1252.  
  1253.  
  1254. _BPUT   ;выв рамки выбора зд
  1255.  
  1256.         if EGA
  1257.         CALL HL_IX0
  1258.         LD A,(IX+2)
  1259.         CP 8
  1260.         ld c,4*8-1
  1261.         JR Z,_Bsmal
  1262.         CP 18
  1263.         JR Z,_Bsmal
  1264.         ld c,6*8-1
  1265. _Bsmal
  1266. ;h,l=координаты центра здания на карте
  1267.         LD de,(X0)
  1268.         LD A,L
  1269.         SUB e
  1270.         ;CP 12
  1271.         ;RET NC
  1272.          inc a
  1273.          cp 12+2
  1274.          dec a
  1275.          ret nc
  1276.         dec a
  1277.         add a,a
  1278.         add a,a
  1279.         add a,a
  1280.         add a,a
  1281.         ld e,a
  1282.         add a,c
  1283.         ld l,a
  1284.        
  1285.         LD A,H
  1286.         SUB d
  1287.         ;CP 12
  1288.         ;RET NC
  1289.          inc a
  1290.          cp 12+2
  1291.          dec a
  1292.          ret nc
  1293.         dec a
  1294.         add a,a
  1295.         add a,a
  1296.         add a,a
  1297.         add a,a
  1298.         ld d,a
  1299.         add a,c
  1300.         ld h,a
  1301.        
  1302.         ld a,0xff
  1303.         ex af,af'
  1304. ;de=top left
  1305. ;hl=bottom right
  1306. ;a'=pattern
  1307.         jp outBOXsolid
  1308.        
  1309.         else
  1310.  
  1311.         CALL HL_IX0
  1312.         LD A,(IX+2)
  1313.         CP 8
  1314.         JR Z,_Bsmal
  1315.         CP 18
  1316.         JR Z,_Bsmal
  1317.         DEC L
  1318.         INC H;/8
  1319.         PUSH HL
  1320.         LD DE,#40C0
  1321.         CALL bJ0v
  1322.         LD DE,#8000
  1323.         CALL C,bJ1h_
  1324.         POP HL
  1325.         INC L;/7
  1326.         PUSH HL
  1327.         LD D,#00
  1328.         CALL bJ0h_
  1329.         POP HL
  1330.         INC L;/6
  1331.         PUSH HL
  1332.         LD DE,#0203
  1333.         CALL bJ1v
  1334.         LD DE,#0001
  1335.         DEC L
  1336.         CALL C,bJ1h_
  1337.         POP HL
  1338.         DEC H;/5
  1339.         PUSH HL
  1340.         LD DE,#0203
  1341.         CALL bJ1v
  1342.         POP HL
  1343.         DEC H;/4
  1344.         PUSH HL
  1345.         CALL bJ1v
  1346.         LD DE,#0001
  1347.         DEC L
  1348.         CALL C,bJ1h
  1349.         POP HL
  1350.         DEC L;/3
  1351.         PUSH HL
  1352.         LD DE,#0000
  1353.         CALL bJ0h
  1354.         POP HL
  1355.         DEC L;/2
  1356.         PUSH HL
  1357.         LD DE,#40C0
  1358.         CALL bJ0v
  1359.         LD DE,#8000
  1360.         CALL C,bJ1h
  1361.         POP HL
  1362.         INC H;/1
  1363.         LD DE,#40C0
  1364.         JP bJ0v
  1365. _Bsmal  DEC L;\4
  1366.         PUSH HL
  1367.         LD DE,#40C0
  1368.         CALL bJ0v
  1369.         LD DE,#8000
  1370.         CALL C,bJ1h_
  1371.         POP HL
  1372.         INC L;\3
  1373.         PUSH HL
  1374.         LD DE,#0203
  1375.         CALL bJ1v
  1376.         LD DE,#0001
  1377.         DEC L
  1378.         CALL C,bJ1h_
  1379.         POP HL
  1380.         DEC H;\2
  1381.         PUSH HL
  1382.         LD DE,#0203
  1383.         CALL bJ1v
  1384.         LD DE,#0001
  1385.         DEC L
  1386.         CALL C,bJ1h
  1387.         POP HL
  1388.         DEC L;\1
  1389.         LD DE,#40C0
  1390.         CALL bJ0v
  1391.         LD DE,#8000
  1392.         JP C,bJ1h
  1393.         RET
  1394.  
  1395. bJ0h_   ;снизу
  1396.         CALL bJadr
  1397.         RET NC
  1398. bJ1h_   LD A,L
  1399.         ADD A,32
  1400.         LD L,A
  1401.         LD A,H
  1402.         ADD A,6
  1403.         LD H,A
  1404.         CALL bJ100
  1405.         LD D,E
  1406.         DEC H
  1407.         INC L
  1408. bJ100   XOR A
  1409.         XOR D
  1410.         LD (HL),A
  1411.         INC H
  1412.         LD (HL),#FF
  1413.         SCF
  1414.         RET
  1415.  
  1416. bJ0h    CALL bJadr;выв гориз
  1417.         RET NC
  1418. bJ1h    CALL bJ200
  1419.         LD D,E
  1420.         DEC H
  1421.         INC L
  1422. bJ200   LD (HL),#FF
  1423.         INC H
  1424.         XOR A
  1425.         XOR D
  1426.         LD (HL),A
  1427.         SCF
  1428.         RET
  1429.  
  1430. bJ1v    CALL bJadr
  1431.         RET NC
  1432.         INC L
  1433.         JR bJ002
  1434. bJ0v    ;выв верт лин для здан (HL-adr в map;DE-изобр/маска)
  1435.         CALL bJadr
  1436.         RET NC
  1437. bJ002   PUSH HL
  1438.         CALL bJ000
  1439.         LD A,H
  1440.         SUB 8
  1441.         LD H,A
  1442.         LD A,L
  1443.         ADD A,32
  1444.         LD L,A
  1445.         CALL bJ000
  1446.         POP HL
  1447.         SCF
  1448.         RET
  1449. bJ000   LD B,2
  1450. bJ001   LD A,(HL)       ;
  1451.         OR E
  1452.         XOR D
  1453.         LD (HL),A
  1454.         INC H
  1455.         LD A,(HL)       ;
  1456.         OR E
  1457.         XOR D
  1458.         LD (HL),A
  1459.         INC H
  1460.         LD A,(HL)       ;
  1461.         OR E
  1462.         XOR D
  1463.         LD (HL),A
  1464.         INC H
  1465.         LD A,(HL)       ;
  1466.         OR E
  1467.         XOR D
  1468.         LD (HL),A
  1469.         INC H
  1470.         DJNZ bJ001
  1471.         RET
  1472.  
  1473. bJadr   LD BC,(X0) ;выч адр (NC/C-out/ok)
  1474.         LD A,L
  1475.         SUB C
  1476.         CP 12
  1477.         RET NC
  1478.         LD L,A
  1479.         LD A,H
  1480.         SUB B
  1481.         CP 12
  1482.         RET NC
  1483.         LD H,A
  1484.         ADD HL,HL
  1485.         PUSH DE
  1486.         EX DE,HL
  1487.         CALL SCOORD
  1488.         POP DE
  1489.         XOR A
  1490.         CCF
  1491.         RET
  1492.  
  1493.         endif ;~EGA
  1494.  
  1495.         if 1==0
  1496. _TST#7   LD HL,dummy+0 ;isTST7[**]
  1497.         LD A,(HL) ;mem7!
  1498.         OR A
  1499.         RET NZ
  1500.         PUSH HL
  1501.         LD HL,(t7pos)
  1502.         CALL GMAP
  1503.         LD A,(HL)
  1504.         POP HL
  1505.         CP #7F
  1506.         RET NC
  1507.         SET 7,(HL)
  1508.         CALL t7dt ;7
  1509.         RET Z
  1510.         LD HL,BULL+72
  1511.         LD B,72
  1512. t7er    SET 7,(HL)
  1513.         INC HL
  1514.         DJNZ t7er
  1515.         RET
  1516.         ;
  1517. t7dt    LD HL,BUF512
  1518.         PUSH HL
  1519.         LD DE,t7tab
  1520. t7d0    LD A,(DE)
  1521.         INC DE
  1522.         OR A
  1523.         JR Z,t7de
  1524.         POP HL
  1525.         SUB 11
  1526.         PUSH HL
  1527.         CALL BA
  1528.         LD A,(DE)
  1529.         INC DE
  1530.         LD (HL),A
  1531.         JR t7d0
  1532. t7de    XOR A
  1533.         RET
  1534.         endif
  1535.