?login_element?

Subversion Repositories NedoOS

Rev

Rev 1124 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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