?login_element?

Subversion Repositories NedoOS

Rev

Rev 1122 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;**** HЛО-2. Дьяволы бездны ****
  2. ;8F80-xCONV(128)
  3. ;9000-теневой экран(6k)
  4. ;A800-теневые атрибуты(768)  (128-буф1)
  5. ;AB00-MAN+ALIEN(1024)
  6. ;AF80-vSIZE(128)
  7. ;AF00-xATR(128)
  8. ;B000-истребитель(2k) (0,1,2-15)
  9. ;B800-НЛО(6k) (16-63)
  10. ;D000-ландшафт(4k) (64-95)
  11. ;E000-1й этаж(4k)
  12. ;F000-2й этаж(4k)
  13.  
  14. ;CПРАЙТЫ: 0-fill 2й этаж;1-fill 1й этаж
  15. ;2-15-истребитель(2-vSIZE<4)
  16. ;96-127-стоит герой(0-31)
  17.  
  18. SCR     EQU     #C000
  19. ATR     EQU     #D800
  20. DSCR    EQU     #9000
  21.        if 0;EGA
  22.        else
  23. DATR    EQU     #A800
  24.        endif
  25. MAN     EQU     #AB00
  26. ALIEN   EQU     MAN+320
  27. TMP     EQU     DSCR
  28. xATR    EQU     #AF00
  29. vSIZE   EQU     #AF80
  30. xCONV   EQU     #8F80
  31.  
  32. ;****************************************** работа с 3D спрайтами
  33.  
  34. SH      DEFB    0; Shift 0/8
  35. TX      DEFB    0
  36. TY      DEFB    1
  37. TTX     DEFB    #CD
  38. TTY     DEFB    0
  39. NSH     DEFW    0 ;96,64,32,0, а после цикла -16 (для скролла вверх)
  40. UDHL    DEFW    6
  41. XMAX    DEFB 63;макс.коорд
  42. YMAX    DEFB 63
  43. ;*L+
  44. B_DAT   ;-----данные боя-------------
  45. OLDFLR  DEFB 0
  46. X0      DEFB   63
  47. Y0      DEFB   63
  48. RNB     DEFB 5
  49. RNA     DEFW 1970
  50. NX_RNB  DEFB 0
  51. NX_RNA  DEFW 505
  52. FIRTYP  DEFB 0 ;тип Стрельбы (1-прицельная)
  53. HER_N   DEFB 0 ;NO. текущ героя
  54. HER_AD  DEFW 0 ;адр. его данных
  55. G_TIME  DEFB 0 ;время использ текущ оружия
  56. G_TYPE  DEFB #FF;текущ оружие
  57. SETLEN  EQU 38
  58. SET_N   DEFB 0 ;к-во записей
  59. SETDIM  DEFS 5*SETLEN,#FF ;двери/гранаты (X,Y,Flr,Tmp,Door)/(x,y,Flr,0,0)
  60. B_LEN   EQU   $-B_DAT ;--------------
  61.  
  62. HER_BA  LD HL,(HER_AD) ;взять поле А
  63.         JP BA
  64.  
  65. RRT     LD      DE,DSCR+1024 ;скролл вправо
  66.         LD      HL,DSCR+1024+1
  67.         LD      BC,4095
  68.         LDIR
  69.         LD      A,(SH)
  70.         XOR     8
  71.         LD      (SH),A
  72.         JR      NZ,RR8
  73.         LD      HL,X0
  74.         INC     (HL)
  75.         INC     HL
  76.         DEC     (HL)
  77. RR8     LD A,(FLR)
  78.         OR A
  79.         JR NZ,RLN
  80.         INC A
  81.         CALL FLOOR
  82.         CALL RLN
  83.         XOR A
  84.         CALL FLOOR
  85. RLN     LD      DE,(X0)
  86.         LD      A,14
  87.         ADD     A,E
  88.         LD      E,A
  89.         LD      A,-14
  90.         ADD     A,D
  91.         LD      D,A
  92.         LD      A,(SH)
  93.         OR      A
  94.         JR      Z,RL0
  95.         LD      HL,DSCR+29+128
  96.         JR      LL1
  97. RL0     DEC     E
  98.         LD      HL,DSCR+29
  99.         JR      LL1
  100.  
  101. LRT     LD      DE,DSCR+6143-1024 ;Скролл влево
  102.         LD      HL,DSCR+6142-1024
  103.         LD      BC,4095
  104.         LDDR
  105.         LD      A,(SH)
  106.         XOR     8
  107.         LD      (SH),A
  108.         JR      Z,LR8
  109.         LD      HL,X0
  110.         DEC     (HL)
  111.         INC     HL
  112.         INC     (HL)
  113. LR8     LD A,(FLR)
  114.         OR A
  115.         JR NZ,LLN
  116.         INC A
  117.         CALL FLOOR
  118.         CALL LLN
  119.         XOR A
  120.         CALL FLOOR
  121. LLN     LD      A,(SH)
  122.         LD      DE,(X0)
  123.         OR      A
  124.         JR      NZ,LL0
  125.         LD      HL,DSCR+128+2
  126.         JR      LL1
  127. LL0     LD      HL,DSCR+2
  128.         DEC     D
  129. LL1     LD      (TX),DE
  130.         LD      B,20
  131. LL2     CALL    ASP
  132.         JR      Z,LL_2
  133.         CALL    LSP
  134. LL_2    LD      DE,128
  135.         ADD     HL,DE
  136.         LD      A,(TY)
  137.         INC     A
  138.         LD      (TY),A
  139.         CALL    ASP
  140.         JR      Z,LL_3
  141.         CALL    RSP
  142. LL_3    LD      DE,128
  143.         ADD     HL,DE
  144.         LD      A,(TX)
  145.         INC     A
  146.         LD      (TX),A
  147.         DJNZ    LL2
  148.         RET
  149.  
  150. DRT     LD      DE,DSCR+1024 ;скролл вниз
  151.         LD      HL,DSCR+256+1024
  152.         LD      BC,4096-256
  153.         LDIR
  154.         LD      HL,X0
  155.         INC     (HL)
  156.         INC     HL
  157.         INC     (HL)
  158.         LD A,(FLR)
  159.         OR A
  160.         JR NZ,DLN
  161.         INC A
  162.         CALL FLOOR
  163.         CALL DLN
  164.         XOR A
  165.         CALL FLOOR
  166. DLN     LD      HL,X0
  167.         LD      A,#F
  168.         ADD     A,(HL)
  169.         LD      (TTX),A
  170.         INC     HL
  171.         LD      A,#F
  172.         ADD     A,(HL)
  173.         LD      (TTY),A
  174.         LD      HL,DSCR+4096+768+1
  175.         JR      UL_
  176.  
  177. URT     LD      DE,DSCR+6143-1024 ;скролл вверх
  178.         LD      HL,DSCR+6143-256-1024
  179.         LD      BC,4096-256
  180.         LDDR
  181.         LD      HL,X0
  182.         DEC     (HL)
  183.         INC     HL
  184.         DEC     (HL)
  185.         LD A,(FLR)
  186.         OR A
  187.         JR NZ,ULN
  188.         INC A
  189.         CALL FLOOR
  190.         CALL ULN
  191.         XOR A
  192.         CALL FLOOR
  193. ULN     LD      HL,(X0)
  194.         LD      (TTX),HL
  195.         LD      HL,DSCR+1024+1
  196. UL_     LD      A,(SH)
  197.         OR      A
  198.         JR      NZ,UL10
  199.         INC     HL
  200. UL10    LD      (UDHL),HL
  201.         LD      HL,96
  202.         LD      (NSH),HL ;96,64,32,0, а после цикла -16
  203.         LD      C,4
  204.        
  205. UL0     LD      HL,(UDHL)
  206.         LD      DE,(TTX)
  207.         LD      (TX),DE
  208.         CALL    UDL2
  209.         LD      HL,(UDHL)
  210.         DEC     HL
  211.         LD      DE,(TTX)
  212.         INC     D
  213.         LD      (TX),DE
  214.         CALL    UDL
  215.         LD      HL,(NSH)
  216.         LD      DE,32
  217.         OR      A
  218.         SBC     HL,DE
  219.         LD      (NSH),HL
  220.         LD      HL,(TTX)
  221.         INC     H
  222.         INC     L
  223.         LD      (TTX),HL
  224.         DEC     C
  225.         JR      NZ,UL0
  226.        
  227.         LD      HL,-16
  228.         LD      (NSH),HL
  229.         LD      HL,(UDHL)
  230.         LD      DE,128
  231.         ADD     HL,DE
  232.         LD      DE,(TTX)
  233.         LD      (TX),DE
  234.         CALL    UDL2
  235.         RET
  236.  
  237. UDL     LD      B,15
  238. UD0     CALL    ASP
  239.         JR      Z,U_D0
  240.         CALL    NSP
  241. U_D0    LD      DE,(TX)
  242.         DEC     D
  243.         INC     E
  244.         LD      (TX),DE
  245.         INC     HL
  246.         INC     HL
  247.         DJNZ    UD0
  248.         RET
  249.  
  250. UDL2    LD      B,15
  251. UD2     CALL    ASP
  252.         JR      Z,U_D2
  253.         CALL    NSP2
  254. U_D2    LD      DE,(TX)
  255.         DEC     D
  256.         INC     E
  257.         LD      (TX),DE
  258.         INC     HL
  259.         INC     HL
  260.         DJNZ    UD2
  261.         RET
  262.  
  263. PSP     ;задать N спр
  264.         EX AF,AF
  265.         CALL GSP
  266.         CP 2
  267.         RET C
  268.         EXX
  269.         EX AF,AF
  270.         LD (HL),A
  271.         EXX
  272.         RET
  273.  
  274. ATSP    ;получить атрибуты из xATR
  275.         CALL GSP
  276.         AND #7F
  277. ATSP_   EXX
  278. ATSP_exx
  279.         LD E,A
  280.         LD D,xATR/256
  281.         LD A,(DE)
  282.         EXX
  283.         RET
  284.  
  285. ATSPM   ;взять атрибуты с учётом героев
  286.         CALL GSP
  287.         AND #7F
  288.         CP #60
  289.         JR C,ATSP_
  290.         SUB #60
  291.         EXX
  292.         RLCA
  293.         RLCA
  294.         RLCA
  295.         LD D,0
  296.         SLA A
  297.         RL D
  298.         SLA A
  299.         RL D
  300.         ADD A,7
  301.         LD E,A
  302.         LD A,D
  303.         ADD A,MAN/256
  304.         LD D,A
  305.         LD A,(DE)
  306.         AND #7F
  307.         JR ATSP_exx
  308.  
  309. GS_4x4  LD      A,63
  310.         CP      H
  311.         DEFB #38,#14 ;JR C,G00
  312.         CP      L
  313.         DEFB #38,#11 ;JR C,G00
  314.         LD      A,L
  315.         RLCA
  316.         RLCA
  317.         SRL     H
  318.         RRA
  319.         SRL     H
  320.         RRA
  321.         LD      L,A
  322.  
  323. GS_8x2  LD      A,31
  324.         CP      H
  325.         DEFB #38,#14 ;JR C,G00
  326.         LD      A,127
  327.         CP      L
  328.         DEFB #38,#0F ;JR C,G00
  329.         RLC     L
  330.         SRL     H
  331.         RR      L
  332.         NOP
  333.         NOP
  334.  
  335. SET4x4  LD HL,#3F3F ;уст.поле 64х64
  336.         LD DE,GS_4x4
  337.         JR SETxxx
  338. SET8x2  LD HL,#1F7F ;уст.поле 128х32
  339.         LD DE,GS_8x2
  340. SETxxx  LD (XMAX),HL
  341.         EX DE,HL
  342.         LD DE,GSPdim
  343.         LD BC,18
  344.         LDIR
  345.         RET
  346.  
  347. GSP     EXX     ;получить N спр
  348.         LD      HL,(TX)
  349. GSPdim  LD      A,63
  350.         CP      H
  351.         JR      C,G00
  352.         CP      L
  353.         JR      C,G00
  354.         LD      A,L
  355.         RLCA
  356.         RLCA
  357.         SRL     H
  358.         RRA
  359.         SRL     H
  360.         RRA
  361.         LD      L,A
  362. GS1     LD      A,#F0 ;map #F000/#E000
  363.         OR      H
  364.         LD      H,A
  365.         LD      A,(HL)
  366.         EXX
  367.         RET
  368. G00     LD      A,1 ;Вне поля
  369.         EXX
  370.         RET
  371.  
  372. ;AinvX- #AA(XOR D)-норм.,#0(NOP)-только маска
  373. ;возвр: Z-0й спрайт DE-адр А-номер
  374. ASP     CALL GSP
  375.         LD D,A
  376.        if EGA == 0
  377.         RLCA
  378.         LD A,(Ainv1)
  379.         JR C,A2P
  380.         OR A
  381.         JR NZ,A22P
  382.         LD A,#AA
  383.         JR A21P
  384. A2P     OR A
  385.         JR Z,A22P
  386.         XOR A
  387. A21P    LD (Ainv1),A
  388.         LD (Ainv2),A
  389.         LD (Ainv3),A
  390.         LD (Ainv4),A
  391. A22P
  392.         LD A,D
  393.        endif
  394. A22P_   LD E,0
  395.         AND #7F
  396.         PUSH AF
  397.         CP #60
  398.         JR NC,A4P
  399.        if EGA
  400.         ld a,d
  401.         add a,0xc0
  402.         ld d,a
  403.         ld a,13 ;pg
  404.         jr nc,MSizeP_retilen1
  405.         inc a
  406.         set 7,d
  407.         set 6,d
  408. MSizeP_retilen1
  409.         call setpg
  410.        else
  411.         SRL A
  412.         RR E
  413.         ADD A,#B0;sprites
  414.         LD D,A
  415.        endif
  416.         POP AF
  417.         RET
  418. A4P     POP AF
  419.         SUB #60
  420.         PUSHs;$
  421.         PUSH IX
  422.         CALL GET_IX
  423.         CALL HERLIV
  424.         JR NZ,A7PLIV
  425.         LD A,(IX+4)
  426.         CALL M96
  427.        if EGA
  428.        add hl,hl
  429.        ld de,0xf000 ;TODO
  430.        else
  431.         LD DE,xDIE
  432.        endif
  433.         JR A6P
  434. A7PLIV  LD A,(IX+6)     ;visi
  435.         OR A            ;
  436.         LD A,(IX+7)     ;
  437.         JR Z,A9P        ;
  438.         POP IX
  439.         POPs;$
  440.         JR A22P_
  441. A9P     CALL NORM_V
  442.         LD A,(IX+3)
  443.         CALL M96
  444.         ADD HL,HL
  445.         LD A,(IX+4)
  446.         RLCA
  447.         LD D,A
  448.         RLCA
  449.         ADD A,D
  450.         ADD A,H
  451.         LD H,A
  452.        if EGA
  453.        add hl,hl
  454.        ld de,0x8400
  455.        else
  456.         LD DE,xHERO
  457.        endif
  458. A6P     ADD HL,DE
  459.         PUSH HL ;sprite gfx
  460.         LD A,(IX+7)
  461.         AND #7F
  462.         LD L,0
  463.        if EGA
  464.         add a,#c0
  465.         ld h,a
  466.         ld a,13
  467.         jr nc,$+2+1+4
  468.          inc a
  469.          set 7,h
  470.          set 6,h ;tile gfx
  471.         call setpg      
  472.         LD DE,temptilebuf;DATR ;temporary tile buffer
  473.         LD BC,256
  474.         LDIR
  475.         pop de ;sprite gfx
  476.         ld a,8
  477.         bit 6,d
  478.         set 6,d
  479.         jr z,$+3
  480.         inc a
  481.         call setpg
  482.         LD bc,temptilebuf;DATR ;temporary tile buffer
  483. ;наложение спрайта на тайл
  484.         ld h,tmask/256
  485. A5P_column
  486.         ld a,c
  487.         add a,8
  488.         ld c,a
  489.        dup 24
  490.         LD A,(de) ;sprite gfx
  491.         INC de
  492.         LD L,A
  493.         LD A,(bc) ;temporary tile buffer
  494.         AND (HL)
  495.         OR L
  496.         LD (bc),A
  497.         inc c
  498.        edup
  499.         jp nz,A5P_column
  500.  
  501.        else
  502.         SRL A
  503.         RR L
  504.         ADD A,#B0 ;???тайлы корабля и далее прочие тайлы
  505.         LD H,A
  506.         LD DE,DATR
  507.         LD BC,128
  508.         LDIR
  509.         POP HL ;sprite gfx
  510.         LD DE,DATR+16
  511.         Ms 4
  512.         LD B,48
  513. A5P     LD A,(DE)
  514.         OR (HL)
  515.         LD (DE),A
  516.         INC DE
  517.         LD A,(DE)
  518.         CPL
  519.         OR (HL)
  520.         CPL
  521.         INC HL
  522.         OR (HL)
  523.         LD (DE),A
  524.         INC DE
  525.         INC HL
  526.         DJNZ A5P
  527.        endif
  528.         CALL PT128
  529.         POP IX
  530.         POPs;$
  531.        if EGA
  532.         ld de,temptilebuf
  533.        else
  534.         LD DE,DATR ;temporary tile buffer
  535.        endif
  536.         LD A,#60
  537.         OR A
  538.         RET;NZ
  539.  
  540. M96     LD L,A
  541.         RLCA
  542.         ADD A,L ;x3
  543.         RLCA    ;x6
  544.         RLCA    ;x12
  545.         LD      L,A
  546.         LD      H,0
  547.         ADD     HL,HL ;x24
  548.         ADD     HL,HL ;x48
  549.         ADD     HL,HL ;x96
  550.         RET
  551.  
  552. ;вывод 3D тайла (для полного обновления экрана ALLSPF)
  553. MSizeP
  554.         ;ld a,201
  555.         ;ld (MSizeP),a
  556.  
  557.         pushs;$
  558.        if EGA
  559.        ;push bc
  560.        call PT128
  561.        ;pop bc
  562.        endif
  563.         CALL ASP ;out: de=tile addr
  564.         JR Z,MSiRET
  565.        ;jr $
  566.        if EGA == 0
  567.         PUSH HL
  568.         LD B,vSIZE/256
  569.         OR #80 ;(vSIZE mod 256)
  570.         LD C,A
  571.         LD A,(BC)
  572.         LD H,0
  573.         ADD A,A
  574.         ADD A,A
  575.         ADD A,A
  576.         LD L,A
  577.          RRCA
  578.          ADD A,E
  579.          LD E,A
  580.         ADD HL,HL
  581.         ADD HL,HL
  582.         LD A,(BC)
  583.         POP BC
  584.         ADD HL,BC
  585.         CPL
  586.         ADD A,33
  587.         LD B,A
  588.        else
  589.        if 0
  590.         ld a,d
  591.         sub 0xB0
  592.         sla e
  593.         rla
  594.         ;sla e
  595.         ;rla
  596.         add a,0xc0
  597.         ld d,a
  598.         ld a,13 ;pg
  599.         jr nc,MSizeP_retilen1
  600.         inc a
  601.         set 7,d
  602.         set 6,d
  603.         ;ld a,d
  604.         ;sub 0x40
  605.         ;ld d,a
  606.         ;ld a,14 ;pg
  607. MSizeP_retilen1
  608.        ;ld de,0xdf00
  609.         ;ld a,13
  610.         call setpg
  611.        endif
  612.        
  613.         push hl
  614.         pop bc
  615.         ld b,32
  616.        endif
  617.         JP MS2
  618.  
  619. BSP     pushs;$
  620.         JP      MS2
  621.  
  622. ;для скролла вверх/вниз
  623. NSP     pushs;$
  624.         LD      BC,(NSH) ;96,64,32,0, а после цикла -16
  625.         EX      DE,HL
  626.         ADD     HL,BC
  627.         EX      DE,HL
  628.         LD      B,8
  629.         JP      MS2 ;печать полного тайла, но на высоту 8
  630.  
  631. ;для скролла вверх/вниз
  632. NSP2    pushs;$
  633.         EX      DE,HL
  634.         LD      BC,(NSH) ;96,64,32,0, а после цикла -16
  635.         ADD     HL,BC
  636.         LD      BC,16
  637.         ADD     HL,BC ;переходим к нижней половине тайла?
  638.         EX      DE,HL
  639.         LD      B,4
  640.         LD      A,(NSH) ;96,64,32,0, а после цикла -16
  641.         CP      96
  642.         JR      Z,MS2 ;печать полного тайла, но на высоту 4
  643.         CP      -16
  644.         JR      Z,MS2 ;печать полного тайла, но на высоту 4
  645.         LD      B,8
  646.         JP      MS2 ;печать полного тайла, но на высоту 8
  647.  
  648. ;печать полного тайла
  649. MSP     pushs;$
  650.         LD      B,32
  651. MS2
  652.        if EGA
  653.         ld hx,b ;hgt
  654.         call setpgsscr40008000
  655.         ld b,h
  656.         ld c,l ;bc=scr
  657.        push de
  658.        push bc
  659.        push ix
  660.         call prtile
  661.        pop ix
  662.        pop bc
  663.        pop de
  664.        set 7,e
  665.        inc bc
  666.         call prtile
  667.         call setpgsmain40008000
  668.        else
  669.         LD      (MSPSP+1),SP
  670.         EX      DE,HL
  671.         LD      SP,HL
  672.         EX      DE,HL
  673. MS20    POP     DE
  674.         LD      A,(HL)
  675.         OR      E
  676. Ainv1   XOR     D
  677.         LD      (HL),A
  678.         INC     HL
  679.         POP     DE
  680.         LD      A,(HL)
  681.         OR      E
  682. Ainv2   XOR     D
  683.         LD      (HL),A
  684.         LD      DE,31
  685.         ADD     HL,DE
  686.         DJNZ    MS20
  687. MSPSP   LD      SP,#4020
  688.        endif
  689. MSiRET  pops;$
  690.         RET
  691.  
  692. ;печать левой части тайла
  693. LSP     pushs;$
  694.         LD      B,32
  695. LS2
  696.        if EGA
  697.         ld hx,b
  698.         call setpgsscr40008000
  699.         ld b,h
  700.         ld c,l
  701.         call prtile
  702.         call setpgsmain40008000
  703.        else
  704.         LD      (LSPSP+1),SP
  705.         EX      DE,HL
  706.         LD      SP,HL
  707.         EX      DE,HL
  708. LS20    POP     DE
  709.         LD      A,(HL)
  710.         OR      E
  711. Ainv3   XOR     D
  712.         LD      (HL),A
  713.         POP     DE
  714.         LD      DE,32
  715.         ADD     HL,DE
  716.         DJNZ    LS20
  717. LSPSP   LD      SP,#4020
  718.        endif
  719.         pops;$
  720.         RET
  721.  
  722. ;печать правой части тайла
  723. RSP     pushs;$
  724.         LD      B,32
  725. RS2
  726.        if EGA
  727.         ld hx,b ;hgt
  728.         call setpgsscr40008000
  729.         ld b,h
  730.         ld c,l ;scr
  731.        ;push de
  732.        ;push bc
  733.        ;push ix
  734.         ;call prtile
  735.        ;pop ix
  736.        ;pop bc
  737.        ;pop de
  738.        set 7,e
  739.        inc bc
  740.         call prtile
  741.         call setpgsmain40008000
  742.        else
  743.         LD      (RSPSP+1),SP
  744.         EX      DE,HL
  745.         LD      SP,HL
  746.         EX      DE,HL
  747. RS20    POP     DE
  748.         POP     DE
  749.         LD      A,(HL)
  750.         OR      E
  751. Ainv4   XOR     D
  752.         LD      (HL),A
  753.         LD      DE,32
  754.         ADD     HL,DE
  755.         DJNZ    RS20
  756. RSPSP   LD      SP,#4020
  757.        endif
  758.         pops;$
  759.         RET
  760.  
  761. RSPB    pushs;$
  762.         JR      RS2
  763.  
  764. LSPB    pushs;$
  765.         JR      LS2
  766.  
  767. ALLSPF
  768.        if EGA
  769.         ei
  770.         ld de,sprpal
  771.         OS_SETPAL
  772.         ld e,0
  773.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  774.         ld e,1
  775.         OS_SETSCREEN
  776.         ld e,0 ;color byte
  777.         OS_CLS
  778.         call ALLSPpp
  779.         jr $
  780.         ;call changescrpg
  781.         ;ld e,a
  782.         ;OS_SETSCREEN
  783.         ret
  784.         include "pal.ast" ;sprpal
  785. ALLSPpp
  786.        endif
  787.         LD A,(FLR) ;вывод обоих этажей
  788.         OR A
  789.         JR NZ,ALLSP
  790.         INC A
  791.         CALL FLOOR
  792.         CALL ALLSP
  793.         XOR A
  794.         CALL FLOOR
  795. ALLSP
  796.        if EGA
  797.         ld hl,scrbase+(40*4)+2
  798.        else
  799.         LD      HL,DSCR+128+2
  800.        endif
  801.         LD      A,(SH)
  802.         OR      A
  803.         JR      Z,AP1
  804.         DEC     HL
  805. AP1     LD      DE,(X0)
  806.         LD      (TX),DE
  807.         LD      C,20
  808. AP2     LD      B,15
  809.         PUSH    DE
  810. AP3     CALL    MSizeP
  811.         LD      DE,(TX)
  812.         INC     E
  813.         DEC     D
  814.         LD      (TX),DE
  815.         INC     HL
  816.         INC     HL
  817.         DJNZ    AP3
  818.        if EGA
  819.         ld de,+(40*4)-30-1
  820.        else
  821.         LD      DE,128-30-1
  822.        endif
  823.         ADD     HL,DE
  824.         POP     DE
  825.         INC     D
  826.         LD      (TX),DE
  827.         PUSH    DE
  828.         LD      B,15
  829. AP4     CALL    MSizeP
  830.         LD      DE,(TX)
  831.         INC     E
  832.         DEC     D
  833.         LD      (TX),DE
  834.         INC     HL
  835.         INC     HL
  836.         DJNZ    AP4
  837.        if EGA
  838.         ld de,(40*4)-30+1
  839.        else
  840.         LD      DE,128-30+1
  841.        endif
  842.         ADD     HL,DE
  843.         POP     DE
  844.         INC     E
  845.         LD      (TX),DE
  846.         DEC     C
  847.         JR      NZ,AP2
  848.         RET
  849.  
  850. DSC3    LD      B,8
  851.         PUSH    DE
  852. DS3     PUSH    DE
  853.         PUSH    BC
  854.         INC DE
  855.         LDI
  856.         LDI
  857.         LDI
  858.         LDI;4
  859.         LDI
  860.         LDI
  861.         LDI
  862.         LDI;8
  863.         LDI
  864.         LDI
  865.         LDI
  866.         LDI;12
  867.         LDI
  868.         LDI
  869.         LDI
  870.         LDI;16
  871.         LDI
  872.         LDI
  873.         LDI
  874.         LDI;20
  875.         LDI
  876.         LDI
  877.         LDI
  878.         LDI;24
  879.         LDI
  880.         LDI
  881.         LDI
  882.         LDI;28
  883.         LD      DE,4
  884.         ADD     HL,DE
  885.         POP     BC
  886.         POP     DE
  887.         INC     D
  888.         DJNZ    DS3
  889.         POP     DE
  890.         LD      A,32
  891.         ADD     A,E
  892.         LD      E,A
  893.         DEC     C
  894.         JR      NZ,DSC3
  895.         RET
  896.  
  897. OUTDSC  CALL    MEM7
  898.         LD      DE,SCR+32
  899.         LD      HL,DSCR+1024+2
  900.         LD      C,7
  901.         CALL    DSC3
  902.         LD      DE,SCR+2048
  903.         LD      C,8
  904.         CALL    DSC3
  905.         LD      DE,SCR+4096
  906.         LD C,1
  907.         CALL    DSC3
  908.         JP  PT128
  909.  
  910. FLR     EQU     G00+1   ;этаж 1-1й 0-2й
  911. FLOOR   OR A ;сменить этаж на А(0-2Й;1-1Й)
  912.         LD A,(FLR)
  913.         JR NZ,FLO2
  914.         OR A
  915.         RET Z
  916.         XOR A ;2й
  917.         LD (FLR),A
  918.         PUSH BC
  919.         LD C,3
  920.         LD A,#E0
  921. FLO_    LD (GS1+1),A
  922.         LD A,(X0)
  923.         ADD A,C
  924.         LD (X0),A
  925.         LD A,(Y0)
  926.         ADD A,C
  927.         LD (Y0),A
  928.         POP BC
  929.         RET
  930. FLO2    OR A
  931.         RET NZ
  932.         INC A
  933.         LD (FLR),A
  934.         PUSH BC
  935.         LD C,-3
  936.         LD A,#F0
  937.         JR FLO_
  938.  
  939. LCOUNT  LD DE,vSIZE ;подсчёт высоты
  940.         LD HL,#B000
  941.         LD B,96
  942. LCX     PUSH BC
  943.         PUSH HL
  944.         LD BC,#1F00
  945. LCX0    LD A,(HL)
  946.         OR A
  947.         JR NZ,LCX2
  948.         INC HL
  949.         INC HL
  950.         LD A,(HL)
  951.         OR A
  952.         JR NZ,LCX2
  953.         INC HL
  954.         INC HL
  955.         INC C
  956.         DJNZ LCX0
  957. LCX2    LD A,C
  958.         LD (DE),A
  959.         INC DE
  960.         POP HL
  961.         LD BC,128
  962.         ADD HL,BC
  963.         POP BC
  964.         DJNZ LCX
  965.         XOR A
  966.         LD (DE),A
  967.         RET
  968.        
  969.        if 1
  970. DD      RLCA
  971. WA      RLCA
  972. BA      ADD     A,L
  973.         LD      L,A
  974.         JR      NC,BA_
  975.         INC     H
  976. BA_     LD      A,(HL)
  977.         RET
  978.        endif
  979.  
  980.        if 1
  981. GET_AD  RLCA ;Взять описатель(MAN+A*32) ->HL
  982.         RLCA
  983.         RLCA
  984.         LD L,A
  985.         LD H,0
  986.         ADD HL,HL
  987.         ADD HL,HL
  988.         LD A,MAN/256
  989.         ADD A,H
  990.         LD H,A
  991.         RET
  992.  
  993. GET_IX  CALL GET_AD;То же для IX
  994.         PUSH HL
  995.         POP IX
  996.         RET
  997.        endif
  998.  
  999.        if 1
  1000. HERLIV  LD A,(IX+8) ;IX-жив? Z-нет
  1001.         OR A
  1002.         RET Z
  1003.         LD A,(IX+13)
  1004.         OR A
  1005.         RET Z
  1006.         CP (IX+26)
  1007.         RET NC
  1008.         XOR A
  1009.         RET
  1010.        endif
  1011.  
  1012.        if 1
  1013. NORM_V
  1014.        if EGA == 0
  1015.         LD A,#AA ;вкл.норм.отобр
  1016.         LD (Ainv1),A
  1017.         LD (Ainv2),A
  1018.         LD (Ainv3),A
  1019.         LD (Ainv4),A
  1020.        endif
  1021.         RET
  1022.        endif
  1023.