?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. ;------ПЕРЕМЕЩЕНИЯ
  2. ;---------п/п перемещения и поиска маршрута
  3.  
  4. DIR     ;напр HL->DE
  5.         LD A,L
  6.         CP E
  7.         LD A,H
  8.         JR C,di1
  9.         JR NZ,di2
  10.         CP D
  11.         LD A,0
  12.         RET C
  13.         LD A,4
  14. ;//     RET NZ
  15. ;//     LD A,#FF
  16.         RET
  17. di1     CP D
  18.         LD A,1
  19.         RET C
  20.         LD A,3
  21.         RET NZ
  22.         DEC A
  23.         RET
  24. di2     CP D
  25.         LD A,7
  26.         RET C
  27.         LD A,5
  28.         RET NZ
  29.         INC A
  30.         RET
  31.  
  32. DIR_F   ;напр HL->DE  с учётом наклона
  33.         PUSH HL
  34.         LD A,L
  35.         SUB E
  36.         JR C,df1
  37.         JP NZ,df2
  38.         POP HL
  39.         LD A,H
  40.         CP D
  41.         LD A,0
  42.         RET C
  43.         LD A,4
  44. ;//     RET NZ
  45. ;//     LD A,#FF
  46.         RET
  47. df1     NEG
  48.         LD L,A
  49.         LD A,H
  50.         SUB D
  51.         LD H,2
  52.         JR Z,df0
  53.         JR C,df11
  54.         CP L
  55.         LD H,3
  56.         JR Z,df0
  57.         JR NC,df12
  58.         ADD A,A ;--3|2
  59.         CP L
  60.         POP HL
  61.         JR C,df14
  62.         LD A,R
  63.         RRA
  64.         LD A,3
  65.         RET C
  66.         DEC A
  67.         RET
  68. df14    LD A,R
  69.         AND %11
  70.         LD A,3
  71.         RET Z
  72.         DEC A
  73.         RET
  74. df12    SLA L  ;--3|4
  75.         CP L
  76.         POP HL
  77.         JR NC,df15
  78.         LD A,R
  79.         RRA
  80.         LD A,3
  81.         RET C
  82.         INC A
  83.         RET
  84. df15    LD A,R
  85.         AND %11
  86.         LD A,3
  87.         RET Z
  88.         INC A
  89.         RET
  90. df11    NEG
  91.         CP L
  92.         LD H,1
  93.         JR Z,df0
  94.         JR NC,df32
  95.         ADD A,A ;--1|2
  96.         CP L
  97.         POP HL
  98.         JR C,df34
  99.         LD A,R
  100.         RRA
  101.         LD A,1
  102.         RET C
  103.         INC A
  104.         RET
  105. df34    LD A,R
  106.         AND %11
  107.         LD A,1
  108.         RET Z
  109.         INC A
  110.         RET
  111. df32    SLA L  ;--1|0
  112.         CP L
  113.         POP HL
  114.         JR NC,df35
  115.         LD A,R
  116.         RRA
  117.         LD A,1
  118.         RET C
  119.         XOR A
  120.         RET
  121. df35    LD A,R
  122.         AND %11
  123.         LD A,1
  124.         RET Z
  125.         XOR A
  126.         RET
  127. df0     LD A,H
  128.         POP HL
  129.         RET
  130. df2     LD L,A
  131.         LD A,H
  132.         SUB D
  133.         LD H,6
  134.         JR Z,df0
  135.         JR C,df21
  136.         CP L
  137.         LD H,5
  138.         JR Z,df0
  139.         JR NC,df22
  140.         ADD A,A ;--5|6
  141.         CP L
  142.         POP HL
  143.         JR C,df24
  144.         LD A,R
  145.         RRA
  146.         LD A,5
  147.         RET C
  148.         INC A
  149.         RET
  150. df24    LD A,R
  151.         AND %11
  152.         LD A,5
  153.         RET Z
  154.         INC A
  155.         RET
  156. df22    SLA L  ;--5|4
  157.         CP L
  158.         POP HL
  159.         JR NC,df25
  160.         LD A,R
  161.         RRA
  162.         LD A,5
  163.         RET C
  164.         DEC A
  165.         RET
  166. df25    LD A,R
  167.         AND %11
  168.         LD A,5
  169.         RET Z
  170.         DEC A
  171.         RET
  172. df21    NEG
  173.         CP L
  174.         LD H,7
  175.         JR Z,df0
  176.         JR NC,df42
  177.         ADD A,A ;--7|6
  178.         CP L
  179.         POP HL
  180.         JR C,df44
  181.         LD A,R
  182.         RRA
  183.         LD A,7
  184.         RET C
  185.         DEC A
  186.         RET
  187. df44    LD A,R
  188.         AND %11
  189.         LD A,7
  190.         RET Z
  191.         DEC A
  192.         RET
  193. df42    SLA L  ;--7|0
  194.         CP L
  195.         POP HL
  196.         JR NC,df45
  197.         LD A,R
  198.         RRA
  199.         LD A,7
  200.         RET C
  201.         XOR A
  202.         RET
  203. df45    LD A,R
  204.         AND %11
  205.         LD A,7
  206.         RET Z
  207.         XOR A
  208.         RET
  209.  
  210. DIST    ;расст по ф-ле max(|X-Xt|,|Y-Yt|) Вх.XY-HL;Вых.A
  211.         LD A,L
  212.         SUB (IX+10)
  213.         JR NC,dt1
  214.         NEG
  215. dt1     LD B,A
  216.         LD A,H
  217.         SUB (IX+11)
  218.         JR NC,dt2
  219.         NEG
  220. dt2     CP B
  221.         RET NC
  222.         LD A,B
  223.         RET
  224.  
  225. nxtTRY  LD (IX+8),#80 ;нет времени, попытайся потом
  226.         RET
  227.  
  228. MAKE_R  ;Выбор направления обхода Вх:hl-start
  229.         LD A,(makTRY)
  230.         OR A
  231.         JR Z,nxtTRY
  232.         DEC A
  233.         LD (makTRY),A
  234.         PUSH HL
  235.         LD A,L ; вхHL-XY, выхHL-pos in map
  236.         RLCA
  237.         RLCA
  238.         SRL H
  239.         RRA
  240.         SRL H
  241.         RRA
  242.         LD E,A
  243.         LD A,H
  244.         ADD A,MAP2/256
  245.         LD D,A
  246.         LD B,8 ;нач поз окружена?
  247. MKstr   LD HL,inMAP ;выровн
  248.         LD A,B
  249.         DEC A
  250.         ADD A,A
  251.         ADD A,L
  252.         LD L,A
  253.         LD A,(HL)
  254.         INC L
  255.         LD H,(HL)
  256.         LD L,A
  257.         ADD HL,DE
  258.         LD A,(HL)
  259.         OR A  ;пров на прох
  260.         JR Z,MKst0
  261.         DJNZ MKstr
  262.         LD B,8 ;есть ли рядом движущиеся?
  263. MKany   LD HL,inMAP ;выровн
  264.         LD A,B
  265.         DEC A
  266.         ADD A,A
  267.         ADD A,L
  268.         LD L,A
  269.         LD A,(HL)
  270.         INC L
  271.         LD H,(HL)
  272.         LD L,A
  273.         ADD HL,DE
  274.         LD A,(HL)
  275.         CP #80  ;пров движ обj рядом
  276.         JR C,MKan1
  277.         CALL GO_NXe
  278.         JR NZ,MKst0
  279. MKan1   DJNZ MKany
  280.         POP HL
  281.         JP G_stop ;поз окружена - стоп
  282. MKst0   POP HL
  283.         LD A,(DE)
  284.         LD (ss_num),A
  285.         LD (ss_pos),DE
  286.         XOR A
  287.         LD (DE),A
  288.         LD (MINLEN),A
  289.         CALL DIST
  290.         LD (MINDIS),A
  291.         PUSH HL
  292.         PUSH DE
  293.         EXX
  294.         LD A,(IX+2)
  295.         LD C,A
  296.         BIT 0,A
  297.         JR NZ,Mk1
  298.         DEC C
  299.         INC A
  300. Mk1     DEC C
  301.         INC A
  302.         POP DE
  303.         POP HL
  304.         EXX
  305.         LD C,A
  306.         ;HL-коорд DE-адр C-cdir/exx-против часовой
  307.         LD A,1
  308.         EX AF,AF ;A'-текущ. длина обхода
  309. MkLOOP  ;обх в 2 стороны
  310. Mk_cw   BIT 0,C
  311.         JR Z,Mk7
  312.         DEC C
  313. Mk7     DEC C
  314.         PUSH HL
  315. CWrep   LD HL,inMAP ; (выровн)
  316.         LD A,C
  317.         AND 7
  318.         LD C,A
  319.         ADD A,A
  320.         ADD A,L
  321.         LD L,A
  322.         LD A,(HL)
  323.         INC L
  324.         LD H,(HL)
  325.         LD L,A
  326.         ADD HL,DE
  327.         LD A,(HL)
  328.         CP 1   ;пров на прох
  329.         JR C,Mk4
  330.         JP Z,CWstop
  331.          RLCA
  332.          JR NC,Mk4n
  333.          CALL Mk_her
  334.          JR C,Mk4
  335. Mk4n    INC C
  336.         JR CWrep
  337. Mk4     EX (SP),HL
  338.         LD DE,GO_Ntb
  339.         LD A,C
  340.         ADD A,A
  341.         ADD A,E
  342.         LD E,A
  343.         LD A,(DE)
  344.         ADD A,L
  345.         LD L,A
  346.         INC DE
  347.         LD A,(DE)
  348.         ADD A,H
  349.         LD H,A
  350.         POP DE
  351.         EXX
  352.         CP H
  353.         EXX
  354.         JR NZ,Mk5
  355.         EXX
  356.         LD A,L
  357.         EXX
  358.         CP L
  359.         JR NZ,Mk5
  360.          LD A,(MINLEN) ;узкий проход?
  361.          OR A
  362.          JP NZ,MK_RET
  363. Mk5     CALL DIST
  364.         LD B,A
  365.         LD A,(MINDIS)
  366.         CP B
  367.         JR C,Mk_ccw
  368.         JR Z,Mk_ccw
  369.         LD A,B
  370.         LD (MINDIS),A
  371.         EX AF,AF
  372.         LD (MINLEN),A
  373.         EX AF,AF
  374.         XOR A
  375.         LD (NROUND),A
  376. Mk_ccw  EXX
  377.         BIT 0,C
  378.         JR Z,M1k7
  379.         INC C
  380. M1k7    INC C
  381.         PUSH HL
  382. CCWrep  LD HL,inMAP ;(выровн)
  383.         LD A,C
  384.         AND 7
  385.         LD C,A
  386.         ADD A,A
  387.         ADD A,L
  388.         LD L,A
  389.         LD A,(HL)
  390.         INC L
  391.         LD H,(HL)
  392.         LD L,A
  393.         ADD HL,DE
  394.         LD A,(HL)
  395.         CP 1   ;пров на прох
  396.         JR C,M1k4
  397.         JP Z,CCWstp
  398.          RLCA
  399.          JR NC,M1k4n
  400.          CALL Mk_her
  401.          JR C,M1k4
  402. M1k4n   DEC C
  403.         JR CCWrep
  404. M1k4    EX (SP),HL
  405.         LD DE,GO_Ntb
  406.         LD A,C
  407.         ADD A,A
  408.         ADD A,E
  409.         LD E,A
  410.         LD A,(DE)
  411.         ADD A,L
  412.         LD L,A
  413.         INC DE
  414.         LD A,(DE)
  415.         ADD A,H
  416.         LD H,A
  417.         POP DE
  418.         EXX
  419.         CP H
  420.         JR NZ,M1k5
  421.         EXX
  422.         LD A,L
  423.         EXX
  424.         CP L
  425.         JR NZ,M1k5
  426.          LD A,(MINLEN) ;узкий проход?
  427.          OR A
  428.          JR NZ,MK_RET
  429. M1k5    EXX
  430.         CALL DIST
  431.         LD B,A
  432.         LD A,(MINDIS)
  433.         CP B
  434.         JR C,Mk_eol
  435.         JR Z,Mk_eol
  436.         LD A,B
  437.         LD (MINDIS),A
  438.         EX AF,AF
  439.         LD (MINLEN),A
  440.         EX AF,AF
  441.         LD A,#80
  442.         LD (NROUND),A
  443. Mk_eol  EXX
  444.         EX AF,AF
  445.         INC A
  446.         LD B,A
  447.         EX AF,AF
  448.         LD A,(MAXLEN)
  449.         CP B
  450.         JP NC,MkLOOP
  451. MK_RET  LD HL,(ss_pos)
  452.         LD A,(ss_num)
  453.         LD (HL),A
  454.         LD A,(MINLEN)
  455.         OR A
  456.         JP NZ,Mkr1
  457.          LD A,(IX+8) ;обхода нет или слишком далеко
  458.          OR A
  459.          JP NZ,G_stop
  460.          JP G_free ;если остановка при ложном обходе
  461. Mkr1    CP 127
  462.         JR C,Mkr2
  463.         LD A,127
  464. Mkr2    LD B,A
  465.          LD A,(IX+8)
  466.          OR A
  467.          JR NZ,Mkr2a
  468.          LD B,1
  469. Mkr2a    ;^если (IX+8)==0, уменьшить длину прохода до 1 (против ложного обхода)
  470.         LD A,(NROUND)
  471.         LD C,A
  472.         OR B
  473.         LD (IX+8),A
  474.         LD A,C
  475.         OR A
  476.         LD A,(IX+2)
  477.         JR NZ,Mkr3
  478.         INC A
  479.         BIT 0,A
  480.         JR Z,Mkr4
  481.         INC A
  482.         JR Mkr4
  483. Mkr3    DEC A
  484.         BIT 0,A
  485.         JR Z,Mkr4
  486.         DEC A
  487. Mkr4    AND 7
  488.         LD (IX+2),A
  489.         JP GO_MAN;!
  490.  
  491. MK_REp  POP HL
  492.         JR MK_RET
  493.  
  494. CWstop  POP HL
  495.         EXX
  496.         EX AF,AF
  497.         LD B,A
  498.         LD A,(MAXLEN)
  499.         ADD A,A
  500.         SUB B
  501.         LD (MAX_II),A
  502.         LD A,B
  503.         EX AF,AF
  504. MkLOO3  BIT 0,C
  505.         JR Z,M3k7
  506.         INC C
  507. M3k7    INC C
  508.         PUSH HL
  509. CCWre1  LD HL,inMAP ;выровн
  510.         LD A,C
  511.         AND 7
  512.         LD C,A
  513.         ADD A,A
  514.         ADD A,L
  515.         LD L,A
  516.         LD A,(HL)
  517.         INC L
  518.         LD H,(HL)
  519.         LD L,A
  520.         ADD HL,DE
  521.         LD A,(HL)
  522.         CP 1   ;пров на прох
  523.         JR C,M3k4
  524.         JR Z,MK_REp
  525.          RLCA
  526.          JR NC,M3k4n
  527.          CALL Mk_her
  528.          JR C,M3k4
  529. M3k4n   DEC C
  530.         JR CCWre1
  531. M3k4    EX (SP),HL
  532.         LD DE,GO_Ntb
  533.         LD A,C
  534.         ADD A,A
  535.         ADD A,E
  536.         LD E,A
  537.         LD A,(DE)
  538.         ADD A,L
  539.         LD L,A
  540.         INC DE
  541.         LD A,(DE)
  542.         ADD A,H
  543.         LD H,A
  544.         POP DE
  545.         CP (IX+1)
  546.         JR NZ,M3kk
  547.         LD A,L
  548.         CP (IX+0)
  549.         JP Z,MK_RET
  550. M3kk    CALL DIST
  551.         LD B,A
  552.         LD A,(MINDIS)
  553.         CP B
  554.         JR C,Mk_eo3
  555.         JR Z,Mk_eo3
  556.         LD A,B
  557.         LD (MINDIS),A
  558.         EX AF,AF
  559.         LD (MINLEN),A
  560.         EX AF,AF
  561.         LD A,#80
  562.         LD (NROUND),A
  563. Mk_eo3  EX AF,AF
  564.         INC A
  565.         LD B,A
  566.         EX AF,AF
  567.         LD A,(MAX_II)
  568.         CP B
  569.         JP NC,MkLOO3
  570.         JP MK_RET
  571.         ;
  572. CCWstp  POP HL
  573.         EXX
  574.         EX AF,AF
  575.         LD B,A
  576.         LD A,(MAXLEN)
  577.         ADD A,A
  578.         SUB B
  579.         LD (MAX_II),A
  580.         LD A,B
  581.         EX AF,AF
  582. MkLOO2  BIT 0,C
  583.         JR Z,M2k7
  584.         DEC C
  585. M2k7    DEC C
  586.         PUSH HL
  587. CWrep2  LD HL,inMAP ;выровн
  588.         LD A,C
  589.         AND 7
  590.         LD C,A
  591.         ADD A,A
  592.         ADD A,L
  593.         LD L,A
  594.         LD A,(HL)
  595.         INC L
  596.         LD H,(HL)
  597.         LD L,A
  598.         ADD HL,DE
  599.         LD A,(HL)
  600.         CP 1   ;пров на прох
  601.         JR C,M2k4
  602.         JP Z,MK_REp
  603.          RLCA
  604.          JR NC,M2k4n
  605.          CALL Mk_her
  606.          JR C,M2k4
  607. M2k4n   INC C
  608.         JR CWrep2
  609. M2k4    EX (SP),HL
  610.         LD DE,GO_Ntb
  611.         LD A,C
  612.         ADD A,A
  613.         ADD A,E
  614.         LD E,A
  615.         LD A,(DE)
  616.         ADD A,L
  617.         LD L,A
  618.         INC DE
  619.         LD A,(DE)
  620.         ADD A,H
  621.         LD H,A
  622.         POP DE
  623.         CP (IX+1)
  624.         JR NZ,M2kk
  625.         LD A,L
  626.         CP (IX+0)
  627.         JP Z,MK_RET
  628. M2kk    CALL DIST
  629.         LD B,A
  630.         LD A,(MINDIS)
  631.         CP B
  632.         JR C,Mk_eo2
  633.         JR Z,Mk_eo2
  634.         LD A,B
  635.         LD (MINDIS),A
  636.         EX AF,AF
  637.         LD (MINLEN),A
  638.         EX AF,AF
  639.         XOR A
  640.         LD (NROUND),A
  641. Mk_eo2  EX AF,AF
  642.         INC A
  643.         LD B,A
  644.         EX AF,AF
  645.         LD A,(MAX_II)
  646.         CP B
  647.         JP NC,MkLOO2
  648.         JP MK_RET
  649.  
  650. Mk_her  ;препятствие - герой
  651.         ;(C: чужаки/движущиеся - прозрачны для трассировки)
  652.         RRCA
  653.         PUSH AF
  654.         PUSH HL
  655.         AND #7F ;/CALL N_IX
  656.         ADD A,A
  657.         LD L,A
  658.         LD H,0
  659.         ADD HL,HL
  660.         ADD HL,HL
  661.         ADD HL,HL
  662.         LD A,HUMAN/256
  663.         ADD A,H
  664.         LD H,A
  665.         SET 3,L
  666.         LD A,(HL) ;/LD A,(IX+8)
  667.         POP HL
  668.         OR A
  669.         JR Z,Mk_h2 ;/00
  670.         INC A
  671.         JR Z,Mk_h2 ;/FF
  672.         POP AF ;движущийся прозрачен
  673.         SCF
  674.         RET
  675. Mk_h2   EX AF,AF
  676.         CP 4 ;миним дальность-1 на которой враг не проходим
  677.         JR C,Mk_h3
  678.         EX AF,AF
  679.         LD A,(SIDE_N)
  680.         OR A
  681.         JR NZ,Mk_h1
  682.         POP AF
  683.         SUB #B0
  684.         CP #30
  685.         RET  ;враг прозрачен
  686. Mk_h1   POP AF
  687.         SUB #80
  688.         CP #30
  689.         RET  ;наш прозрачен
  690. Mk_h3   EX AF,AF ;противник близко (непрозрачен)
  691.         POP AF
  692.         XOR A
  693.         RET
  694.  
  695.  
  696. GO_MAN  ;перемещение
  697.         LD A,(IX+8)
  698.         OR A
  699.         RET Z
  700.         CALL HL_IXt
  701.         EX DE,HL
  702.         CALL HL_IX0
  703.         PUSH HL
  704.         SBC HL,DE
  705.         POP HL
  706.         JP Z,G_stop ;пришли к цели - стоп
  707.         CP #80
  708.         JR C,GO_CW
  709.         JR NZ,GO_CCW
  710.         CALL DIR_F
  711.         LD (IX+2),A
  712.         CALL GO_NXT
  713.         JR C,GO_go
  714.           BIT 7,A
  715.           JP Z,MAKE_R
  716.           CALL GO_NXe
  717.           JP Z,MAKE_R
  718.           LD (IX+8),0 ;против ложного обхода
  719.         JP MAKE_R
  720.         ;
  721. GO_go   JP go_IX3
  722. GO_CW   DEC (IX+8)
  723.         CALL Z,G_free
  724.         LD C,1
  725.         LD A,(IX+2)
  726.         DEC A
  727.         BIT 0,A
  728.         JR NZ,GO_rep
  729.         DEC A
  730.          LD B,A ;против закручивания
  731.          DEC A
  732.          AND 7
  733.          CALL GO_NXT
  734.          JR NC,GO_re2
  735.          LD A,(IX+8)
  736.          CP #80
  737.          JR Z,GO_re2
  738.          CP 2
  739.          JR C,GO_re2
  740.          LD (IX+8),#01
  741.         JR GO_re2
  742. GO_CCW  DEC (IX+8)
  743.         LD C,-1
  744.         LD A,(IX+2)
  745.         INC A
  746.         BIT 0,A
  747.         JR NZ,GO_rep
  748.         INC A
  749.          LD B,A ;против закручивания
  750.          INC A
  751.          AND 7
  752.          CALL GO_NXT
  753.          JR NC,GO_re2
  754.          LD A,(IX+8)
  755.          CP #82
  756.          JR C,GO_re2
  757.          LD (IX+8),#81
  758. GO_re2  LD A,B
  759. GO_rep  LD B,8
  760. GO_re1  AND 7
  761.         LD (IX+2),A
  762.         CALL GO_NXT
  763.         JR C,Gx3
  764.           BIT 7,A
  765.           JR Z,G_re5
  766.           CALL GO_NXe ;против заторов
  767.           JR Z,G_re5
  768.           LD A,B
  769.           CP 8
  770.           JR NC,G_re5a
  771.           LD A,R ;для b=6..1
  772.           AND #7
  773.           RET NZ
  774. G_re5a    LD (IX+8),#80 ;для b=7..8
  775. G_re5   LD A,(IX+2)
  776.         ADD A,C
  777.         DJNZ GO_re1
  778.         JR G_wait ;! временно заперт - ждать
  779. Gx3     CALL HL_IXt
  780.         EX DE,HL
  781.         CALL DIR
  782.         CP (IX+2)
  783.         CALL Z,G_rnd
  784.         EX DE,HL
  785.         JP GO_go
  786.  
  787. G_rnd   LD A,R ;переходить на своб. траеторию?
  788.         AND #7F
  789.         CP 7  ;вер:X/128
  790.         RET C ;антизацикливание
  791.         ;
  792. G_free  LD (IX+8),#80 ;своб. перемещ
  793.         RET
  794.  
  795. G_wait  ;ждать прохода
  796.         LD (IX+3),#80+6;величина ожидания
  797.         JR G_free
  798.  
  799. G_stop  XOR A ;стоп
  800.         LD (IX+8),A
  801.         RET
  802.  
  803. GO_NXT  ;Вх:HL-исх точка, А-напр
  804.         ;Вых: DE-след точка, NC/C - непрох/прох
  805.         PUSH HL
  806.         LD DE,GO_Ntb
  807.         ADD A,A
  808.         ADD A,E
  809.         LD E,A
  810.         LD A,(DE)
  811.         ADD A,L
  812.         LD L,A
  813.         INC DE
  814.         LD A,(DE)
  815.         ADD A,H
  816.         LD H,A
  817.         LD D,H
  818.         LD E,L
  819.         LD A,L
  820.         RLCA
  821.         RLCA
  822.         SRL H
  823.         RRA
  824.         SRL H
  825.         RRA
  826.         LD L,A
  827.         LD A,H
  828.         ADD A,MAP2/256
  829.         LD H,A
  830.         LD A,(HL) ;проработать!
  831.         POP HL
  832.         CP 1
  833.         RET
  834.  
  835. GO_NXe   ;против заторов
  836.          AND #7F
  837.          PUSH IX ;впереди герой
  838.          PUSH HL
  839.          CALL N_IX
  840.          LD A,(IX+8)
  841.          POP HL
  842.          POP IX
  843.          OR A
  844.          RET Z ;он стоит/00
  845.          INC A
  846.          RET;Z ;он стоит/FF  /NZ-двигается
  847.  
  848.  
  849.  
  850.  
  851. ;-----герои ходят и дерутся ----------------------------------
  852. TimIMP  DEFB 1,1,1,-1,1,1,1,27,1 ;задержка удара (-1 - нет фазы)
  853.         DEFB 1,1,1,-1,1,1,1,27,1
  854.         DEFB 1,1,1,1,1,1, 2,2,3
  855.  
  856. TimDEL  DEFB 1,1,1,6,1,1,1, 31,2 ;задержка после удара
  857.         DEFB 1,1,1,9,1,1,1, 31,2
  858.         DEFB 1,1,1,1,1,1, 2,3,8
  859.  
  860. HvT1    DEFW 0,1, 1,1, 1,0, 1,-1
  861.         DEFW 0,-1, -1,-1, -1,0, -1,1
  862.  
  863. HvA     ; %1ibttttt
  864.         JR NZ,HvAA
  865.         LD (IX+3),0  ;конец удара
  866.         RET
  867. HvAA    LD L,A
  868.         AND %11111
  869.         JR Z,HvAim
  870.         DEC (IX+3)  ;задержка
  871.         RET
  872. HvAim   BIT 6,L
  873.         JR Z,HvAdel
  874.         LD A,(IX+4)
  875.         LD HL,TimIMP
  876.         CALL BA
  877.         CP 255
  878.         JR C,HvAi1
  879.         LD HL,TimDEL ;лучники
  880.         LD A,(IX+4)
  881.         CALL BA
  882.         ADD A,%10000000
  883.         LD (IX+3),A
  884.          LD A,3         ;FX-лук
  885.          JP SOUNDn      ;
  886. HvAi1   ADD A,%10100000  ;удар
  887.         LD (IX+3),A
  888.         LD A,(IX+2)
  889.         JR HvA1
  890. HvAdel   LD A,(IX+4)    ;FX-эффект удара
  891.          LD HL,typSND   ;
  892.          CALL BA        ;
  893.          CALL SOUNDn    ;
  894.         LD A,(IX+4)
  895.         LD HL,TimDEL
  896.         CALL BA
  897.         ADD A,%10000000
  898.         LD (IX+3),A
  899.         LD A,(IX+2)
  900.         ADD A,4
  901.         AND 7
  902. HvA1    EX AF,AF
  903.         LD A,(IX+4)
  904.         LD HL,AT_TY_
  905.         CALL BA
  906.         RRCA
  907.         RET C
  908.         EX AF,AF
  909.         JR Hv2_
  910.  
  911. HERMOV  ;LD A,(IX+3) ;перемещение (п/п нижн. уровня)
  912.         ;OR A
  913.         ;RET Z
  914.         CP #80 ;в А ix+3
  915.         JR NC,HvA
  916.         EX AF,AF
  917.         DEC (IX+3)
  918.         LD A,(IX+7)
  919.         AND %111
  920.         CP 2
  921.         JR Z,Hv2
  922.         JP C,Hv1
  923.         CP 3
  924.         JP NZ,Hv4
  925.         EX AF,AF
  926.         CP 1
  927.         JR Z,Hv2
  928.         CP 4
  929.         JR Z,Hv2
  930. Hv3     LD A,(IX+2)
  931.         LD HL,HvT1
  932.         CALL DA
  933.         INC HL
  934.         PUSH HL
  935.         LD D,(HL)
  936.         LD E,A
  937.         LD L,(IY+0)
  938.         LD H,(IY+1)
  939.         ADD HL,DE
  940.         ADD HL,DE
  941.         ADD HL,DE
  942.         LD (IY+0),L
  943.         LD (IY+1),H
  944.         POP HL
  945.         INC HL
  946.         LD E,(HL)
  947.         INC HL
  948.         LD D,(HL)
  949.         LD L,(IY+2)
  950.         LD H,(IY+3)
  951.         ADD HL,DE
  952.         ADD HL,DE
  953.         ADD HL,DE
  954.         LD (IY+2),L
  955.         LD (IY+3),H
  956.         RET
  957. Hv2     LD A,(IX+2)
  958. Hv2_    LD HL,HvT1
  959.         CALL DA
  960.         INC HL
  961.         PUSH HL
  962.         LD D,(HL)
  963.         LD E,A
  964.         LD L,(IY+0)
  965.         LD H,(IY+1)
  966.         ADD HL,DE
  967.         ADD HL,DE
  968.         LD (IY+0),L
  969.         LD (IY+1),H
  970.         POP HL
  971.         INC HL
  972.         LD E,(HL)
  973.         INC HL
  974.         LD D,(HL)
  975.         LD L,(IY+2)
  976.         LD H,(IY+3)
  977.         ADD HL,DE
  978.         ADD HL,DE
  979.         LD (IY+2),L
  980.         LD (IY+3),H
  981.         RET
  982. Hv1     LD A,(IX+2)
  983.         LD HL,HvT1
  984.         CALL DA
  985.         INC HL
  986.         PUSH HL
  987.         LD D,(HL)
  988.         LD E,A
  989.         LD L,(IY+0)
  990.         LD H,(IY+1)
  991.         ADD HL,DE
  992.         LD (IY+0),L
  993.         LD (IY+1),H
  994.         POP HL
  995.         INC HL
  996.         LD E,(HL)
  997.         INC HL
  998.         LD D,(HL)
  999.         LD L,(IY+2)
  1000.         LD H,(IY+3)
  1001.         ADD HL,DE
  1002.         LD (IY+2),L
  1003.         LD (IY+3),H
  1004.         RET
  1005. Hv4     LD A,(IX+2)
  1006.         LD HL,HvT1
  1007.         CALL DA
  1008.         INC HL
  1009.         PUSH HL
  1010.         LD D,(HL)
  1011.         LD E,A
  1012.         LD L,(IY+0)
  1013.         LD H,(IY+1)
  1014.         ADD HL,DE
  1015.         ADD HL,DE
  1016.         ADD HL,DE
  1017.         ADD HL,DE
  1018.         LD (IY+0),L
  1019.         LD (IY+1),H
  1020.         POP HL
  1021.         INC HL
  1022.         LD E,(HL)
  1023.         INC HL
  1024.         LD D,(HL)
  1025.         LD L,(IY+2)
  1026.         LD H,(IY+3)
  1027.         ADD HL,DE
  1028.         ADD HL,DE
  1029.         ADD HL,DE
  1030.         ADD HL,DE
  1031.         LD (IY+2),L
  1032.         LD (IY+3),H
  1033.         RET
  1034.  
  1035. go_IX3  ;нач знач фазы IX+3
  1036.         CALL HL_IX0 ;сместить ук в map2 (в DE)
  1037.         CALL GMAP2
  1038.         LD C,(HL)
  1039.         LD (HL),0
  1040.         EX DE,HL
  1041.         CALL IX0_HL
  1042.         CALL GMAP2
  1043.         LD (HL),C
  1044.         LD HL,HvTHs ;нач del
  1045.         LD A,(IX+2)
  1046.         RRCA
  1047.         JR NC,gX0
  1048.         LD HL,HvTDs
  1049. gX0     CALL gPAR
  1050.         LD C,8
  1051.         CP 2
  1052.         JR Z,gX1
  1053.         LD C,16
  1054.         JR C,gX1
  1055.         CP 3
  1056.         LD C,6
  1057.         JR Z,gX1
  1058.         LD C,4
  1059. gX1     LD (IX+3),C
  1060.         LD C,A
  1061.         LD A,(IX+7)
  1062.         AND %11111000
  1063.         OR C
  1064.         LD (IX+7),A
  1065.         RET
  1066.  
  1067.