?login_element?

Subversion Repositories NedoOS

Rev

Rev 1006 | Go to most recent revision | 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. SCR     EQU     #C000
  19. ATR     EQU     #D800
  20. DSCR    EQU     #9000
  21. DATR    EQU     #A800
  22. MAN     EQU     #AB00
  23. ALIEN   EQU     MAN+320
  24. TMP     EQU     DSCR
  25. xATR    EQU     #AF00
  26. vSIZE   EQU     #AF80
  27. xCONV   EQU     #8F80
  28.  
  29. ;****************************************** работа с 3D спрайтами
  30.  
  31. SH      DEFB    0; Shift 0/8
  32. TX      DEFB    0
  33. TY      DEFB    1
  34. TTX     DEFB    #CD
  35. TTY     DEFB    0
  36. NSH     DEFW    0
  37. UDHL    DEFW    6
  38. XMAX    DEFB 63;макс.коорд
  39. YMAX    DEFB 63
  40. ;*L+
  41. B_DAT   ;-----данные боя-------------
  42. OLDFLR  DEFB 0
  43. X0      DEFB   63
  44. Y0      DEFB   63
  45. RNB     DEFB 5
  46. RNA     DEFW 1970
  47. NX_RNB  DEFB 0
  48. NX_RNA  DEFW 505
  49. FIRTYP  DEFB 0 ;тип Стрельбы (1-прицельная)
  50. HER_N   DEFB 0 ;NO. текущ героя
  51. HER_AD  DEFW 0 ;адр. его данных
  52. G_TIME  DEFB 0 ;время использ текущ оружия
  53. G_TYPE  DEFB #FF;текущ оружие
  54. SETLEN  EQU 38
  55. SET_N   DEFB 0 ;к-во записей
  56. SETDIM  DEFS 5*SETLEN,#FF ;двери/гранаты (X,Y,Flr,Tmp,Door)/(x,y,Flr,0,0)
  57. B_LEN   EQU   $-B_DAT ;--------------
  58.  
  59. HER_BA  LD HL,(HER_AD) ;взять поле А
  60.         JP BA
  61.  
  62. RRT     LD      DE,DSCR+1024 ;скролл вправо
  63.         LD      HL,DSCR+1024+1
  64.         LD      BC,4095
  65.         LDIR
  66.         LD      A,(SH)
  67.         XOR     8
  68.         LD      (SH),A
  69.         JR      NZ,RR8
  70.         LD      HL,X0
  71.         INC     (HL)
  72.         INC     HL
  73.         DEC     (HL)
  74. RR8     LD A,(FLR)
  75.         OR A
  76.         JR NZ,RLN
  77.         INC A
  78.         CALL FLOOR
  79.         CALL RLN
  80.         XOR A
  81.         CALL FLOOR
  82. RLN     LD      DE,(X0)
  83.         LD      A,14
  84.         ADD     A,E
  85.         LD      E,A
  86.         LD      A,-14
  87.         ADD     A,D
  88.         LD      D,A
  89.         LD      A,(SH)
  90.         OR      A
  91.         JR      Z,RL0
  92.         LD      HL,DSCR+29+128
  93.         JR      LL1
  94. RL0     DEC     E
  95.         LD      HL,DSCR+29
  96.         JR      LL1
  97.  
  98. LRT     LD      DE,DSCR+6143-1024 ;Скролл влево
  99.         LD      HL,DSCR+6142-1024
  100.         LD      BC,4095
  101.         LDDR
  102.         LD      A,(SH)
  103.         XOR     8
  104.         LD      (SH),A
  105.         JR      Z,LR8
  106.         LD      HL,X0
  107.         DEC     (HL)
  108.         INC     HL
  109.         INC     (HL)
  110. LR8     LD A,(FLR)
  111.         OR A
  112.         JR NZ,LLN
  113.         INC A
  114.         CALL FLOOR
  115.         CALL LLN
  116.         XOR A
  117.         CALL FLOOR
  118. LLN     LD      A,(SH)
  119.         LD      DE,(X0)
  120.         OR      A
  121.         JR      NZ,LL0
  122.         LD      HL,DSCR+128+2
  123.         JR      LL1
  124. LL0     LD      HL,DSCR+2
  125.         DEC     D
  126. LL1     LD      (TX),DE
  127.         LD      B,20
  128. LL2     CALL    ASP
  129.         JR      Z,LL_2
  130.         CALL    LSP
  131. LL_2    LD      DE,128
  132.         ADD     HL,DE
  133.         LD      A,(TY)
  134.         INC     A
  135.         LD      (TY),A
  136.         CALL    ASP
  137.         JR      Z,LL_3
  138.         CALL    RSP
  139. LL_3    LD      DE,128
  140.         ADD     HL,DE
  141.         LD      A,(TX)
  142.         INC     A
  143.         LD      (TX),A
  144.         DJNZ    LL2
  145.         RET
  146.  
  147. DRT     LD      DE,DSCR+1024 ;скролл вниз
  148.         LD      HL,DSCR+256+1024
  149.         LD      BC,4096-256
  150.         LDIR
  151.         LD      HL,X0
  152.         INC     (HL)
  153.         INC     HL
  154.         INC     (HL)
  155.         LD A,(FLR)
  156.         OR A
  157.         JR NZ,DLN
  158.         INC A
  159.         CALL FLOOR
  160.         CALL DLN
  161.         XOR A
  162.         CALL FLOOR
  163. DLN     LD      HL,X0
  164.         LD      A,#F
  165.         ADD     A,(HL)
  166.         LD      (TTX),A
  167.         INC     HL
  168.         LD      A,#F
  169.         ADD     A,(HL)
  170.         LD      (TTY),A
  171.         LD      HL,DSCR+4096+768+1
  172.         JR      UL_
  173.  
  174. URT     LD      DE,DSCR+6143-1024 ;скролл вверх
  175.         LD      HL,DSCR+6143-256-1024
  176.         LD      BC,4096-256
  177.         LDDR
  178.         LD      HL,X0
  179.         DEC     (HL)
  180.         INC     HL
  181.         DEC     (HL)
  182.         LD A,(FLR)
  183.         OR A
  184.         JR NZ,ULN
  185.         INC A
  186.         CALL FLOOR
  187.         CALL ULN
  188.         XOR A
  189.         CALL FLOOR
  190. ULN     LD      HL,(X0)
  191.         LD      (TTX),HL
  192.         LD      HL,DSCR+1024+1
  193. UL_     LD      A,(SH)
  194.         OR      A
  195.         JR      NZ,UL10
  196.         INC     HL
  197. UL10    LD      (UDHL),HL
  198.         LD      HL,96
  199.         LD      (NSH),HL
  200.         LD      C,4
  201. UL0     LD      HL,(UDHL)
  202.         LD      DE,(TTX)
  203.         LD      (TX),DE
  204.         CALL    UDL2
  205.         LD      HL,(UDHL)
  206.         DEC     HL
  207.         LD      DE,(TTX)
  208.         INC     D
  209.         LD      (TX),DE
  210.         CALL    UDL
  211.         LD      HL,(NSH)
  212.         LD      DE,32
  213.         OR      A
  214.         SBC     HL,DE
  215.         LD      (NSH),HL
  216.         LD      HL,(TTX)
  217.         INC     H
  218.         INC     L
  219.         LD      (TTX),HL
  220.         DEC     C
  221.         JR      NZ,UL0
  222.         LD      HL,-16
  223.         LD      (NSH),HL
  224.         LD      HL,(UDHL)
  225.         LD      DE,128
  226.         ADD     HL,DE
  227.         LD      DE,(TTX)
  228.         LD      (TX),DE
  229.         CALL    UDL2
  230.         RET
  231.  
  232. UDL     LD      B,15
  233. UD0     CALL    ASP
  234.         JR      Z,U_D0
  235.         CALL    NSP
  236. U_D0    LD      DE,(TX)
  237.         DEC     D
  238.         INC     E
  239.         LD      (TX),DE
  240.         INC     HL
  241.         INC     HL
  242.         DJNZ    UD0
  243.         RET
  244.  
  245. UDL2    LD      B,15
  246. UD2     CALL    ASP
  247.         JR      Z,U_D2
  248.         CALL    NSP2
  249. U_D2    LD      DE,(TX)
  250.         DEC     D
  251.         INC     E
  252.         LD      (TX),DE
  253.         INC     HL
  254.         INC     HL
  255.         DJNZ    UD2
  256.         RET
  257.  
  258. PSP     ;задать N спр
  259.         EX AF,AF
  260.         CALL GSP
  261.         CP 2
  262.         RET C
  263.         EXX
  264.         EX AF,AF
  265.         LD (HL),A
  266.         EXX
  267.         RET
  268.  
  269. ATSP    ;получить атрибуты из xATR
  270.         CALL GSP
  271.         AND #7F
  272. ATSP_   EXX
  273.         LD E,A
  274.         LD D,xATR/256
  275.         LD A,(DE)
  276.         EXX
  277.         RET
  278.  
  279. ATSPM   ;взять атрибуты с учётом героев
  280.         CALL GSP
  281.         AND #7F
  282.         CP #60
  283.         JR C,ATSP_
  284.         SUB #60
  285.         EXX
  286.         RLCA
  287.         RLCA
  288.         RLCA
  289.         LD D,0
  290.         SLA A
  291.         RL D
  292.         SLA A
  293.         RL D
  294.         ADD A,7
  295.         LD E,A
  296.         LD A,D
  297.         ADD A,MAN/256
  298.         LD D,A
  299.         LD A,(DE)
  300.         AND #7F
  301.         JR ATSP_+1
  302.  
  303. GS_4x4  LD      A,63
  304.         CP      H
  305.         DEFB #38,#14 ;JR C,G00
  306.         CP      L
  307.         DEFB #38,#11 ;JR C,G00
  308.         LD      A,L
  309.         RLCA
  310.         RLCA
  311.         SRL     H
  312.         RRA
  313.         SRL     H
  314.         RRA
  315.         LD      L,A
  316.  
  317. GS_8x2  LD      A,31
  318.         CP      H
  319.         DEFB #38,#14 ;JR C,G00
  320.         LD      A,127
  321.         CP      L
  322.         DEFB #38,#0F ;JR C,G00
  323.         RLC     L
  324.         SRL     H
  325.         RR      L
  326.         NOP
  327.         NOP
  328.  
  329. SET4x4  LD HL,#3F3F ;уст.поле 64х64
  330.         LD DE,GS_4x4
  331.         JR SETxxx
  332. SET8x2  LD HL,#1F7F ;уст.поле 128х32
  333.         LD DE,GS_8x2
  334. SETxxx  LD (XMAX),HL
  335.         EX DE,HL
  336.         LD DE,GSPdim
  337.         LD BC,18
  338.         LDIR
  339.         RET
  340.  
  341. GSP     EXX     ;получить N спр
  342.         LD      HL,(TX)
  343. GSPdim  LD      A,63
  344.         CP      H
  345.         JR      C,G00
  346.         CP      L
  347.         JR      C,G00
  348.         LD      A,L
  349.         RLCA
  350.         RLCA
  351.         SRL     H
  352.         RRA
  353.         SRL     H
  354.         RRA
  355.         LD      L,A
  356. GS1     LD      A,#F0 ;map #F000/#E000
  357.         OR      H
  358.         LD      H,A
  359.         LD      A,(HL)
  360.         EXX
  361.         RET
  362. G00     LD      A,1 ;Вне поля
  363.         EXX
  364.         RET
  365.  
  366. ;AinvX- #AA(XOR D)-норм.,#0(NOP)-только маска
  367. ;возвр: Z-0й спрайт DE-адр А-номер
  368. ASP     CALL GSP
  369.         LD D,A
  370.         RLCA
  371.         LD A,(Ainv1)
  372.         JR C,A2P
  373.         OR A
  374.         JR NZ,A22P
  375.         LD A,#AA
  376.         JR A21P
  377. A2P     OR A
  378.         JR Z,A22P
  379.         XOR A
  380. A21P    LD (Ainv1),A
  381.         LD (Ainv2),A
  382.         LD (Ainv3),A
  383.         LD (Ainv4),A
  384. A22P    LD A,D
  385. A22P_   LD E,0
  386.         AND #7F
  387.         PUSH AF
  388.         CP #60
  389.         JR NC,A4P
  390.         SRL A
  391.         RR E
  392.         ADD A,#B0;sprites
  393.         LD D,A
  394.         POP AF
  395.         RET
  396. A4P     POP AF
  397.         SUB #60
  398.         PUSHs;$
  399.         PUSH IX
  400.         CALL GET_IX
  401.         CALL HERLIV
  402.         JR NZ,A7PLIV
  403.         LD A,(IX+4)
  404.         CALL M96
  405.         LD DE,xDIE
  406.         JR A6P
  407. A7PLIV  LD A,(IX+6)     ;visi
  408.         OR A            ;
  409.         LD A,(IX+7)     ;
  410.         JR Z,A9P        ;
  411.         POP IX
  412.         POPs;$
  413.         JR A22P_
  414. A9P     CALL NORM_V
  415.         LD A,(IX+3)
  416.         CALL M96
  417.         ADD HL,HL
  418.         LD A,(IX+4)
  419.         RLCA
  420.         LD D,A
  421.         RLCA
  422.         ADD A,D
  423.         ADD A,H
  424.         LD H,A
  425.         LD DE,xHERO
  426. A6P     ADD HL,DE
  427.         PUSH HL
  428.         LD A,(IX+7)
  429.         AND #7F
  430.         LD L,0
  431.         SRL A
  432.         RR L
  433.         ADD A,#B0
  434.         LD H,A
  435.         LD DE,DATR
  436.         LD BC,128
  437.         LDIR
  438.         POP HL
  439.         LD DE,DATR+16
  440.         Ms 4
  441.         LD B,48
  442. A5P     LD A,(DE)
  443.         OR (HL)
  444.         LD (DE),A
  445.         INC DE
  446.         LD A,(DE)
  447.         CPL
  448.         OR (HL)
  449.         CPL
  450.         INC HL
  451.         OR (HL)
  452.         LD (DE),A
  453.         INC DE
  454.         INC HL
  455.         DJNZ A5P
  456.         CALL PT128
  457.         POP IX
  458.         POPs;$
  459.         LD DE,DATR
  460.         LD A,#60
  461.         OR A
  462.         RET;NZ
  463.  
  464. M96     LD L,A
  465.         RLCA
  466.         ADD A,L ;x3
  467.         RLCA    ;x6
  468.         RLCA    ;x12
  469.         LD      L,A
  470.         LD      H,0
  471.         ADD     HL,HL ;x24
  472.         ADD     HL,HL ;x48
  473.         ADD     HL,HL ;x96
  474.         RET
  475.  
  476. MSizeP  pushs;$
  477.         CALL ASP
  478.         JR Z,MSiRET
  479.         PUSH HL
  480.         LD B,vSIZE/256
  481.         OR #80 ;(vSIZE mod 256)
  482.         LD C,A
  483.         LD A,(BC)
  484.         LD H,0
  485.         ADD A,A
  486.         ADD A,A
  487.         ADD A,A
  488.         LD L,A
  489.         RRCA
  490.         ADD A,E
  491.         LD E,A
  492.         ADD HL,HL
  493.         ADD HL,HL
  494.         LD A,(BC)
  495.         POP BC
  496.         ADD HL,BC
  497.         CPL
  498.         ADD A,33
  499.         LD B,A
  500.         JP MS2
  501.  
  502. BSP     pushs;$
  503.         JP      MS2
  504.  
  505. NSP     pushs;$
  506.         LD      BC,(NSH)
  507.         EX      DE,HL
  508.         ADD     HL,BC
  509.         EX      DE,HL
  510.         LD      B,8
  511.         JP      MS2
  512.  
  513. NSP2    pushs;$
  514.         EX      DE,HL
  515.         LD      BC,(NSH)
  516.         ADD     HL,BC
  517.         LD      BC,16
  518.         ADD     HL,BC
  519.         EX      DE,HL
  520.         LD      B,4
  521.         LD      A,(NSH)
  522.         CP      96
  523.         JR      Z,MS2
  524.         CP      -16
  525.         JR      Z,MS2
  526.         LD      B,8
  527.         JP      MS2
  528.  
  529. MSP     pushs;$
  530.         LD      B,32
  531. MS2     LD      (MSPSP+1),SP
  532.         EX      DE,HL
  533.         LD      SP,HL
  534.         EX      DE,HL
  535. MS20    POP     DE
  536.         LD      A,(HL)
  537.         OR      E
  538. Ainv1   XOR     D
  539.         LD      (HL),A
  540.         INC     HL
  541.         POP     DE
  542.         LD      A,(HL)
  543.         OR      E
  544. Ainv2   XOR     D
  545.         LD      (HL),A
  546.         LD      DE,31
  547.         ADD     HL,DE
  548.         DJNZ    MS20
  549. MSPSP   LD      SP,#4020
  550. MSiRET  pops;$
  551.         RET
  552.  
  553. LSP     pushs;$
  554.         LD      B,32
  555. LS2     LD      (LSPSP+1),SP
  556.         EX      DE,HL
  557.         LD      SP,HL
  558.         EX      DE,HL
  559. LS20    POP     DE
  560.         LD      A,(HL)
  561.         OR      E
  562. Ainv3   XOR     D
  563.         LD      (HL),A
  564.         POP     DE
  565.         LD      DE,32
  566.         ADD     HL,DE
  567.         DJNZ    LS20
  568. LSPSP   LD      SP,#4020
  569.         pops;$
  570.         RET
  571.  
  572. RSP     pushs;$
  573.         LD      B,32
  574. RS2     LD      (RSPSP+1),SP
  575.         EX      DE,HL
  576.         LD      SP,HL
  577.         EX      DE,HL
  578. RS20    POP     DE
  579.         POP     DE
  580.         LD      A,(HL)
  581.         OR      E
  582. Ainv4   XOR     D
  583.         LD      (HL),A
  584.         LD      DE,32
  585.         ADD     HL,DE
  586.         DJNZ    RS20
  587. RSPSP   LD      SP,#4020
  588.         pops;$
  589.         RET
  590.  
  591. RSPB    pushs;$
  592.         JR      RS2
  593.  
  594. LSPB    pushs;$
  595.         JR      LS2
  596.  
  597. ALLSPF  LD A,(FLR) ;вывод обоих этажей
  598.         OR A
  599.         JR NZ,ALLSP
  600.         INC A
  601.         CALL FLOOR
  602.         CALL ALLSP
  603.         XOR A
  604.         CALL FLOOR
  605. ALLSP   LD      HL,DSCR+128+2
  606.         LD      A,(SH)
  607.         OR      A
  608.         JR      Z,AP1
  609.         DEC     HL
  610. AP1     LD      DE,(X0)
  611.         LD      (TX),DE
  612.         LD      C,20
  613. AP2     LD      B,15
  614.         PUSH    DE
  615. AP3     CALL    MSizeP
  616.         LD      DE,(TX)
  617.         INC     E
  618.         DEC     D
  619.         LD      (TX),DE
  620.         INC     HL
  621.         INC     HL
  622.         DJNZ    AP3
  623.         LD      DE,128-30-1
  624.         ADD     HL,DE
  625.         POP     DE
  626.         INC     D
  627.         LD      (TX),DE
  628.         PUSH    DE
  629.         LD      B,15
  630. AP4     CALL    MSizeP
  631.         LD      DE,(TX)
  632.         INC     E
  633.         DEC     D
  634.         LD      (TX),DE
  635.         INC     HL
  636.         INC     HL
  637.         DJNZ    AP4
  638.         LD      DE,128-30+1
  639.         ADD     HL,DE
  640.         POP     DE
  641.         INC     E
  642.         LD      (TX),DE
  643.         DEC     C
  644.         JR      NZ,AP2
  645.         RET
  646.  
  647. DSC3    LD      B,8
  648.         PUSH    DE
  649. DS3     PUSH    DE
  650.         PUSH    BC
  651.         INC DE
  652.         LDI
  653.         LDI
  654.         LDI
  655.         LDI;4
  656.         LDI
  657.         LDI
  658.         LDI
  659.         LDI;8
  660.         LDI
  661.         LDI
  662.         LDI
  663.         LDI;12
  664.         LDI
  665.         LDI
  666.         LDI
  667.         LDI;16
  668.         LDI
  669.         LDI
  670.         LDI
  671.         LDI;20
  672.         LDI
  673.         LDI
  674.         LDI
  675.         LDI;24
  676.         LDI
  677.         LDI
  678.         LDI
  679.         LDI;28
  680.         LD      DE,4
  681.         ADD     HL,DE
  682.         POP     BC
  683.         POP     DE
  684.         INC     D
  685.         DJNZ    DS3
  686.         POP     DE
  687.         LD      A,32
  688.         ADD     A,E
  689.         LD      E,A
  690.         DEC     C
  691.         JR      NZ,DSC3
  692.         RET
  693.  
  694. OUTDSC  CALL    MEM7
  695.         LD      DE,SCR+32
  696.         LD      HL,DSCR+1024+2
  697.         LD      C,7
  698.         CALL    DSC3
  699.         LD      DE,SCR+2048
  700.         LD      C,8
  701.         CALL    DSC3
  702.         LD      DE,SCR+4096
  703.         LD C,1
  704.         CALL    DSC3
  705.         JP  PT128
  706.  
  707. FLR     EQU     G00+1   ;этаж 1-1й 0-2й
  708. FLOOR   OR A ;сменить этаж на А(0-2Й;1-1Й)
  709.         LD A,(FLR)
  710.         JR NZ,FLO2
  711.         OR A
  712.         RET Z
  713.         XOR A ;2й
  714.         LD (FLR),A
  715.         PUSH BC
  716.         LD C,3
  717.         LD A,#E0
  718. FLO_    LD (GS1+1),A
  719.         LD A,(X0)
  720.         ADD A,C
  721.         LD (X0),A
  722.         LD A,(Y0)
  723.         ADD A,C
  724.         LD (Y0),A
  725.         POP BC
  726.         RET
  727. FLO2    OR A
  728.         RET NZ
  729.         INC A
  730.         LD (FLR),A
  731.         PUSH BC
  732.         LD C,-3
  733.         LD A,#F0
  734.         JR FLO_
  735.  
  736. LCOUNT  LD DE,vSIZE ;подсчёт высоты
  737.         LD HL,#B000
  738.         LD B,96
  739. LCX     PUSH BC
  740.         PUSH HL
  741.         LD BC,#1F00
  742. LCX0    LD A,(HL)
  743.         OR A
  744.         JR NZ,LCX2
  745.         INC HL
  746.         INC HL
  747.         LD A,(HL)
  748.         OR A
  749.         JR NZ,LCX2
  750.         INC HL
  751.         INC HL
  752.         INC C
  753.         DJNZ LCX0
  754. LCX2    LD A,C
  755.         LD (DE),A
  756.         INC DE
  757.         POP HL
  758.         LD BC,128
  759.         ADD HL,BC
  760.         POP BC
  761.         DJNZ LCX
  762.         XOR A
  763.         LD (DE),A
  764.         RET
  765.  
  766.