?login_element?

Subversion Repositories NedoOS

Rev

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

  1. ;-----ЧВ Работа со спрайтами ---
  2. step_B  EQU     0 ;нач шаг курс
  3. oumDEL  EQU     3 ;задержка на вывод карты
  4. ouFAST  EQU     5 ;ускорение вывода экрана
  5.  
  6. ;---выв.спрайтов карты----
  7. SQROUT  ;hl-adr spr ;DE-scr adr
  8.         if EGA
  9.         call setpgsscr40008000
  10.         endif
  11.         LD B,D
  12.         LD C,E
  13.         LD E,(HL)
  14.         INC L
  15.         LD D,(HL)
  16.         INC L
  17.        
  18.         if EGA
  19.  
  20.         LD (SQUsp),SP
  21.         LD SP,HL
  22.         LD L,C
  23.         LD H,B
  24.        
  25.         ld hx,16/4
  26.         jp prtile16columngo
  27. prtile16column
  28.         POP DE
  29. prtile16columngo
  30.         ld bc,40
  31.        
  32.         LD (HL),E ;0
  33.         add hl,bc
  34.         LD (HL),D
  35.         add hl,bc
  36.         POP DE
  37.         LD (HL),E ;1
  38.         add hl,bc
  39.         LD (HL),D
  40.         add hl,bc
  41.         POP DE
  42.         LD (HL),E ;2
  43.         add hl,bc
  44.         LD (HL),D
  45.         add hl,bc
  46.         POP DE
  47.         LD (HL),E ;3
  48.         add hl,bc
  49.         LD (HL),D
  50.         add hl,bc
  51.         POP DE
  52.         LD (HL),E ;+0
  53.         add hl,bc
  54.         LD (HL),D
  55.         add hl,bc
  56.         POP DE
  57.         LD (HL),E ;+1
  58.         add hl,bc
  59.         LD (HL),D
  60.         add hl,bc
  61.         POP DE
  62.         LD (HL),E ;+2
  63.         add hl,bc
  64.         LD (HL),D
  65.         add hl,bc
  66.         POP DE
  67.         LD (HL),E ;+3
  68.         add hl,bc
  69.         LD (HL),D
  70.        
  71.         ld bc,0x4000-(15*40)
  72.         ld a,0x9f;0xa0
  73.         cp h
  74.         adc hl,bc ;de = 0x4000 - ((sprhgt-1)*40)
  75.         jp pe,prtile16column ;в половине случаев
  76. ;8000->с000 (надо 6000) или a000->e001 (надо 4001)
  77.          inc a
  78.         xor h
  79.         ld h,a
  80.          dec hx
  81.          jp nz,prtile16column
  82.  
  83. SQUsp=$+1
  84.         ld sp,0
  85.         jp setpgsmain40008000
  86.        
  87.         else ;~EGA
  88.  
  89.         LD (SET_SP+1),SP
  90.         LD SP,HL
  91.         LD L,C
  92.         LD H,B
  93.        
  94.         LD B,2
  95. SQU1    LD (HL),E ;0
  96.         INC H
  97.         LD (HL),D
  98.         INC H
  99.         POP DE
  100.         LD (HL),E ;1
  101.         INC H
  102.         LD (HL),D
  103.         INC H
  104.         POP DE
  105.         LD (HL),E ;2
  106.         INC H
  107.         LD (HL),D
  108.         INC H
  109.         POP DE
  110.         LD (HL),E ;3
  111.         INC H
  112.         LD (HL),D
  113.         POP DE
  114.         LD A,L
  115.         ADD A,32
  116.         LD L,A
  117.         LD A,H
  118.         SUB 7
  119.         LD H,A
  120.         LD (HL),E ;+0
  121.         INC H
  122.         LD (HL),D
  123.         INC H
  124.         POP DE
  125.         LD (HL),E ;+1
  126.         INC H
  127.         LD (HL),D
  128.         INC H
  129.         POP DE
  130.         LD (HL),E ;+2
  131.         INC H
  132.         LD (HL),D
  133.         INC H
  134.         POP DE
  135.         LD (HL),E ;+3
  136.         INC H
  137.         LD (HL),D
  138.         POP DE
  139.         LD A,H
  140.         SUB 7
  141.         LD H,A
  142.         LD A,L
  143.         SUB 31
  144.         LD L,A
  145.         DJNZ SQU1
  146.        
  147.         JP SET_SP
  148.        
  149.         endif ;~EGA
  150.  
  151. P12X12  LD HL,(X0)
  152.         CALL GMAP
  153.         if EGA
  154.         ;call setpgsscr40008000
  155.         LD DE,scrbase
  156.         else
  157.         LD DE,DSCR
  158.         endif
  159.         LD C,12
  160. PX0     LD B,12
  161. PX1     PUSH BC
  162.         PUSH HL ;adr in map
  163.         PUSH DE ;adr in scr
  164.         CALL GSADR
  165.         CALL NC,SQROUT
  166.         POP DE
  167.         POP HL
  168.         POP BC
  169.         if EGA
  170.         INC E
  171.         INC E
  172.         else
  173.         INC E
  174.         INC E
  175.         endif
  176.         INC HL
  177.         DJNZ PX1
  178.         if EGA
  179.         push hl
  180.         ld hl,-24+(40*16)
  181.         add hl,de
  182.         ex de,hl
  183.         pop hl
  184.         else
  185.         LD A,E
  186.         ADD A,40
  187.         LD E,A
  188.         JR NC,PX2
  189.         LD A,D
  190.         ADD A,8
  191.         LD D,A
  192. PX2    
  193.         endif
  194.         LD A,L
  195.         ADD A,52
  196.         JR NC,PX3
  197.         INC H
  198. PX3     LD L,A
  199.         DEC C
  200.         JR NZ,PX0
  201.         if EGA
  202.         ;call setpgsmain40008000
  203.         endif
  204.         RET
  205.  
  206.  
  207. N12X12  ;покрытие невидимых полей
  208.         LD HL,(X0)
  209.         CALL GMAP
  210.         if EGA
  211.         ;call setpgsscr40008000
  212.         LD DE,scrbase
  213.         else
  214.         LD DE,DSCR
  215.         endif
  216.         LD C,12
  217. NPX0    LD B,12
  218. NPX1    LD A,(HL)
  219.         RLA
  220.         JR NC,NPXN
  221.         PUSH BC
  222.         PUSH HL ;adr in map
  223.         PUSH DE ;adr in scr
  224.         if EGA
  225.         ld a,28
  226.         call _128
  227.         ld hl,128*(383-256)+0xc000 ;тайл 383
  228.         else
  229.         LD HL,shadwA
  230.         endif
  231.         CALL SQROUT
  232.         POP DE
  233.         POP HL
  234.         POP BC
  235. NPXN   
  236.         if EGA
  237.         INC E
  238.         INC E
  239.         else
  240.         INC E
  241.         INC E
  242.         endif
  243.         INC HL
  244.         DJNZ NPX1
  245.         if EGA
  246.         push hl
  247.         ld hl,-24+(40*16)
  248.         add hl,de
  249.         ex de,hl
  250.         pop hl
  251.         else
  252.         LD A,E
  253.         ADD A,40
  254.         LD E,A
  255.         JR NC,NPX2
  256.         LD A,D
  257.         ADD A,8
  258.         LD D,A
  259. NPX2   
  260.         endif
  261.         LD A,L
  262.         ADD A,52
  263.         JR NC,NPX3
  264.         INC H
  265. NPX3    LD L,A
  266.         DEC C
  267.         JR NZ,NPX0
  268.         if EGA
  269.         ;call setpgsmain40008000
  270.         endif
  271.         RET
  272.  
  273. ;вывод строчки при скролле
  274. PXLO    LD HL,(X0)
  275.         LD DE,DSCR+#10C0
  276.         LD A,11
  277.         ADD A,H
  278.         LD H,A
  279.         JR Px_
  280. PXHI    LD HL,(X0)
  281.         LD DE,DSCR
  282. Px_     CALL GMAP
  283.         LD B,12
  284. PxH1    PUSH BC
  285.         PUSH HL ;adr in map
  286.         PUSH DE ;adr in scr
  287.         CALL GSADR
  288.        if EGA==0 ;TODO
  289.         CALL NC,SQROUT
  290.        endif
  291.         POP DE
  292.         POP HL
  293.         POP BC
  294.         INC E
  295.         INC E
  296.         INC L
  297.         DJNZ PxH1
  298.         RET
  299.  
  300. NXLO    LD HL,(X0)
  301.         LD DE,DSCR+#10C0
  302.         LD A,11
  303.         ADD A,H
  304.         LD H,A
  305.         JR Nx_
  306. NXHI    LD HL,(X0)
  307.         LD DE,DSCR
  308. Nx_     CALL GMAP
  309.         LD B,12
  310. NxH1    LD A,(HL)
  311.         RLA
  312.         JR NC,NxHN
  313.         PUSH BC
  314.         PUSH HL ;adr in map
  315.         PUSH DE ;adr in scr
  316.         LD HL,shadwA
  317.        if EGA==0 ;TODO
  318.         CALL SQROUT
  319.        endif
  320.         POP DE
  321.         POP HL
  322.         POP BC
  323. NxHN    INC E
  324.         INC E
  325.         INC L
  326.         DJNZ NxH1
  327.         RET
  328.  
  329. PYRT    LD HL,(X0)
  330.         LD DE,DSCR+22
  331.         LD A,L
  332.         ADD A,11
  333.         LD L,A
  334.         JR Py_
  335. PYLF    LD HL,(X0)
  336.         LD DE,DSCR
  337. Py_     CALL GMAP
  338.         LD B,12
  339. Py1     PUSH BC
  340.         PUSH HL ;adr in map
  341.         PUSH DE ;adr in scr
  342.         CALL GSADR
  343.        if EGA==0 ;TODO
  344.         CALL NC,SQROUT
  345.        endif
  346.         POP DE
  347.         POP HL
  348.         POP BC
  349.         LD A,E
  350.         ADD A,64
  351.         LD E,A
  352.         JR NC,Py2
  353.         LD A,D
  354.         ADD A,8
  355.         LD D,A
  356. Py2     LD A,L
  357.         ADD A,64
  358.         JR NC,Py3
  359.         INC H
  360. Py3     LD L,A
  361.         DJNZ Py1
  362.         RET
  363.  
  364. NYRT    LD HL,(X0)
  365.         LD DE,DSCR+22
  366.         LD A,L
  367.         ADD A,11
  368.         LD L,A
  369.         JR Ny_
  370. NYLF    LD HL,(X0)
  371.         LD DE,DSCR
  372. Ny_     CALL GMAP
  373.         LD B,12
  374. Ny1     LD A,(HL)
  375.         RLA
  376.         JR NC,NyN
  377.         PUSH BC
  378.         PUSH HL ;adr in map
  379.         PUSH DE ;adr in scr
  380.         LD HL,shadwA
  381.        if EGA==0 ;TODO
  382.         CALL SQROUT
  383.        endif
  384.         POP DE
  385.         POP HL
  386.         POP BC
  387. NyN     LD A,E
  388.         ADD A,64
  389.         LD E,A
  390.         JR NC,Ny2
  391.         LD A,D
  392.         ADD A,8
  393.         LD D,A
  394. Ny2     LD A,L
  395.         ADD A,64
  396.         JR NC,Ny3
  397.         INC H
  398. Ny3     LD L,A
  399.         DJNZ Ny1
  400.         RET
  401.  
  402. ;------------------
  403.  
  404. GMAP    ; вхHL-XY, выхHL-pos in map
  405.         LD A,L
  406.         RLCA
  407.         RLCA
  408.         SRL H
  409.         RRA
  410.         SRL H
  411.         RRA
  412.         LD L,A
  413.         LD A,H
  414.         ADD A,MAP/256
  415.         LD H,A
  416.         RET
  417.  
  418. GMAP2   ; вхHL-XY, выхHL-pos in map2
  419.         LD A,L
  420.         RLCA
  421.         RLCA
  422.         SRL H
  423.         RRA
  424.         SRL H
  425.         RRA
  426.         LD L,A
  427.         LD A,H
  428.         ADD A,MAP2/256
  429.         LD H,A
  430.         RET
  431.  
  432. shadwS  ;выбор адр невидим поля
  433.         LD A,(shadwT)
  434. shadwS_3
  435. ;тут тоже точка входа (+3)
  436.         PUSH AF
  437.         CALL MEM1
  438.         POP AF
  439.         OR A
  440.         LD DE,shadwA
  441.         JR Z,sha0
  442.         LD HL,SHADOW
  443.         LD BC,32
  444.         LDIR
  445.         RET
  446. sha0    LD A,#FF
  447.         LD B,32
  448. sha1    LD (DE),A
  449.         INC DE
  450.         DJNZ sha1
  451.         RET
  452.  
  453. GSADR   ;вхHL-pos in map;  выхHL-adr in LAND ;NC/C-видим,не видим
  454.         if EGA
  455.         LD A,(HL)
  456.         SLA A
  457.         RET C
  458. ;тайл=128 байт, всего 384 тайла (3 страницы)
  459.         CP 226
  460.         JR NC,GSA2
  461. GSA0
  462. ;pg26,27
  463.         rrca
  464.         LD h,a
  465.         ld l,0
  466.         rla
  467.         ld a,l;0
  468.         adc a,26 ;NC
  469.         scf
  470.         rr h
  471.         rr l ;NC
  472.         set 6,h
  473.         jp _128
  474. GSA2    CP 240
  475.         JR NC,GSA3
  476.         EX AF,AF'       ;вода
  477.         LD A,(ANIM)
  478.         OR A
  479.         JR Z,GSA2A
  480. GSA2C   DEC A
  481.         JR Z,GSA2B
  482.         EX AF,AF'
  483.         ADD A,10
  484.         EX AF,AF'
  485.         JR GSA2C
  486. GSA2B   EX AF,AF'
  487.         JR GSA0        
  488. GSA2A   EX AF,AF'
  489.         SUB 226-112
  490.         JR GSA0
  491. GSAT    DEFW 1,65,64,63,-1,-65,-64,-63 ;смещение на карте до центра здания
  492. GSA3
  493.         RRCA ;120..127 - кайма зданий
  494.         SUB 120
  495. ;a=0..7
  496.         PUSH DE
  497.         PUSH AF ;0..7 номер места около домика
  498.         PUSH HL         ;здания
  499.         LD HL,GSAT
  500.         CALL WT ;a=(hl+a)
  501.         POP DE
  502.         ADD HL,DE
  503.         LD A,(HL) ;нашли на карте центр здания = 78..127
  504.         AND #7F
  505.         CP 108
  506.         JR NC,GSA3A ;>=108: домик 2x2
  507. ;домик 3x3
  508.         SUB 78
  509.         ADD A,A
  510.         ADD A,A
  511.         ADD A,A
  512.         POP DE
  513.         ADD A,D ;0..7 номер места около домика
  514.         JR GSA11
  515. GSA3A
  516. ;>=108: домик 2x2
  517.         SUB 108
  518.         LD E,A
  519.         ADD A,A
  520.         ADD A,E
  521.         POP DE
  522.         ADD A,D ;0..7 номер места около домика
  523.        add a,368-128
  524. GSA11  
  525. ;pg27,28
  526.        POP DE
  527.         LD h,a
  528.        ld l,0
  529.        rla
  530.        ld a,l;0
  531.        adc a,27 ;NC
  532.        scf
  533.        rr h
  534.        rr l ;NC
  535.        set 6,h
  536.        jp _128
  537.        
  538.        else ;~EGA
  539.  
  540.         LD A,(HL)
  541.         SLA A
  542.         RET C
  543.         CP 226
  544.         JR NC,GSA2
  545. GSA0    LD L,A
  546.         LD H,LAND/4096
  547.         ADD HL,HL
  548.         ADD HL,HL
  549.         ADD HL,HL
  550.         ADD HL,HL
  551.         RET
  552. GSA2    CP 240
  553.         JR NC,GSA3
  554.         EX AF,AF        ;вода
  555.         LD A,(ANIM)
  556.         OR A
  557.         JR Z,GSA2A
  558. GSA2C   DEC A
  559.         JR Z,GSA2B
  560.         EX AF,AF
  561.         ADD A,10
  562.         EX AF,AF
  563.         JR GSA2C
  564. GSA2B   EX AF,AF
  565.         JR GSA0
  566. GSA2A   EX AF,AF
  567.         SUB 226-112
  568.         JR GSA0
  569. GSAT    DEFW 1,65,64,63,-1,-65,-64,-63
  570. GSA3    RRCA
  571.         SUB 120
  572.         PUSH DE
  573.         PUSH AF
  574.         PUSH HL         ;здания
  575.         LD HL,GSAT
  576.         CALL WT
  577.         POP DE
  578.         ADD HL,DE
  579.         LD A,(HL)
  580.         AND #7F
  581.         CP 108
  582.         JR NC,GSA3A
  583.         SUB 78
  584.         ADD A,A
  585.         ADD A,A
  586.         ADD A,A
  587.         POP DE
  588.         ADD A,D
  589.         LD DE,128*32+LAND
  590.         JR GSA11
  591. GSA3A   SUB 108
  592.         LD E,A
  593.         ADD A,A
  594.         ADD A,E
  595.         POP DE
  596.         ADD A,D
  597.         LD DE,368*32+LAND
  598. GSA11   LD L,A
  599.         LD H,0
  600.         ADD HL,HL
  601.         ADD HL,HL
  602.         ADD HL,HL
  603.         ADD HL,HL
  604.         ADD HL,HL
  605.         ADD HL,DE
  606.         POP DE
  607.         RET
  608.        endif ;~EGA
  609.  
  610. ScorrP  LD A,L
  611.         ADD A,32
  612.         LD L,A
  613.         JR C,Sco1
  614.         LD A,H
  615.         SUB 8
  616.         LD H,A
  617. Sco1    LD A,E
  618.         ADD A,32
  619.         LD E,A
  620.         RET C
  621.         LD A,D
  622.         SUB 8
  623.         LD D,A
  624.         RET
  625.  
  626. ScorrM  LD A,L
  627.         SUB 32
  628.         LD L,A
  629.         JR C,Sco3
  630.         LD A,H
  631.         ADD A,8
  632.         LD H,A
  633. Sco3    LD A,E
  634.         SUB 32
  635.         LD E,A
  636.         RET C
  637.         LD A,D
  638.         ADD A,8
  639.         LD D,A
  640.         RET
  641.  
  642. ;---------------
  643.  
  644. SdUR    CALL ScU1
  645.         JP Z,ScRT
  646.         CALL ScR1
  647.         JP Z,ScUP1
  648.         CALL SW_OFF
  649.       if EGA
  650.        call O12X12
  651.       else
  652.         ;--CALL ScU2+ScR2
  653.          CALL PXLO
  654.          CALL PYLF
  655.          CALL SXLO
  656.          CALL SYLF
  657.          CALL NXLO
  658.          CALL NYLF
  659.         CALL MEM7
  660.         CALL ScUR_
  661.       endif
  662.         JP ScNZ
  663.  
  664. SdDL    CALL ScD1
  665.         JP Z,ScLF
  666.         CALL ScL1
  667.         JR Z,ScDW1
  668.         CALL SW_OFF
  669.       if EGA
  670.        call O12X12
  671.       else
  672.         ;--CALL ScD2+ScL2
  673.          CALL PXHI
  674.          CALL PYRT
  675.          CALL SXHI
  676.          CALL SYRT
  677.          CALL NXHI
  678.          CALL NYRT
  679.         CALL MEM7
  680.         CALL ScDL_
  681.       endif
  682.         JP ScNZ
  683.  
  684.  
  685. SdUL    CALL ScU1
  686.         JP Z,ScLF
  687.         CALL ScL1
  688.         JR Z,ScUP1
  689.         CALL SW_OFF
  690.       if EGA
  691.        call O12X12
  692.       else
  693.         ;--CALL ScU2+ScL2
  694.          CALL PXLO
  695.          CALL PYRT
  696.          CALL SXLO
  697.          CALL SYRT
  698.          CALL NXLO
  699.          CALL NYRT
  700.         CALL MEM7
  701.         CALL ScUL_
  702.       endif
  703.         JR ScNZ
  704.  
  705.  
  706. SdDR    CALL ScD1
  707.         JP Z,ScRT
  708.         CALL ScR1
  709.         JR Z,ScDW1
  710.         CALL SW_OFF
  711.       if EGA
  712.        call O12X12
  713.       else
  714.         ;--CALL ScD2+ScR2
  715.          CALL PXHI
  716.          CALL PYLF
  717.          CALL SXHI
  718.          CALL SYLF
  719.          CALL NXHI
  720.          CALL NYLF
  721.         CALL MEM7
  722.         CALL ScDR_
  723.       endif
  724.         JR ScNZ
  725.  
  726. ScDW    CALL ScD1
  727.         JP Z,noROT
  728. ScDW1   CALL SW_OFF
  729.       if EGA
  730.        call O12X12
  731.       else
  732.         CALL ScD2
  733.         CALL MEM7
  734.         JP ScD_
  735. ScD2    CALL PXHI
  736.         CALL SXHI
  737.         CALL NXHI
  738.       endif
  739.         JR ScNZ
  740. ScD1    LD HL,Y0
  741.         LD A,(HL)
  742.         OR A
  743.         RET Z
  744.         DEC (HL)
  745.         OR A
  746.         RET
  747.  
  748. ScUP    CALL ScU1
  749.         JP Z,noROT
  750. ScUP1   CALL SW_OFF
  751.       if EGA
  752.        call O12X12
  753.       else
  754.         CALL ScU2
  755.         CALL MEM7
  756.         JP ScU_
  757. ScU2    CALL PXLO
  758.         CALL SXLO
  759.         CALL NXLO
  760.       endif
  761. ScNZ    CALL BMOV
  762.         LD HL,isROT
  763.         LD (HL),1
  764.         RET
  765. ScU1    LD HL,Y0
  766.         LD A,(HL)
  767.         CP 52
  768.         RET Z
  769.         INC (HL)
  770.         RET
  771.  
  772. ScLF    CALL ScL1
  773.         JP Z,noROT
  774.         CALL SW_OFF
  775.       if EGA
  776.        call O12X12
  777.       else
  778.         CALL ScL2
  779.         CALL MEM7
  780.         JP ScL_
  781. ScL2    CALL PYRT
  782.         CALL SYRT
  783.         CALL NYRT
  784.       endif
  785.         JR ScNZ
  786. ScL1    LD HL,X0
  787.         LD A,(HL)
  788.         CP 52
  789.         RET Z
  790.         INC (HL)
  791.         RET
  792.  
  793. ScRT    CALL ScR1
  794.         JP Z,noROT
  795.         CALL SW_OFF
  796.       if EGA
  797.        call O12X12
  798.       else
  799.         CALL ScR2
  800.         CALL MEM7
  801.         JP ScR_
  802. ScR2    CALL PYLF
  803.         CALL SYLF
  804.         CALL NYLF
  805.       endif
  806.         JR ScNZ
  807. ScR1    LD HL,X0
  808.         LD A,(HL)
  809.         OR A
  810.         RET Z
  811.         DEC (HL)
  812.         OR A
  813.         RET
  814.  
  815.        if EGA==0
  816.  
  817. ScD_    CALL B_SETI
  818.         LD HL,SCR+#17A0
  819.         LD DE,SCR+#17E0
  820.         LD BC,#1602
  821. ScD0    PUSH BC
  822.         CALL B_NXTI
  823.         LD A,8
  824. ScD10   PUSH HL
  825.         PUSH DE
  826.         LDI;
  827.         LDI
  828.         LDI
  829.         LDI
  830.         LDI
  831.         LDI
  832.         LDI
  833.         LDI
  834.         LDI;
  835.         LDI
  836.         LDI
  837.         LDI
  838.         LDI
  839.         LDI
  840.         LDI
  841.         LDI
  842.         LDI;
  843.         LDI
  844.         LDI
  845.         LDI
  846.         LDI
  847.         LDI
  848.         LDI
  849.         LDI
  850.         POP DE
  851.         POP HL
  852.         DEC H
  853.         DEC D
  854.         DEC A
  855.         JP NZ,ScD10
  856.         CALL ScorrM
  857.         CALL BL_ONN
  858.         POP BC
  859.         DJNZ ScD0
  860.         DEC C
  861.         JP Z,B_U2B
  862.         LD L,E
  863.         LD A,D
  864.         XOR #60 ;!
  865.         LD H,A
  866.         LD B,2
  867.         JR ScD0
  868.  
  869. ScDR_   CALL B_SETI
  870.         LD HL,SCR+#17A0+21
  871.         LD DE,SCR+#17E0+23
  872.         LD BC,#1602
  873. ScDR0   PUSH BC
  874.         CALL B_NXTI
  875.         LD A,8
  876. ScDR1   EX AF,AF
  877.         PUSH HL
  878.         PUSH DE
  879.         LD BC,22
  880.         LDDR
  881.         LD L,E
  882.         LD A,D
  883.         XOR #60;!
  884.         LD H,A
  885.         LDD
  886.         LDD
  887.         POP DE
  888.         POP HL
  889.         DEC H
  890.         DEC D
  891.         EX AF,AF
  892.         DEC A
  893.         JP NZ,ScDR1
  894.         CALL ScorrM
  895.         CALL BL_ONN
  896.         POP BC
  897.         DJNZ ScDR0
  898.         DEC C
  899.         JP Z,B_U2B
  900.         LD L,E
  901.         LD A,D
  902.         XOR #60
  903.         LD H,A
  904.         LD B,2
  905.         JR ScDR0
  906.  
  907. ScDL_   CALL B_SETI
  908.         LD HL,SCR+#17A0+2
  909.         LD DE,SCR+#17E0
  910.         LD BC,#1602
  911. ScDL0   PUSH BC
  912.         CALL B_NXTI
  913.         LD A,8
  914. ScDL1   EX AF,AF
  915.         PUSH HL
  916.         PUSH DE
  917.         LD BC,22
  918.         LDIR
  919.         LD L,E
  920.         LD A,D
  921.         XOR #60;!
  922.         LD H,A
  923.         LDI
  924.         LDI
  925.         POP DE
  926.         POP HL
  927.         DEC H
  928.         DEC D
  929.         EX AF,AF
  930.         DEC A
  931.         JP NZ,ScDL1
  932.         CALL ScorrM
  933.         CALL BL_ONN
  934.         POP BC
  935.         DJNZ ScDL0
  936.         DEC C
  937.         JP Z,B_U2B
  938.         LD L,E
  939.         LD A,D
  940.         XOR #60
  941.         LD H,A
  942.         LD B,2
  943.         JR ScDL0
  944.  
  945. ScU_    CALL B_SETN
  946.         LD HL,SCR+#0040
  947.         LD DE,SCR
  948.         LD BC,#1602
  949. ScU0    PUSH BC
  950.         CALL B_NXTN
  951.         LD A,8
  952. ScU10   PUSH HL
  953.         PUSH DE
  954.         LDI;
  955.         LDI
  956.         LDI
  957.         LDI
  958.         LDI
  959.         LDI
  960.         LDI
  961.         LDI
  962.         LDI;
  963.         LDI
  964.         LDI
  965.         LDI
  966.         LDI
  967.         LDI
  968.         LDI
  969.         LDI
  970.         LDI;
  971.         LDI
  972.         LDI
  973.         LDI
  974.         LDI
  975.         LDI
  976.         LDI
  977.         LDI
  978.         POP DE
  979.         POP HL
  980.         INC H
  981.         INC D
  982.         DEC A
  983.         JP NZ,ScU10
  984.         CALL ScorrP
  985.         CALL BL_ONN
  986.         POP BC
  987.         DJNZ ScU0
  988.         DEC C
  989.         JP Z,B_U2B
  990.         LD L,E
  991.         LD A,D
  992.         XOR #60;!
  993.         LD H,A
  994.         LD B,2
  995.         JR ScU0
  996.  
  997. ScUR_   CALL B_SETN
  998.         LD HL,SCR+#0040+21
  999.         LD DE,SCR+23
  1000.         LD BC,#1602
  1001. ScUR0   PUSH BC
  1002.         CALL B_NXTN
  1003.         LD A,8
  1004. ScUR1   EX AF,AF
  1005.         PUSH HL
  1006.         PUSH DE
  1007.         LD BC,22
  1008.         LDDR
  1009.         LD L,E
  1010.         LD A,D
  1011.         XOR #60;!
  1012.         LD H,A
  1013.         LDD
  1014.         LDD
  1015.         POP DE
  1016.         POP HL
  1017.         INC H
  1018.         INC D
  1019.         EX AF,AF
  1020.         DEC A
  1021.         JP NZ,ScUR1
  1022.         CALL ScorrP
  1023.         CALL BL_ONN
  1024.         POP BC
  1025.         DJNZ ScUR0
  1026.         DEC C
  1027.         JP Z,B_U2B
  1028.         LD L,E
  1029.         LD A,D
  1030.         XOR #60;!
  1031.         LD H,A
  1032.         LD B,2
  1033.         JR ScUR0
  1034.  
  1035. ScUL_   CALL B_SETN
  1036.         LD HL,SCR+#0040+2
  1037.         LD DE,SCR
  1038.         LD BC,#1602
  1039. ScUL0   PUSH BC
  1040.         CALL B_NXTN
  1041.         LD A,8
  1042. ScUL1   EX AF,AF
  1043.         PUSH HL
  1044.         PUSH DE
  1045.         LD BC,22
  1046.         LDIR
  1047.         LD L,E
  1048.         LD A,D
  1049.         XOR #60;!
  1050.         LD H,A
  1051.         LDI
  1052.         LDI
  1053.         POP DE
  1054.         POP HL
  1055.         INC H
  1056.         INC D
  1057.         EX AF,AF
  1058.         DEC A
  1059.         JP NZ,ScUL1
  1060.         CALL ScorrP
  1061.         CALL BL_ONN
  1062.         POP BC
  1063.         DJNZ ScUL0
  1064.         DEC C
  1065.         JP Z,B_U2B
  1066.         LD L,E
  1067.         LD A,D
  1068.         XOR #60;!
  1069.         LD H,A
  1070.         LD B,2
  1071.         JR ScUL0
  1072.  
  1073.  
  1074. ScL_    CALL B_SET0
  1075.         LD HL,SCR+2
  1076.         LD DE,SCR
  1077.         LD B,24
  1078. ScL00   PUSH BC
  1079.         CALL B_NXT0
  1080.         LD A,8
  1081. ScL0    EX AF,AF
  1082.         PUSH HL
  1083.         PUSH DE
  1084.         LDI;
  1085.         LDI
  1086.         LDI
  1087.         LDI
  1088.         LDI
  1089.         LDI
  1090.         LDI
  1091.         LDI
  1092.         LDI;
  1093.         LDI
  1094.         LDI
  1095.         LDI
  1096.         LDI
  1097.         LDI
  1098.         LDI
  1099.         LDI
  1100.         LDI;
  1101.         LDI
  1102.         LDI
  1103.         LDI
  1104.         LDI
  1105.         LDI
  1106.         LD L,E
  1107.         LD A,D
  1108.         XOR #60;!
  1109.         LD H,A
  1110.         LDI
  1111.         LDI
  1112.         POP DE
  1113.         POP HL
  1114.         INC H
  1115.         INC D
  1116.         EX AF,AF
  1117.         DEC A
  1118.         JR NZ,ScL0
  1119.         CALL ScorrP
  1120.         CALL BL_ONN
  1121.         POP BC
  1122.         DJNZ ScL00
  1123.         JP B_U2B
  1124.  
  1125. ScR_    CALL B_SET0
  1126.         LD HL,SCR+21
  1127.         LD DE,SCR+23
  1128.         LD B,24
  1129. ScR00   PUSH BC
  1130.         CALL B_NXT0
  1131.         LD A,8
  1132. ScR0    EX AF,AF
  1133.         PUSH HL
  1134.         PUSH DE
  1135.         LDD;
  1136.         LDD
  1137.         LDD
  1138.         LDD
  1139.         LDD
  1140.         LDD
  1141.         LDD
  1142.         LDD
  1143.         LDD;
  1144.         LDD
  1145.         LDD
  1146.         LDD
  1147.         LDD
  1148.         LDD
  1149.         LDD
  1150.         LDD
  1151.         LDD;
  1152.         LDD
  1153.         LDD
  1154.         LDD
  1155.         LDD
  1156.         LDD
  1157.         LD L,E
  1158.         LD A,D
  1159.         XOR #60;!
  1160.         LD H,A
  1161.         LDD
  1162.         LDD
  1163.         POP DE
  1164.         POP HL
  1165.         INC H
  1166.         INC D
  1167.         EX AF,AF
  1168.         DEC A
  1169.         JR NZ,ScR0
  1170.         CALL ScorrP
  1171.         CALL BL_ONN
  1172.         POP BC
  1173.         DJNZ ScR00
  1174.         JP B_U2B
  1175.  
  1176.        endif ;~EGA
  1177.  
  1178. ROTsub  DEFW ScLF,ScRT,000,ScUP,SdUL,SdUR,000,ScDW,SdDL,SdDR
  1179.  
  1180. ROTATE  LD A,(BENTER)
  1181.         OR A
  1182.         JR Z,rotCOR
  1183. ROt1    LD A,(CONTRB)
  1184.         AND %1111
  1185.         JR ROt2
  1186. rotCOR  LD C,0
  1187.         LD HL,(MX)
  1188.         LD A,L
  1189.         OR A
  1190.         JR NZ,rC1
  1191.         SET 1,C
  1192. rC1     CP 248
  1193.         JR C,rC2
  1194.         SET 0,C
  1195. rC2     LD A,H
  1196.         OR A
  1197.         JR NZ,rC3
  1198.         SET 3,C
  1199. rC3     CP 184
  1200.         JR C,rC5
  1201.         SET 2,C
  1202. rC5     LD A,(PMOUSE)
  1203.         OR A
  1204.         LD A,C
  1205.         JR NZ,ROt2
  1206.         LD A,(CONTRB)
  1207.         AND C
  1208. ROt2    OR A
  1209.         JR Z,noRO1
  1210.         CP %1011
  1211.         JR NC,noRO1
  1212.         LD HL,ROTsub-2
  1213.         CALL WT
  1214.         LD A,L
  1215.         OR H
  1216.         JR Z,noRO1
  1217.         PUSH HL
  1218.         LD A,(isROT)
  1219.         OR A
  1220.         JR NZ,RO_ON
  1221.         INC A
  1222.         LD (isSWFF),A
  1223.         JR RO_1
  1224. RO_ON   HALT
  1225. RO_1    CALL MEM1
  1226.         POP HL
  1227.         JP (HL)
  1228. noRO1   LD A,(isROT)
  1229.         OR A
  1230.         RET Z
  1231. noROT   CALL MEM7
  1232.         CALL B_OFF
  1233.        if EGA==0
  1234.         LD A,(isSWFF)
  1235.         OR A
  1236.         JR NZ,noRO2
  1237.         CALL V_GET1
  1238.         CALL V_GET2 ;get gfx under cursor before draw ;на рисуемом экране
  1239.        ;if EGA
  1240.         ;CALL V_MRK2 ;на рисуемом экране
  1241.         ;;CALL BLITER ;иначе показывает другой экран
  1242.        ;endif
  1243. noRO2
  1244.        endif
  1245.         XOR A
  1246.         LD (V_FLAG),A ;cursor on
  1247.         LD (isROT),A
  1248.         RET
  1249.  
  1250. SW_OFF
  1251. ;before scroll
  1252.         LD A,(isSWFF)
  1253.         OR A
  1254.         RET Z
  1255.         XOR A
  1256.         LD (isSWFF),A
  1257.         LD A,2
  1258.         LD (V_FLAG),A ;cursor off
  1259.        
  1260.         CALL MEM7
  1261.        ;if EGA==0
  1262.         CALL V_PUT1
  1263.        ;endif
  1264.         CALL V_PUT2 ;restore gfx under cursor ;на рисуемом экране
  1265.  
  1266.        if EGA ;копируем экран
  1267.        call copyscreen
  1268.        endif
  1269.        
  1270.         JP MEM1
  1271.  
  1272. FRAME   ;выв игр оформл
  1273.        if EGA
  1274.        ret
  1275.        else
  1276.        ;jr $
  1277.         CALL MEM7
  1278.         CALL STS ;выбор основного экрана (не теневого)
  1279.         ;bar-color
  1280.         ATRs #18,#208,#50
  1281.         ATRs #19,#106,#70
  1282.         ATRs #218,#208,#50
  1283.         ATRs #219,#104,#60
  1284.         LD L,#70
  1285.         LD H,L
  1286.         LD (ATR+93),HL
  1287.         ATRs #418,#508,#38
  1288.         ATRs #41D,#401,#58
  1289.         ATRs #41E,#401,#68
  1290.         ;меню-батт
  1291.         ATRs #1418,#408,#68
  1292.         ;land-color
  1293.         LD A,(COLOR)
  1294.         AND %00111000
  1295.         CP #28
  1296.         LD A,#68
  1297.         JR NZ,FRA_Ls
  1298.         LD A,#58
  1299. FRA_Ls  LD (COLRsc),A
  1300. FRA_L   LD A,(isCOLR)
  1301.         OR A
  1302.         JR Z,FRA2
  1303.         LD A,(MASTER)
  1304.         OR A
  1305.         LD A,#30
  1306.         JR Z,FRA1
  1307.         LD A,#28
  1308. FRA1    LD (MCOLOR),A
  1309.         LD A,(COLOR)
  1310.         JR FRA_L1
  1311. FRA2    LD A,#38
  1312.         LD (MCOLOR),A
  1313.         LD A,#30
  1314. FRA_L1  PUSH AF
  1315.         LD E,A
  1316.         LD HL,0
  1317.         LD BC,#118
  1318.         CALL STS ;выбор основного экрана (не теневого)
  1319.         CALL ATRBAR
  1320.         LD HL,#017
  1321.         LD BC,#1801
  1322.         CALL ATRBAR
  1323.         POP AF
  1324.         OR #40
  1325.         LD E,A
  1326.         LD HL,#100
  1327.         LD BC,#1717
  1328.         CALL ATRBAR
  1329.         LD A,(MCOLOR)
  1330.         LD E,A
  1331.         LD HL,#918
  1332.         LD BC,#B08
  1333.         CALL ATRBAR
  1334.         LD A,#20
  1335.         LD (ATR+632),A
  1336.         LD (ATR+639),A
  1337.         RET
  1338.        endif
  1339.  
  1340. typMAP  ;определить тип карты (обычн/подземн -> LEV_T=0/1)
  1341.         LD HL,MAP
  1342.         LD A,(HL)
  1343.         OR A
  1344.         PUSH AF
  1345.         JR Z,iTM0
  1346.         ;уровень - подземелье (без зданий, если [MAP+0]==1)
  1347.         XOR A
  1348.         LD (HL),A
  1349.         INC A    ;A=1
  1350.         LD L,99 ;длина осмотра в подземельях
  1351.         LD E,2  ;макс число трассировок
  1352.         LD C,12 ;число ударов по дверям
  1353.         JR iTMm
  1354. iTM0    XOR A    ;A=0
  1355.         LD L,64  ;длина осмотра в обычн уровнях
  1356.         LD E,5
  1357.         LD C,60  ;число ударов по лесу
  1358. iTMm    LD (LEV_T),A
  1359.         LD A,L
  1360.         LD (MAXLEN),A
  1361.         LD A,E
  1362.         LD (MAXTRY),A
  1363.         LD A,C
  1364.         LD (BrWOOD),A
  1365.         POP AF
  1366.         RET
  1367.  
  1368. OUMAIN  ;выв карты/поля
  1369.         LD A,(isMAP)
  1370.         OR A
  1371.         JR Z,OU_SCR
  1372.  
  1373. OU_MAP  ;режим-карта
  1374.         LD HL,delMAP
  1375.         LD A,(HL)
  1376.         OR A
  1377.         JR Z,oum1
  1378.         DEC (HL)
  1379.         RET
  1380. oum1    LD (HL),oumDEL ;велич, задержки
  1381.         CALL MEM6
  1382.        if EGA
  1383. ;заблокировать стрелочку только на рисуемом экране, т.е. вообще не блокировать
  1384. ;выключить стрелочку
  1385. ;стереть стрелочку
  1386.         ;LD A,2
  1387.         ;LD (V_FLAG),A
  1388.         CALL V_PUT2 ;на рисуемом экране
  1389.        endif
  1390.         CALL MP_OUT ;6
  1391.        if EGA
  1392. ;прочитать стрелочку
  1393. ;включить стрелочку
  1394.         CALL V_GET_MRK2 ;на рисуемом экране
  1395.         ;xor a
  1396.         ;LD (V_FLAG),A
  1397.        endif
  1398.         CALL BLITER ;7
  1399.         LD HL,G_MAP1
  1400.         LD (G_IMG),HL
  1401.         RET
  1402.  
  1403. OU_SCR  ;режим-экран
  1404.          LD BC,#FDFE ;'F'-fast
  1405.          IN A,(C)
  1406.          AND %1000
  1407.          JR NZ,OU_S1
  1408.          LD HL,fram
  1409.          INC (HL)
  1410.          LD A,(HL)
  1411.          CP ouFAST
  1412.          RET C
  1413.          LD (HL),0
  1414. OU_S1
  1415.         CALL O12X12
  1416.         LD A,(begBOX)
  1417.         OR A
  1418.         RET NZ
  1419. OU_RT   CALL ROTATE
  1420.         LD A,(isROT)
  1421.         OR A
  1422.         JR NZ,OU_RT
  1423.         RET Z
  1424.  
  1425. O12X12
  1426.        if EGA
  1427. ;заблокировать стрелочку только на рисуемом экране, т.е. вообще не блокировать
  1428. ;выключить стрелочку
  1429. ;стереть стрелочку
  1430.         ;ld a,(curscrnum)
  1431.         ;push af
  1432.          ;LD A,2
  1433.          ;LD (V_FLAG),A ;не помогает
  1434.         CALL V_PUT2 ;на рисуемом экране
  1435.        endif
  1436.        if EGA==0
  1437.         CALL MEM7
  1438.         CALL M_PLAT ;7 ;показать площадку под стр-во
  1439.        endif
  1440.         CALL MEM1
  1441.         CALL P12X12 ;1
  1442.         CALL S12X12 ;m
  1443.         CALL N12X12 ;1
  1444.        if EGA
  1445.         CALL MEM7
  1446.         CALL M_PLAT ;7 ;показать площадку под стр-во
  1447.        endif
  1448.         CALL MEM4
  1449.         CALL outBOX ;4
  1450.         CALL MEM0
  1451.         CALL flpSEL ;0 ;flip пометки селект
  1452.         CALL HiENER ;0[**] ;супер энергия
  1453.        if EGA
  1454. ;прочитать стрелочку
  1455. ;включить стрелочку
  1456.         CALL V_GET_MRK2 ;на рисуемом экране
  1457.          ;xor a
  1458.          ;LD (V_FLAG),A
  1459.         ;ld a,(curscrnum)
  1460.         ;pop bc
  1461.         ;cp b
  1462.         ;jr nz,$ ;не бывает
  1463.        endif
  1464.         CALL BLITER ;7
  1465.         LD HL,G_IMG1
  1466.         LD (G_IMG),HL
  1467.        if EGA
  1468.        call SLOWER ;TODO не 5 фреймов, а 3?
  1469.        jp MEM7
  1470.        else
  1471.         RET
  1472.        endif
  1473.  
  1474.  
  1475. MAPon   XOR A
  1476.         LD (delMAP),A
  1477.         CALL MP_OFF ;очистка
  1478.         CALL BLITER
  1479.        if EGA==0
  1480.         LD A,(COLOR)
  1481.         XOR %01011001
  1482.         CALL FRA_L1
  1483.        else
  1484.        call MAPoffclbuttons ;иначе затираются кнопки
  1485.         ;call OUTBAR
  1486.        endif
  1487.         CALL OU_MAP
  1488.         CALL MAPwin
  1489.         LD (isMAP),A
  1490.         RET
  1491.  
  1492. MAPoff  XOR A
  1493.         LD (isMAP),A
  1494.         CALL O12X12
  1495.        if EGA
  1496. MAPoffclbuttons
  1497. ;иначе затираются кнопки
  1498.         LD HL,_BUT_H
  1499.         LD B,7
  1500. MAPoncBU1i LD (HL),#FF
  1501.         INC HL
  1502.         DJNZ MAPoncBU1i
  1503.        ret
  1504.        else
  1505.         JP FRA_L
  1506.        endif
  1507.  
  1508. MAPwin  ;выв окна видимости
  1509.         CALL STS
  1510.         LD DE,(X0)
  1511.         LD A,E
  1512.         ADD A,E
  1513.         ADD A,E
  1514.         RRCA
  1515.         RRCA
  1516.         RRCA
  1517.         AND %11111
  1518.         LD L,A
  1519.         LD A,D
  1520.         ADD A,D
  1521.         ADD A,D
  1522.         RRCA
  1523.         RRCA
  1524.         RRCA
  1525.         AND %11111
  1526.         LD H,A
  1527.         CALL ACOORD
  1528.         LD DE,27
  1529.         LD C,5
  1530. mwi0    LD B,5
  1531. mwi1    LD A,(HL)
  1532.         XOR %00011001
  1533.         LD (HL),A
  1534.         INC L
  1535.         DJNZ mwi1
  1536.         ADD HL,DE
  1537.         DEC C
  1538.         JR NZ,mwi0
  1539.         RET
  1540.  
  1541. movWIN  ;перемещ окна в карте по enter (BC-центр окна)
  1542.         LD A,C
  1543.         CALL iW
  1544.         LD L,A
  1545.         LD A,B
  1546.         CALL iW
  1547.         LD H,A
  1548.         LD (X0),HL
  1549.         RET
  1550. iW      SUB 5
  1551.         JR NC,iW1
  1552.         XOR A
  1553. iW1     CP 52
  1554.         RET C
  1555.         LD A,51
  1556.         RET
  1557.  
  1558.        if EGA==0
  1559. MP_OFF  CALL MP_OF1 ;очистка map в DSCR
  1560.         LD (DSCR),HL
  1561.         RET
  1562. MP_OF1  LD HL,#FFFF
  1563.         LD (SET_SP+1),SP
  1564.         LD SP,DSCR+#1800-6
  1565.         LD B,236
  1566. mp09    DEFS 13,#E5;PUSH HL
  1567.         DJNZ mp09
  1568.         JP SET_SP
  1569.        endif
  1570.  
  1571. MANUAL  ;обработка управляющ воздейств
  1572.         CALL BMOV
  1573.         ;H-вкл паузу
  1574.         LD BC,#BFFE
  1575.         IN A,(C)
  1576.         AND %10000
  1577.         JR NZ,maz0
  1578.         LD (onPAUS),A
  1579.         CPL
  1580.         JR mau0ht
  1581. maz0    ;Z-вкл/выкл карту
  1582.         LD A,(BENTER)
  1583.         OR A
  1584.         JR NZ,mau4
  1585.         LD B,#FE
  1586.         IN A,(C)
  1587.         AND %111
  1588.         CP %101
  1589.         LD A,(Z_LOCK)
  1590.         JR NZ,mau2
  1591.         OR A
  1592.         JR NZ,mau1
  1593.         if EGA
  1594.        ld e,0
  1595.        OS_SETSCREEN
  1596.        ld e,0
  1597.        OS_CLS
  1598.        ld e,1
  1599.        OS_SETSCREEN
  1600.        ld e,0
  1601.        OS_CLS
  1602.         call putBAR
  1603.         endif
  1604. mau0    LD A,(isMAP)
  1605. mau0ht  OR A
  1606.         PUSH AF
  1607.         CALL Z,MAPon
  1608.         POP AF
  1609.         CALL NZ,MAPoff
  1610.         LD A,1
  1611.         JR mau1
  1612. mau2    XOR A
  1613. mau1    LD (Z_LOCK),A
  1614. mau4    ;нажатый FIRE (0-none,1-space,2-caps)
  1615.         LD A,(CONTRB)
  1616.         BIT 4,A
  1617.         JR NZ,maf1
  1618.         AND %100000
  1619.         JR NZ,maf2
  1620.         LD BC,#FEFE
  1621.         IN A,(C)
  1622.         AND %1111
  1623.         CP %1110
  1624.         JR Z,maf2
  1625.         XOR A
  1626.         JR maf0
  1627. maf1    LD A,1
  1628.         JR maf0
  1629. maf2    LD A,(BX)
  1630.         CP 24
  1631.         JR C,maf2_
  1632.         LD A,(begBOX)
  1633.         OR A
  1634.         JR Z,maf1;CAP->SPACE
  1635. maf2_   LD A,2
  1636. maf0    LD (T_FIRE),A ;(0-none,1-space,2-caps)
  1637.         CP 1
  1638.         RET Z
  1639.         XOR A
  1640.         LD (fixTAR),A ;расфиксировать цель
  1641.         RET
  1642.  
  1643.  
  1644. SEEonn  ;подключить onsee/onsee2
  1645.         LD A,#C3 ;код jp
  1646.         JR SEExx
  1647. SEEoff  ;отключть их
  1648.         LD A,#C9 ;код ret
  1649. SEExx   LD (ONSEE),A
  1650.         LD (ONSEE2),A
  1651.         RET
  1652.  
  1653. ;-----------для работы с меню
  1654. gmMENU  CALL MEM7
  1655.         XOR A
  1656.         LD (isMAP),A
  1657.         CALL M_MENU
  1658.         CALL aSETUP
  1659.         JP MEM0
  1660.  
  1661. MU_BOX  ;бох меню DE-coord,bc-размер
  1662.         PUSH HL
  1663.         DEC B
  1664.         DEC B
  1665.         LD H,B
  1666.         DEC C
  1667.         DEC C
  1668.         LD L,E
  1669.         LD A,99
  1670.         CALL PRINT
  1671. meb1    LD A,100
  1672.         CALL PRINT
  1673.         DJNZ meb1
  1674.         LD A,101
  1675.         CALL PRINT
  1676. meb2    LD B,H
  1677.         LD E,L
  1678.         INC D
  1679.         LD A,103
  1680.         CALL PRINT
  1681. meb4    LD A,10
  1682.         CALL PRINT
  1683.         DJNZ meb4
  1684.         LD A,104
  1685.         CALL PRINT
  1686.         DEC C
  1687.         JR NZ,meb2
  1688.         LD B,H
  1689.         LD E,L
  1690.         INC D
  1691.         LD A,105
  1692.         CALL PRINT
  1693. meb5    LD A,106
  1694.         CALL PRINT
  1695.         DJNZ meb5
  1696.         LD A,107
  1697.         CALL PRINT
  1698.         POP HL
  1699.         RET
  1700.  
  1701. _oSani  ;анимация для Setup (A->DE)
  1702. _oSA1   EX AF,AF
  1703.         CALL MEM1
  1704.         EX AF,AF
  1705.         CALL GSADR+1
  1706.       if EGA==0 ;TODO
  1707.         CALL SQROUT
  1708.       endif
  1709.         JP MEM7
  1710.  
  1711. _shdw   ;уст темноты
  1712.         CALL shadwS_3
  1713.         JP MEM7
  1714.  
  1715. aSETUP  ;исполнение установок
  1716.         CALL TMOM   ;7
  1717.         CALL shadwS ;--1
  1718.         CALL ANIset ;1
  1719.         LD A,(MUSONF)
  1720.         OR A
  1721.         JR NZ,aSS1
  1722.         CALL MEM6   ;--6
  1723.         CALL WMUSIC ;6
  1724.         CALL MEM0
  1725. aSS1    JP MAPoff
  1726.  
  1727. UP_TIM   ;повыш уровня врага (через TIME=0:40-N)
  1728.          LD HL,kARC
  1729.          LD B,4
  1730. upTT0    LD A,(HL)
  1731.          CP 2
  1732.          JR NC,upTT1
  1733.          INC (HL)
  1734. upTT1    INC HL
  1735.          DJNZ upTT0
  1736.          ;
  1737. UP_DIF   ;повыш сложность (DIFFIC=1)
  1738.          LD HL,levMAX ;+1
  1739.          INC (HL)
  1740.          LD HL,lev1ST ;3/4
  1741.          CALL uppd34
  1742.          LD HL,levDEL ;3/4
  1743. uppd34   SRL (HL)
  1744.          LD A,(HL)
  1745.          SRL (HL)
  1746.          ADD A,(HL)
  1747.          LD (HL),A
  1748.          RET
  1749.  
  1750. PAUSE   ;пауза с выводом задания по "H"
  1751.         LD HL,onPAUS
  1752.         LD A,(HL)
  1753.         OR A
  1754.         RET NZ
  1755.         INC (HL)
  1756.        if EGA
  1757. ;выключить стрелочку
  1758. ;стереть стрелочку
  1759.         LD A,2
  1760.         LD (V_FLAG),A
  1761.         CALL V_PUT1 ;на видимом экране
  1762.        endif
  1763.         LD DE,#301
  1764.         LD BC,#1612
  1765.         CALL MU_BOX
  1766.         ;параметры
  1767.         LD DE,#503
  1768.         PUSH DE  ;N ур
  1769.         LD HL,TU_1
  1770.         CALL tuPR
  1771.         LD A,(MASTER)
  1772.         OR A
  1773.         LD HL,TU_7
  1774.         JR Z,tu2
  1775.         LD HL,TU_8
  1776. tu2     CALL PRINTS
  1777.         LD A,(LEVEL)
  1778.         CP 10
  1779.         JR C,tu3
  1780.         SUB 10
  1781.         PUSH AF
  1782.         LD A,1
  1783.         CALL PRINT
  1784.         POP AF
  1785. tu3     CALL PRINT
  1786.         POP DE
  1787.         INC D
  1788.         INC D
  1789.         PUSH DE  ;сложн
  1790.         LD HL,TU_2
  1791.         CALL tuPR
  1792.         LD A,(DIFFIC)
  1793.         OR A
  1794.         LD HL,TU_5
  1795.         JR Z,tu1
  1796.         LD HL,TU_6
  1797. tu1     CALL PRINTS
  1798.         POP DE
  1799.         INC D
  1800.         INC D
  1801.         CALL TUtime
  1802.         INC D
  1803.         INC D
  1804.         INC D
  1805.         PUSH DE
  1806.         LD E,8
  1807.         LD HL,TU_9
  1808.         CALL PRINTS
  1809.         POP DE
  1810.         INC D
  1811.         INC D
  1812.         DEC E
  1813.         ;задание
  1814.         LD B,3
  1815.         LD HL,TASK_M
  1816. aus1    PUSH DE
  1817.         PUSH BC
  1818.         CALL PRINTS
  1819.         POP BC
  1820.         POP DE
  1821.         INC HL
  1822.         INC D
  1823.         DJNZ aus1
  1824.        if EGA
  1825. ;прочитать стрелочку
  1826. ;включить стрелочку
  1827.         CALL V_GET1
  1828.        call V_MRK1 ;на видимом экране
  1829.         xor a
  1830.         LD (V_FLAG),A
  1831.        else
  1832.         CALL BLITER ;иначе показывает другой экран
  1833.        endif
  1834.         CALL bWAIT
  1835.         JP TMOM
  1836.  
  1837. TUarr   DEFB 10,109,10,127 ;_>_
  1838. TU_1    DEFB 31,64,62,50,53,61,74,127 ;Уровень
  1839. TU_2    DEFB 29,59,62,54,61,62,65,66,74,127 ;Cложность
  1840. TU_3    DEFB 14,64,53,60,79,127 ;Время
  1841. TU_4    DEFB 26,49,73,53,53,127 ;Общее
  1842. TU_5    DEFB 81,26,82,24,127; NORM
  1843. TU_6    DEFB 25,84,110,25,127; HiGH
  1844. TU_7    DEFB 23,78,52,56,91,127;Люди-
  1845. TU_8    DEFB 22,67,61,51,56,91,127;Кунги-
  1846. TU_9    DEFB 19,48,52,48,61,56,53,43,127;Задание:
  1847.  
  1848. TUtime  ;выв.времени ур-ня/игры
  1849.         PUSH DE ;вр ур
  1850.         LD HL,TU_3
  1851.         CALL tuPR
  1852.         LD HL,LEVRES
  1853.         CALL PRINTS
  1854.         POP DE
  1855.         INC D
  1856.         INC D
  1857.         PUSH DE ;общ вр
  1858.         LD HL,TU_4
  1859.         CALL tuPR
  1860.         LD HL,RESULT
  1861.         CALL PRINTS
  1862.         POP DE
  1863.         RET
  1864.  
  1865. tuPR    CALL PRINTS
  1866.         LD HL,TUarr
  1867.         JP PRINTS
  1868.  
  1869. Evic1   DEFB 27,26,13,17,16,12,47, 127 ;ПОБЕДА!
  1870. Evic2   DEFB 19,48,52,48,61,56,53, 10, 50,75,63,62,59,61,53,61,62,47, 127
  1871. Emis1   DEFB 14,75,10,63,62,66,53,64,63,53,59,56, 127
  1872. Emis2   DEFB 63,62,64,48,54,53,61,56,53,47, 127
  1873. Emis3   DEFB 27,62,63,75,66,48,57,66,53,65,74, 10, 53,73,80, 127 ;try again
  1874. Ey_n    DEFB 87,86,90,81,88,44, 127
  1875.  
  1876. bHmine  EQU  255 ;здоровье шахты
  1877. bHEALT  ;здоровье зданий
  1878.         DEFB 200,160,132,130,150,140,160,250,80
  1879.         DEFB 0
  1880.         DEFB 200,160,132,130,150,140,160,250,80
  1881. OFFSEE  ;выкл видим
  1882.         LD HL,MAP+65
  1883.         LD C,62
  1884. fE1     LD B,62
  1885. fE0     SET 7,(HL)
  1886.         INC HL
  1887.         DJNZ fE0
  1888.         INC HL
  1889.         INC HL
  1890.         DEC C
  1891.         JR NZ,fE1
  1892.         RET
  1893.  
  1894.  
  1895. ANIMTR  LD HL,ANIM
  1896.         INC (HL)
  1897.         LD A,(HL)
  1898.         CP 4
  1899.         RET C
  1900.         XOR A
  1901.         LD (HL),A
  1902.         RET
  1903.  
  1904. go_Max  EQU 52 ;номер макс прох поля
  1905.  
  1906. setMAP  LD HL,MAP2 ;заполнение мап2
  1907.         LD DE,MAP
  1908.         LD C,64
  1909. tE1     LD B,64
  1910. tE0     LD A,(DE)
  1911.         OR A
  1912.         JR Z,tE2
  1913.         CP go_Max
  1914.         LD A,0
  1915.         JR C,tE3
  1916.         INC A
  1917. tE2     INC A
  1918. tE3     LD (HL),A
  1919.         INC DE
  1920.         INC HL
  1921.         DJNZ tE0
  1922.         DEC C
  1923.         JR NZ,tE1
  1924.         RET
  1925.  
  1926.  
  1927.  
  1928. ;------часто используемые п/п------
  1929. IX0_HL  LD (IX),L
  1930.         LD (IX+1),H
  1931.         RET
  1932.  
  1933. HL_IX0  LD L,(IX)
  1934.         LD H,(IX+1)
  1935.         RET
  1936.  
  1937. IXt_HL  LD (IX+10),L
  1938.         LD (IX+11),H
  1939.         RET
  1940.  
  1941. HL_IXt  LD L,(IX+10)
  1942.         LD H,(IX+11)
  1943.         RET
  1944.  
  1945. IX_98   XOR A ;стой
  1946.         LD (IX+9),A
  1947.         LD (IX+8),A
  1948.         RET
  1949.  
  1950. IX_92   LD (IX+9),2
  1951.         JR IX_93a
  1952. IX_93   LD (IX+9),3 ;иди
  1953. IX_93a  LD (IX+8),#80
  1954.         RET
  1955.  
  1956. IMPIX3  LD A,%11000000
  1957.         LD (IX+3),A
  1958.         JP HERMOV
  1959.  
  1960. loop_K  LD B,48
  1961. loopKb  LD IX,KUNGE
  1962.         LD DE,16
  1963.         RET
  1964.  
  1965. loop_H  LD B,48
  1966. loopHb  LD IX,HUMAN
  1967.         LD DE,16
  1968.         RET
  1969.  
  1970. DIST2   ;расст по ф-ле: max(|L-ix0|,|H-ix1|) Вх.XY-HL;Вых.A
  1971.         LD A,L
  1972.         SUB (IX+0)
  1973.         JR NC,d2t1
  1974.         NEG
  1975. d2t1    LD B,A
  1976.         LD A,H
  1977.         SUB (IX+1)
  1978.         JR NC,d2t2
  1979.         NEG
  1980. d2t2    CP B
  1981.         RET NC
  1982.         LD A,B
  1983.         RET
  1984.  
  1985.  
  1986. ;------------
  1987.  
  1988. isEND   LD A,(TheEND)
  1989.         OR A
  1990.         JP NZ,MU_EN_
  1991.         ;
  1992.         LD A,(LEV_T)
  1993.         OR A
  1994.         CALL NZ,isEND2
  1995.         LD A,(TIC)
  1996.         AND %11111
  1997.         CP 5
  1998.         RET NZ
  1999.         CALL isEND1
  2000.         LD (END_1),A
  2001.         RET
  2002.  
  2003. MU_EN_ ;[--14]
  2004.        if 1==0
  2005.         PUSH AF
  2006.         LD HL,WX_LEN+82
  2007.         LD A,(WX_BAD+14)
  2008.         CP (HL)
  2009.         JR NZ,isEND1 ;err
  2010.         POP AF
  2011.        endif
  2012.         JP MU_END
  2013.  
  2014. isEND1  ;проверка окончания боя (Z/NZ-ok/конец (A=1/2-победа наших/врагов)
  2015.         LD HL,KUNGE
  2016.         LD B,48+6
  2017.         LD DE,16
  2018. iee0    LD A,(HL)
  2019.         OR A
  2020.         JR NZ,iee2
  2021.         ADD HL,DE
  2022.         DJNZ iee0
  2023.         LD HL,KBUILD
  2024.         LD E,8
  2025.         LD B,#20
  2026. iee1    LD A,(HL)
  2027.         OR A
  2028.         JR NZ,iee2
  2029.         ADD HL,DE
  2030.         DJNZ iee1
  2031.         XOR A
  2032.         INC A
  2033.         RET NZ;1
  2034. iee2    LD HL,HUMAN
  2035.         LD E,16
  2036.         LD B,48
  2037. iee20   LD A,(HL)
  2038.         OR A
  2039.         JR NZ,iee3
  2040.         ADD HL,DE
  2041.         DJNZ iee20
  2042.         LD HL,HBUILD
  2043.         LD E,8
  2044.         LD B,#20
  2045. iee21   LD A,(HL)
  2046.         OR A
  2047.         JR NZ,iee3
  2048.         ADD HL,DE
  2049.         DJNZ iee21
  2050.         XOR A
  2051.         INC A
  2052.         INC A
  2053.         RET NZ;2
  2054. iee3    XOR A
  2055.         RET Z;0
  2056.  
  2057. isEND2  CALL loop_H ;князь в туннеле
  2058. ien0    LD A,(IX+4)
  2059.         CP 22
  2060.         JR C,ien1
  2061.         CP 24
  2062.         JR NC,ien1
  2063.         CALL HL_IX0
  2064.         LD A,L
  2065.         OR A
  2066.         JR Z,ien1
  2067.         CALL GMAP
  2068.         LD A,(HL)
  2069.         AND #7F
  2070.         CP 5
  2071.         JR NZ,ien1
  2072.         LD A,1
  2073.         LD (END_2),A
  2074. ien1    ADD IX,DE
  2075.         DJNZ ien0
  2076.         RET
  2077.  
  2078.  
  2079. ;****** главн цикл *****
  2080.  
  2081. CONTgm
  2082. ;загрузка отл игры
  2083.        if 1==0
  2084.        CALL INI_D2
  2085.        endif
  2086.         CALL LOD1st
  2087.         SCF
  2088.         CALL LOADms ;C=1
  2089.         CALL shadwS ;--1
  2090.         CALL MEM6   ;--6
  2091.         CALL WMUSIC ;6
  2092.         EI
  2093.         JP ENTRY
  2094.  
  2095. LODrtr  ;рестарт уровня
  2096.         LD HL,LEVEL
  2097.         DEC (HL)
  2098.         LD HL,hCLRI_ ;восст осн врем/закл
  2099.         LD DE,hCLRIC
  2100.         LD BC,12
  2101.         LDIR
  2102. LODnxt  ;нов.уровень
  2103.         LD A,2
  2104.         LD (V_FLAG),A
  2105.        if 1==0
  2106.         CALL CHNGd2
  2107.        endif
  2108.         CALL MEM6
  2109.         CALL WMUSIC
  2110.         DI
  2111.         JR LODn1
  2112.  
  2113. LODnew  ;новая игра
  2114.        if 1==0
  2115.         CALL INI_D2
  2116.        endif
  2117.         CALL LOD1st     ;6 i/o
  2118.         ;загрузка и иниц. данных ур-ня
  2119. LODn1   CALL LODlev
  2120.         LD HL,hCLRIC ;копия осн врем/закл
  2121.         LD DE,hCLRI_
  2122.         LD BC,12
  2123.         LDIR
  2124.         XOR A
  2125.         ;jr $
  2126.         CALL LOADms     ;i/o;C=0
  2127. _start  CALL shadwS     ;--1
  2128.         CALL ANIset     ;1
  2129.         CALL MEM0       ;--0
  2130.         CALL typMAP     ;0
  2131.         CALL Z,iniBLT   ;0
  2132.         CALL setBLT     ;0
  2133.     CALL OFFSEE     ;0
  2134.         CALL vieBLT     ;0
  2135.         CALL MEM1       ;--1
  2136.         CALL NEWALL     ;1
  2137.         CALL NEWenm     ;1
  2138.         CALL MEM0       ;--0
  2139.         CALL pntINI     ;0
  2140.         CALL pcINI      ;0lev
  2141.         CALL MEM6       ;--6
  2142.         CALL XY1st      ;6
  2143.         CALL peonN      ;6 \
  2144.         LD (peon_W),HL  ;  /
  2145.         CALL WMUSIC     ;6
  2146.         CALL bWAIT      ;0
  2147.         XOR A
  2148.         LD (TIC_UP),A
  2149.         ;
  2150. ENTRY   ;общая точка входа для нов. игры и отгрузки
  2151.        if EGA
  2152.        ld e,0
  2153.        OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  2154.        ld e,0
  2155.         OS_SETSCREEN
  2156.        ld e,0
  2157.        OS_CLS
  2158.        ld e,1
  2159.         OS_SETSCREEN
  2160.        ld e,0
  2161.        OS_CLS ;там была 6912 картинка
  2162.        call setpal
  2163.        endif
  2164.        
  2165.         XOR A
  2166.         LD (isMAP),A
  2167.         CALL putBAR ;--7
  2168.         CALL MEM0   ;--0
  2169.         CALL cBUini ;0
  2170.         CALL FRAME  ;--7
  2171.         CALL EVENTr ;*
  2172.         CALL OUMAIN ;7
  2173. NNN     ;игровой цикл
  2174.         CALL MANUAL ;7
  2175.         CALL MEM6    ;---6
  2176.         CALL TIMER  ;6
  2177.         CALL SLOWER ;6
  2178.          CALL MEM6    ;---6
  2179.         CALL RNDcrr ;6
  2180.         CALL cTIC   ;6
  2181.         CALL dMAGIC ;6
  2182.         CALL SPLIN  ;6
  2183.         CALL REpeon ;6
  2184.         LD SP,STACK;#403E ;???
  2185.         CALL MEM1   ;---1
  2186.         CALL REMONT ;1
  2187.         CALL MEM0   ;---0
  2188.         CALL isRUN  ;0
  2189.         CALL ANIMTR ;0
  2190.         CALL selTAR ;0
  2191.         CALL ACTION ;0
  2192.         CALL SHED_H ;0
  2193.         CALL SEEoff ;0
  2194.         CALL SHED_K ;0
  2195.         CALL SHED_p ;0
  2196.         CALL BULLER ;0
  2197.         CALL hSCAN  ;0
  2198.         CALL kSCAN  ;0
  2199.         CALL SEEonn ;0
  2200.         CALL MINER  ;0
  2201.         CALL HOMER  ;0
  2202.         CALL pntACT ;0
  2203.         CALL COMPUT ;0
  2204.         CALL pcLOOP ;0lev
  2205.         CALL MEM7   ;--7
  2206. ;            LD BC,#FBFE ;чит - след уровень
  2207. ;            IN A,(C)
  2208. ;            AND %10000
  2209. ;            JR NZ,noHACK
  2210. ;            LD A,1
  2211. ;            LD (TheEND),A
  2212. noHACK         ;
  2213.         CALL isEND  ;7
  2214.        if 1==0 ;???
  2215.         CALL _TST#6 ;7[**]
  2216.        endif
  2217.         CALL OUTBAR ;7
  2218.         CALL OUMAIN ;7
  2219.         CALL PAUSE  ;7
  2220.         CALL NNN ;!*
  2221.  
  2222. SYLF    CALL vrYLF
  2223.         CALL vXPUT
  2224.         JR SxS
  2225. SYRT    CALL vrYRT
  2226.         CALL vXPUT
  2227.         JR SxS
  2228. SXHI    CALL vrXUP
  2229.         CALL vXPUT
  2230.         JR SxS
  2231. SXLO    CALL vrXDW
  2232.         CALL vXPUT
  2233.         JR SxS
  2234. S12X12  CALL XY0pos
  2235.         CALL vSORT
  2236.         CALL vXPUT
  2237. SxS     CALL vBULL
  2238.         CALL vFLAME
  2239.         JP MEM1
  2240.  
  2241. ;wMAIN   ;ОТЛАД
  2242. ;  CALL MEM0     ;0 отлад
  2243. ;  CALL SEEonn   ;0 отлад
  2244. ;  CALL setC1    ;0 отлад
  2245. ;  CALL setMAP   ;0 отлад
  2246.  JP _start ;отладочн т.входа ;???
  2247.         ;---demo
  2248. wMAIN  ;в этом порядке
  2249.         DI
  2250. ;;;;;;;;*F W_CRC
  2251.         CALL MEM6
  2252.         LD A,(#EEC9) ;портится прерываниями ;патч к музыке
  2253.         PUSH AF
  2254.         LD A,(#F221) ;портится прерываниями ;патч к музыке
  2255.         PUSH AF
  2256.         CALL DEMO
  2257.         DI
  2258.         CALL MEM6
  2259.         POP AF
  2260.         LD (#F221),A ;восст
  2261.         POP AF
  2262.         LD (#EEC9),A ;восст
  2263.         ;---start menu
  2264.         CALL LDI123;!!>>
  2265.  
  2266. bWAIT   CALL CONTR
  2267.         LD A,(CONTRB)
  2268.         AND %10000
  2269.         JR Z,bWAIT
  2270.         RET NZ
  2271.        if EGA
  2272.        jp putBAR
  2273.        else
  2274. putBAR  ;выв панели
  2275.         CALL OFFS ;очистка экрана
  2276.         LD DE,DSCR
  2277.         LD HL,#0018
  2278.         LD BC,#1808
  2279.         JP PUTSYM
  2280.        endif
  2281.  
  2282.        if 1==0 ;???
  2283. _TST#6  LD A,(RNB) ;[**]mem7
  2284.         AND %11101111
  2285.         RET NZ
  2286.         LD DE,#C900
  2287. TST#6   XOR A
  2288.         LD HL,#4080
  2289.         LD BC,#3500
  2290.         JP tst60a
  2291.        endif
  2292.  
  2293. ONSEE1  CALL MEM0 ;newall и onsee - в разн. страницах
  2294.         CALL ONSEE
  2295.         JP MEM1
  2296.  
  2297. ;-----------------------------
  2298.  
  2299.  
  2300. ;низ +
  2301. ;трупы +
  2302. ;воины по очереди +
  2303. ;пули,взрывы,закл +
  2304. ;дым пожарищ+
  2305. ;невидим квадраты  +
  2306. ;курсор +
  2307.  
  2308.