Subversion Repositories NedoOS

Rev

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

  1. ARMS
  2.         LD      L,(IX+UNIT_DIRECTION)
  3.         LD      H,(IX+UNIT_ANIMATION)
  4.         LD      DE,SPRCLOUD0;256+44
  5.         LD      (IX+UNIT_NUMBERSPRITES),E
  6.         LD      (IX+UNIT_NUMBERSPRITES+1),D
  7.         LD      A,(IX+UNIT_BITFRIENDLYFIRE)
  8.         INC     A
  9.         CP      3
  10.         CALL    NC,ARMS2
  11.         CP      5
  12.         CALL    NC,ARMS3
  13.         LD      (IX+UNIT_BITFRIENDLYFIRE),A
  14.         PUSH    IX
  15.         PUSH    HL
  16.         POP     IX
  17.         LD      E,(IX+UNIT_X)
  18.         LD      D,(IX+UNIT_X+1)
  19.         POP     IX
  20.         LD      (IX+UNIT_X),E
  21.         LD      (IX+UNIT_X+1),D
  22.         PUSH    IX
  23.         PUSH    HL
  24.         POP     IX
  25.         LD      E,(IX+UNIT_Y)
  26.         LD      D,(IX+UNIT_Y+1)
  27.         POP     IX
  28.         LD      (IX+UNIT_Y),E
  29.         LD      (IX+UNIT_Y+1),D
  30.         LD      A,(TANKP)
  31.         CP      0
  32.         RET     NZ
  33.         LD      A,(IX+UNIT_COUNTER)
  34.         DEC     A
  35.         LD      (IX+UNIT_COUNTER),A
  36.         CP      0
  37.         RET     NZ
  38.         LD      (IX+UNIT_YESORNOT),0
  39.         LD      HL,0
  40.         LD      (IX+UNIT_NUMBERSPRITES),L
  41.         LD      (IX+UNIT_NUMBERSPRITES+1),H
  42.         RET
  43. ARMS2   LD      DE,SPRCLOUD1;256+46
  44.         LD      (IX+UNIT_NUMBERSPRITES),E
  45.         LD      (IX+UNIT_NUMBERSPRITES+1),D
  46.         RET
  47. ARMS3   XOR     A
  48.         RET
  49.        
  50. INSARM
  51.         LD      IX,UNITS
  52.  
  53.         LD      HL,96
  54.         LD      (IX+UNIT_X),L
  55.         LD      (IX+UNIT_X+1),H
  56.         LD      HL,MAXY;224
  57.         LD      (IX+UNIT_Y),L
  58.         LD      (IX+UNIT_Y+1),H
  59.         LD      DE,96
  60.         ADD     IX,DE
  61.         LD      HL,128+32
  62.         LD      (IX+UNIT_X),L
  63.         LD      (IX+UNIT_X+1),H
  64.         LD      HL,MAXY;224
  65.         LD      (IX+UNIT_Y),L
  66.         LD      (IX+UNIT_Y+1),H
  67.  
  68.         LD      IX,UNITS
  69.         LD      A,(IX+UNIT_YESORNOT)
  70.         CP      1
  71.         JR      NZ,UNNE
  72.         LD      (IX+UNIT_SHELLTIME),16
  73.         PUSH    IX
  74.         POP     HL
  75.         LD      IX,BRONITS
  76.         LD      (IX+UNIT_DIRECTION),L
  77.         LD      (IX+UNIT_ANIMATION),H
  78.         LD      (IX+UNIT_COUNTER),16
  79.         LD      (IX+UNIT_YESORNOT),6 ;ARMS
  80.  
  81. UNNE    LD      IX,UNITS
  82.         LD      DE,4*UNITSZ;96
  83.         ADD     IX,DE
  84.         LD      A,(IX+UNIT_YESORNOT)
  85.         CP      1 ;SHOT1
  86.         RET     NZ
  87.  
  88.         LD      (IX+UNIT_SHELLTIME),16
  89.  
  90.         PUSH    IX
  91.         POP     HL
  92.         LD      IX,BRONITS
  93.         LD      DE,UNITSZ;24
  94.         ADD     IX,DE
  95.         LD      (IX+UNIT_YESORNOT),6 ;ARMS
  96.         LD      (IX+UNIT_DIRECTION),L
  97.         LD      (IX+UNIT_ANIMATION),H
  98.         LD      (IX+UNIT_COUNTER),16
  99.         RET
  100.  
  101. PRTAN
  102.         LD      A,(WARTAN)
  103.         CP      20
  104.         RET     Z
  105.         LD      L,21
  106.         LD      H,0
  107.         LD      C,A
  108.         LD      B,0
  109.         SBC     HL,BC
  110.         PUSH    HL
  111.         POP     BC
  112.         LD      A,C
  113.         LD      B,A ;21-(WARTAN)
  114.         LD      DE,100
  115. NNN     LD      IX,WAR ;таблица координат символов танков
  116.         DEC     DE
  117.         DEC     DE
  118.         DEC     DE
  119.         DEC     DE
  120.         DEC     DE
  121.         ADD     IX,DE
  122.         LD      (IX),0
  123.         DJNZ    NNN
  124.         RET
  125.  
  126. GAMEOV  LD      A,(NEWTAN1)
  127.         CP      1
  128.         JP      Z,GAO1
  129.         CP      0
  130.         RET     Z
  131.         DEC     A
  132.         LD      (NEWTAN1),A
  133.         RET
  134. GAO1    LD      IX,UNITS
  135.         LD      (IX+UNIT_X),96
  136.         LD      (IX+UNIT_X+1),0
  137.         LD      (IX+UNIT_Y),MAXY;224
  138.         LD      (IX+UNIT_Y+1),0
  139.         LD      (IX+UNIT_NEEDRND),1
  140.         LD      (IX+UNIT_DIRECTION),1
  141.         LD      (IX+UNIT_YESORNOT),5 ;RELESE
  142.         LD      (IX+UNIT_DIRECTION2),3
  143.         LD      (IX+UNIT_DIRECTION),0
  144.         LD      (IX+UNIT_TIMEFORSHOTONWAR),4
  145.         LD      HL,SPRSTAR0;256+48
  146.         LD      (IX+UNIT_NUMBERSPRITES),L
  147.         LD      (IX+UNIT_NUMBERSPRITES+1),H
  148.         LD      (IX+UNIT_BITFRIENDLYFIRE),1
  149.         XOR     A
  150.         LD      (NEWTAN1),A
  151.         RET
  152. GAMEO11 LD      (IX+UNIT_YESORNOT),1 ;SHOT1
  153.         LD      HL,SPRMYTANKLEVEL0;256
  154.         LD      (IX+UNIT_NUMBERSPRITES),L
  155.         LD      (IX+UNIT_NUMBERSPRITES+1),H
  156.         LD      (IX+UNIT_X),96
  157.         LD      (IX+UNIT_X+1),0
  158.         LD      (IX+UNIT_Y),MAXY;224
  159.         LD      (IX+UNIT_Y+1),0
  160.         LD      (IX+UNIT_NEEDRND),1
  161.         LD      (IX+UNIT_DIRECTION),1
  162.         LD      (IX+UNIT_ANIMATION),0
  163.         LD      (IX+UNIT_COUNTER),0
  164.         LD      (IX+UNIT_TIMEFORSHOTONWAR),0
  165.         LD      (IX+UNIT_STOPBIT),0
  166.         LD      (IX+UNIT_BITFRIENDLYFIRE),0
  167.         LD      (IX+UNIT_SHELLTIME),0
  168.         LD      (IX+UNIT_ICE),0
  169.         LD      (IX+UNIT_SAND),0
  170.         LD      (IX+UNIT_TYPEOFTANK),0
  171.         LD      (IX+UNIT_WATERWAY),0
  172.         LD      (IX+UNIT_STAR),0
  173.         LD      (IX+UNIT_ENERGY),0
  174.         PUSH    IX
  175.         LD      IX,UNITS
  176.         LD      (IX+UNIT_SHELLTIME),16
  177.         ld (ix+(UNITSZ+UNIT_STAR)),0 ;(IX+46),0
  178.         ld (ix+(2*UNITSZ+UNIT_STAR)),0 ;(IX+70),0
  179.         PUSH    IX
  180.         POP     HL
  181.         POP     IX
  182.         LD      A,(ENDG)
  183.         CP      0
  184.         RET     NZ
  185.         LD      IX,BRONITS
  186.         LD      (IX+UNIT_DIRECTION),L
  187.         LD      (IX+UNIT_ANIMATION),H
  188.         LD      (IX+UNIT_COUNTER),16
  189.         LD      (IX+UNIT_YESORNOT),6 ;ARMS
  190.         XOR     A
  191.         LD      (NEWTAN1),A
  192.         RET
  193.  
  194. GAMEOV2 LD      A,(NEWTAN2)
  195.         CP      1
  196.         JP      Z,GAO2
  197.         CP      0
  198.         RET     Z
  199.         DEC     A
  200.         LD      (NEWTAN2),A
  201.         RET
  202. GAO2    LD      IX,UNITS
  203.         LD      DE,4*UNITSZ;96
  204.         ADD     IX,DE
  205.         LD      (IX+UNIT_X),128+32
  206.         LD      (IX+UNIT_X+1),0
  207.         LD      (IX+UNIT_Y),MAXY;224
  208.         LD      (IX+UNIT_Y+1),0
  209.         LD      (IX+UNIT_NEEDRND),1
  210.         LD      (IX+UNIT_DIRECTION),1
  211.         LD      (IX+UNIT_YESORNOT),5 ;RELESE
  212.         LD      (IX+UNIT_DIRECTION2),3
  213.         LD      (IX+UNIT_DIRECTION),0
  214.         LD      (IX+UNIT_TIMEFORSHOTONWAR),4
  215.         LD      (IX+UNIT_ICE),0
  216.         LD      (IX+UNIT_SAND),0
  217.         LD      (IX+UNIT_TYPEOFTANK),0
  218.         LD      (IX+UNIT_WATERWAY),0
  219.         LD      (IX+UNIT_STAR),0
  220.         LD      (IX+UNIT_ENERGY),0
  221.         LD      HL,SPRSTAR0;256+48
  222.         LD      (IX+UNIT_NUMBERSPRITES),L
  223.         LD      (IX+UNIT_NUMBERSPRITES+1),H
  224.         LD      (IX+UNIT_BITFRIENDLYFIRE),1
  225.         XOR     A
  226.         LD      (NEWTAN2),A
  227.         RET
  228.  
  229. GAMEO22 LD      (IX+UNIT_YESORNOT),1 ;SHOT1
  230.         LD      HL,SPRMYTANKLEVEL0+8;264 ;player 2
  231.         LD      (IX+UNIT_NUMBERSPRITES),L
  232.         LD      (IX+UNIT_NUMBERSPRITES+1),H
  233.         LD      (IX+UNIT_X),128+32
  234.         LD      (IX+UNIT_X+1),0
  235.         LD      (IX+UNIT_Y),MAXY;224
  236.         LD      (IX+UNIT_Y+1),0
  237.         LD      (IX+UNIT_NEEDRND),1
  238.         LD      (IX+UNIT_DIRECTION),1
  239.         LD      (IX+UNIT_ANIMATION),0
  240.         LD      (IX+UNIT_COUNTER),0
  241.         LD      (IX+UNIT_TIMEFORSHOTONWAR),0
  242.         LD      (IX+UNIT_STOPBIT),0
  243.         LD      (IX+UNIT_BITFRIENDLYFIRE),0
  244.         LD      (IX+UNIT_SHELLTIME),0
  245.         PUSH    IX
  246.         LD      IX,UNITS
  247.         LD      DE,4*UNITSZ;96
  248.         ADD     IX,DE
  249.         LD      (IX+UNIT_SHELLTIME),16
  250.         ld (ix+(UNITSZ+UNIT_STAR)),0 ;(IX+46),0
  251.         ld (ix+(2*UNITSZ+UNIT_STAR)),0 ;(IX+70),0
  252.         PUSH    IX
  253.         POP     HL
  254.         POP     IX
  255.         LD      A,(ENDG)
  256.         CP      0
  257.         RET     NZ
  258.         LD      IX,BRONITS
  259.         LD      DE,UNITSZ;24
  260.         ADD     IX,DE
  261.         LD      (IX+UNIT_DIRECTION),L
  262.         LD      (IX+UNIT_ANIMATION),H
  263.         LD      (IX+UNIT_COUNTER),16
  264.         LD      (IX+UNIT_YESORNOT),6 ;ARMS
  265.         XOR     A
  266.         LD      (NEWTAN2),A
  267.         RET
  268.  
  269. PRINTW
  270.         LD      HL,(ADDRY) ;y
  271.         LD      BC,(ADDRX) ;x
  272. ;hl=x
  273. ;bc=y
  274. ;(NUMBS)=sprite pattern number
  275.         LD      A,H
  276.          and 1
  277.          ld (SPBUFX),a ;x>=256?
  278.         LD      E,L
  279.         LD      A,b
  280.          and 1
  281.          ld (SPBUFY),a
  282.  
  283.         ;LD     de,sprlist ;#200;  DESCRIPTOR
  284.         LD      hl,(ADDR)
  285.         ;ADD    HL,de
  286.         inc h
  287.         inc h
  288.  
  289.         LD      A,(YESORNO)
  290.         or a ;CP        0
  291.         JP      Z,NPSP
  292.  
  293.         LD      (HL),c;--------Y
  294.         INC     HL
  295.         LD      A,(IX+UNIT_DIRECTION)
  296.         CP      3
  297.         LD      A,(SPBUFY) ;y>=256???
  298.          jr nz,$+4
  299.           or 0x80 ;mirror vert
  300.          or 0x20 ;act
  301.          ld (hl),a
  302.         INC     HL
  303.         LD      (HL),E;--------X
  304.         INC     HL
  305.         LD      A,(IX+UNIT_DIRECTION)
  306.         CP      4
  307.         LD      A,(SPBUFX) ;x>=256???
  308.          jr nz,$+4
  309.           or 0x80 ;mirror hor
  310.          ld (hl),a
  311.         INC     HL
  312. NUMBS=$+1
  313.         LD      DE,0;(NUMBS) ;sprite pattern number
  314.         LD      (HL),E
  315.         INC     HL
  316.         LD      (HL),D
  317.         RET
  318. NPSP
  319. ;a=0
  320.         INC     HL
  321.         LD      (HL),a;0;A
  322.         RET
  323. ;NUMBS  DEFW    0
  324.  
  325.  
  326. PRINT
  327. ;for editor?
  328. ;TODO показывать графику тайла вместо спрайта!
  329. ;a=tile pattern number
  330. ;hl=x
  331. ;bc=y
  332. ;d=size
  333.         LD      (NUMSPR),A
  334.         LD      A,H
  335.          and 1
  336.          ld (SPBUFX),a ;x>=256?
  337.         LD      E,L
  338.         LD      A,b
  339.          and 1
  340.          ld (SPBUFY),a
  341.  
  342.         ;LD     de,sprlist ;#200;  DESCRIPTOR
  343.         LD      hl,(ADDR)
  344.         ;ADD    HL,de
  345.         inc h
  346.         inc h
  347.  
  348.         LD      HL,sprlist ;#200;  DESCRIPTOR
  349.  
  350.         LD      (HL),c;--------Y
  351.         INC     HL
  352.         LD      A,(SIZE);  SIZE SPRITE Y
  353.         ADD     A,SPACT
  354.         RES     0,A
  355.         LD      (HL),A
  356.         LD      A,(SPBUFY)
  357.         CP      1
  358.         CALL    Z,SPBUFYY
  359.         INC     HL
  360.         LD      (HL),E;--------X
  361.         INC     HL
  362.         LD      A,(SIZE); SIZE SPRITE X
  363.         RES     0,A
  364.         LD      (HL),A
  365.         LD      A,(SPBUFX)
  366.         CP      1
  367.         CALL    Z,SPBUFXX
  368.         INC     HL
  369.         LD      A,(NUMSPR); NUMBER OFF SPRITE IN MEMORY
  370.         LD      (HL),A
  371.         INC     HL
  372.         LD      (HL),0
  373.         LD      A,(FIGH)
  374.         CP      2
  375.         JP      Z,DEACTS
  376.         RET
  377. DEACTS  LD      B,80
  378. NJJ     PUSH    BC
  379.         INC     HL
  380.         LD      (HL),D;--------Y
  381.         INC     HL
  382.         LD      A,(SIZE);  SIZE SPRITE Y
  383.         ADD     A,SPACT
  384.         RES     0,A
  385.         RES     5,A;------------------DEACTIVACIA SPRITES
  386.         LD      (HL),A
  387.         LD      A,(SPBUFY) ;y>=256???
  388.         CP      1
  389.         CALL    Z,SPBUFYY
  390.         INC     HL
  391.         LD      (HL),E;--------X
  392.         INC     HL
  393.         LD      A,(SIZE); SIZE SPRITE X
  394.         RES     0,A
  395.         LD      (HL),A
  396.         LD      A,(SPBUFX) ;x>=256???
  397.         CP      1
  398.         CALL    Z,SPBUFXX
  399.         INC     HL
  400.         LD      A,(NUMSPR); NUMBER OFF SPRITE IN MEMORY
  401.         LD      (HL),A
  402.         INC     HL
  403.         LD      (HL),0
  404.         POP     BC
  405.         DJNZ    NJJ
  406.         RET
  407. SPBUFXX
  408.         LD      A,SPSIZ16; SIZE SPRITE X
  409.         SET     0,A
  410.         LD      (HL),A
  411.         RET
  412. SPBUFYY
  413.         LD      A,(SIZE);  SIZE SPRITE Y
  414.         ADD     A,SPACT
  415.         SET     0,A
  416.         LD      (HL),A
  417.         RET
  418. NUMSPR  DEFB    0
  419. SIZE    DEFB    0
  420. FIGH    DEFB    0
  421.  
  422. KEY1P   LD      IX,UNITS
  423.         LD      A,(IX+UNIT_YESORNOT)
  424.         CP      1 ;SHOT1
  425.         RET     NZ
  426.         LD      A,(IX+UNIT_BITFRIENDLYFIRE)
  427.         CP      0
  428.         JR      NZ,KEY1P2
  429.         LD      (IX+UNIT_ANIMATION),0
  430.         CALL    KEYRF;   UPRAVLENIE
  431.         CALL    KEYLF
  432.         CALL    KEYDF
  433.         CALL    KEYUF
  434.         LD      (IX+UNIT_ICE),0
  435.         RET
  436.  
  437. GO      LD      A,5
  438.         LD      (SOUNDGO),A
  439.         RET
  440.  
  441. KEY1P2  LD      A,(IX+UNIT_YESORNOT)
  442.         CP      1 ;SHOT1
  443.         RET     NZ
  444.         LD      A,(IX+UNIT_BITFRIENDLYFIRE)
  445.         DEC     A
  446.         LD      (IX+UNIT_BITFRIENDLYFIRE),A
  447.         RET
  448.  
  449. KEY2P   LD      A,(PLAYER)
  450.         CP      0
  451.         RET     Z
  452.         LD      IX,UNITS
  453.         LD      DE,4*UNITSZ;96
  454.         ADD     IX,DE
  455.         LD      A,(IX+UNIT_YESORNOT)
  456.         CP      1 ;SHOT1
  457.         RET     NZ
  458.         LD      A,(IX+UNIT_BITFRIENDLYFIRE)
  459.         CP      0
  460.         JR      NZ,KEY1P2
  461.         LD      (IX+UNIT_ANIMATION),0
  462.         CALL    KEYRFP2;   UPRAVLENIE
  463.         CALL    KEYLFP2
  464.         CALL    KEYDFP2
  465.         CALL    KEYUFP2
  466.         LD      (IX+UNIT_ICE),0
  467.         RET
  468.  
  469. KEYDF   LD      A,3
  470.         CALL    YOMPA1P
  471.         LD      A,(IX+UNIT_COUNTER)
  472.         CP      0
  473.         JP      NZ,KEYD3
  474.         IF KEMPSTON             ;Replace 1st player's control to Kempston joystick
  475.         ld a,(kempstonbuttons) ;IN      A,(#1F)
  476.         AND     %00000100
  477.         JP      NZ,KEYDF22
  478.         ENDIF
  479.         LD      HL,(Keys1PlDn)          ;LD             HL,Keys1PlDn+2
  480.         LD      B,H                                     ;LD             BC,(Keys1PlDn)
  481.         LD      C,#FE                           ;CALL   CHBIT
  482.         IN      A,(C)
  483.         AND     L
  484.         JP      Z,KEYDF22
  485. KEYDF_ok
  486.                 XOR             A
  487.                 LD              (RAZF4),A
  488.                 RET
  489. KEYDF22 LD              A,(RAZF4)
  490.                 CP              2                                       ;MOVE_PAUSE             ;Pause for change move direction
  491.                 JP              NC,KEYDF2
  492.                 LD              A,(RAZF4)
  493.                 INC             A
  494.                 LD              (RAZF4),A
  495.                 LD              A,3
  496.                 LD              (IX+UNIT_DIRECTION),A
  497.                 RET
  498. RAZF4   DEFB    0
  499.  
  500. KRF3    LD      A,(TANKP)
  501.         CP      0
  502.         RET     Z
  503.         CP      5
  504.         RET     Z
  505.         POP     HL
  506.         RET
  507. KEYD3   LD      (IX+UNIT_ANIMATION),1
  508.         LD      A,(IX+UNIT_COUNTER)
  509.         CP      8
  510.         JR      NZ,KEYQQ
  511.         CALL    MATEMAT
  512.         ;LD     BC,256
  513.         ;ADD    HL,BC
  514.          TILEMAPLINEDOWN
  515.         CALL    COUNT
  516.  
  517. KEYQQ   LD      A,(IX+UNIT_DIRECTION)
  518.         CP      3
  519.         RET     NZ
  520.         LD      A,(IX+UNIT_SAND)
  521.         CP      28
  522.         CALL    Z,KRF3
  523.         LD      A,(IX+UNIT_COUNTER)
  524.         DEC     A
  525.         LD      (IX+UNIT_COUNTER),A
  526.         LD      E,(IX+UNIT_Y)
  527.         LD      D,(IX+UNIT_Y+1)
  528.         LD      A,E
  529.         CP      MAXY;224
  530.         JP      Z,RNDD
  531.         INC     DE
  532.         LD      (IX+UNIT_Y),E
  533.         LD      (IX+UNIT_Y+1),D
  534.         POP     HL
  535.         RET
  536. RNDD
  537.         LD      (IX+UNIT_NEEDRND),1
  538.         LD      (IX+UNIT_COUNTER),0
  539.         RET
  540.  
  541. KEYDF2  LD      A,(IX+UNIT_BITPARENTSBULL)
  542.         CP      3
  543.         JR      NC,KEYDF2A
  544.         LD      A,(IX+UNIT_ICE)
  545.         CP      26
  546.         JP      Z,KRF2
  547. KEYDF2A LD      A,(IX+UNIT_STOPBIT)
  548.         CP      0
  549.         JP      NZ,KQ1
  550.         LD      A,(IX+UNIT_COUNTER)
  551.         CP      0
  552.         RET     NZ
  553.         LD      (IX+UNIT_DIRECTION),3
  554.         LD      (IX+UNIT_COUNTER),8
  555.         LD      A,(IX+UNIT_DIRECTION2)
  556.         CP      0
  557.         JP      NZ,KEYDFC
  558.         JP      KEYDF
  559.  
  560.  
  561. KEYUF   LD              A,1
  562.                 CALL    YOMPA1P
  563.                 LD              A,(IX+UNIT_COUNTER)
  564.                 CP              0
  565.                 JP              NZ,KEYF3
  566.         IF KEMPSTON             ;Replace 1st player's control to Kempston joystick
  567.         ld a,(kempstonbuttons) ;IN      A,(#1F)
  568.         AND     %00001000
  569.         JP      NZ,KEYUF22
  570.         ENDIF
  571.         LD      HL,(Keys1PlUp)          ;LD             HL,Keys1PlUp+2
  572.         LD      B,H                                     ;LD             BC,(Keys1PlUp)
  573.         LD      C,#FE                           ;CALL   CHBIT
  574.         IN      A,(C)
  575.         AND     L
  576.         JP      Z,KEYUF22
  577. KEYUF_ok
  578.                 XOR             A
  579.                 LD              (RAZF3),A
  580.                 RET
  581. KEYUF22 LD              A,(RAZF3)
  582.                 CP              2                                       ;MOVE_PAUSE             ;Pause for change move direction
  583.                 JP              NC,KEYUF2
  584.                 LD              A,(RAZF3)
  585.                 INC             A
  586.                 LD              (RAZF3),A
  587.                 LD              A,1
  588.                 LD              (IX+UNIT_DIRECTION),A
  589.                 RET
  590. RAZF3   DEFB    0
  591.  
  592. KEYF3
  593.         LD      (IX+UNIT_ANIMATION),1
  594.         LD      A,(IX+UNIT_COUNTER)
  595.         CP      8
  596.         JR      NZ,KEYQ1Q
  597.         CALL    MATEMAT
  598.         ;LD     BC,256
  599.         ;SBC    HL,BC
  600.          TILEMAPLINEUP
  601.         CALL    COUNT
  602. KEYQ1Q
  603.         LD      A,(IX+UNIT_DIRECTION)
  604.         CP      1
  605.         RET     NZ
  606.         LD      A,(IX+UNIT_SAND)
  607.         CP      28
  608.         CALL    Z,KRF3
  609.         LD      A,(IX+UNIT_COUNTER)
  610.         DEC     A
  611.         LD      (IX+UNIT_COUNTER),A
  612.         LD      E,(IX+UNIT_Y)
  613.         LD      D,(IX+UNIT_Y+1)
  614.         LD      A,E
  615.         CP      0
  616.         JP      Z,RNDD
  617.         DEC     DE
  618.         LD      (IX+UNIT_Y),E
  619.         LD      (IX+UNIT_Y+1),D
  620.         POP     HL
  621.         RET
  622. KEYUF2  LD      A,(IX+UNIT_BITPARENTSBULL)
  623.         CP      3
  624.         JR      NC,KEYUF2A
  625.         LD      A,(IX+UNIT_ICE)
  626.         CP      26
  627.         JP      Z,KRF2
  628. KEYUF2A LD      A,(IX+UNIT_STOPBIT)
  629.         CP      0
  630.         JP      NZ,KQ1
  631.         LD      A,(IX+UNIT_COUNTER)
  632.         CP      0
  633.         RET     NZ
  634.         LD      (IX+UNIT_DIRECTION),1
  635.         LD      (IX+UNIT_COUNTER),8
  636.         LD      A,(IX+UNIT_DIRECTION2)
  637.         CP      0
  638.         JP      NZ,KEYUFC
  639.         JP      KEYUF
  640.  
  641.  
  642. COUNT
  643.         LD      A,(HL) ;wall tile
  644.         CP      2 ;brick
  645.         JP      Z,C1
  646.         CP      12 ;beton
  647.         JP      Z,C1
  648.         LD      A,(IX+UNIT_WATERWAY)
  649.         CP      1
  650.         JR      Z,CO1
  651.         LD      A,(HL)
  652.         CP 22 ;water
  653.         jp z,C1
  654.          sub WATERANIMTILE
  655.          cp NWATERANIMTILES
  656.          jp c,C1
  657. CO1     LD      A,(HL)
  658.         ;CP     38 ;brick broken from bottom
  659.         ;JP     Z,C1
  660.         ;CP     36 ;brick broken from top
  661.         ;JP     Z,C1
  662.         ;CP     35 ;brick broken from left
  663.         ;JP     Z,C1
  664.         ;CP     37 ;brick broken from right
  665.         ;JP     Z,C1
  666.         ;CP     30 ;eagle top-left
  667.         ;JP     Z,C1
  668.         ;CP     31 ;eagle top-right
  669.         ;JP     Z,C1
  670.         ;CP     94 ;eagle bottom-left
  671.         ;JP     Z,C1
  672.         ;CP     95 ;eagle bottom-right
  673.         ;JP     Z,C1
  674.        sub 35
  675.        cp 4
  676.        jp c,C1
  677.        sub 30-35
  678.        cp 2
  679.        jp c,C1
  680.        sub 94-30
  681.        cp 2
  682.        jp c,C1
  683.         ;INC    HL
  684.         ;INC    HL
  685.          TILEMAPRIGHT
  686.         LD      A,(HL)
  687.         CP      2
  688.         jp Z,C1
  689.         CP      12
  690.         jp Z,C1
  691.         LD      A,(IX+UNIT_WATERWAY)
  692.         CP      1
  693.         JR      Z,CO2
  694.         LD      A,(HL)
  695.         CP 22 ;water
  696.         jr z,C1
  697.          sub WATERANIMTILE
  698.          cp NWATERANIMTILES
  699.          jr c,C1
  700. CO2     LD      A,(HL)
  701.        sub 35
  702.        cp 4
  703.        jr c,C1
  704.        sub 30-35
  705.        cp 2
  706.        jr c,C1
  707.        sub 94-30
  708.        cp 2
  709.        jr c,C1
  710.  
  711.         ;LD     BC,254
  712.         ;ADD    HL,BC
  713.          TILEMAPLEFTLINEDOWN
  714.         LD      A,(HL)
  715.         CP      2
  716.         jr Z,C1
  717.         CP      12
  718.         jr Z,C1
  719.         LD      A,(IX+UNIT_WATERWAY)
  720.         CP      1
  721.         JR      Z,CO3
  722.         LD      A,(HL)
  723.         CP 22 ;water
  724.         jr z,C1
  725.          sub WATERANIMTILE
  726.          cp NWATERANIMTILES
  727.          jr c,C1
  728. CO3     LD      A,(HL)
  729.        sub 35
  730.        cp 4
  731.        jr c,C1
  732.        sub 30-35
  733.        cp 2
  734.        jr c,C1
  735.        sub 94-30
  736.        cp 2
  737.        jr c,C1
  738.  
  739.         ;INC    HL
  740.         ;INC    HL
  741.          TILEMAPRIGHT
  742.         LD      A,(HL)
  743.         CP      2
  744.         JR      Z,C1
  745.         CP      12
  746.         JR      Z,C1
  747.         LD      A,(IX+UNIT_WATERWAY)
  748.         CP      1
  749.         JR      Z,CO4
  750.         LD      A,(HL)
  751.         CP 22 ;water
  752.         jr z,C1
  753.          sub WATERANIMTILE
  754.          cp NWATERANIMTILES
  755.          jr c,C1
  756. CO4     LD      A,(HL)
  757.        sub 35
  758.        cp 4
  759.        jr c,C1
  760.        sub 30-35
  761.        cp 2
  762.        jr c,C1
  763.        sub 94-30
  764.        cp 2
  765.        ;jr c,C1
  766.         RET nz
  767. C1      POP     HL
  768.         LD      (IX+UNIT_NEEDRND),1
  769.         LD      (IX+UNIT_COUNTER),0
  770.         RET
  771.  
  772.  
  773.  
  774. KEYRF   LD              A,2
  775.                 CALL    COMPA1P
  776.                 LD              A,(IX+UNIT_COUNTER)
  777.                 CP              0
  778.                 JP              NZ,KEYYR3
  779.         IF KEMPSTON             ;Replace 1st player's control to Kempston joystick
  780.         ld a,(kempstonbuttons) ;IN      A,(#1F)
  781.         AND     %00000001
  782.         JP      NZ,KEYRF22
  783.         ENDIF
  784.         LD      HL,(Keys1PlRt)          ;LD             HL,Keys1PlRt+2
  785.         LD      B,H                                     ;LD             BC,(Keys1PlRt)
  786.         LD      C,#FE                           ;CALL   CHBIT
  787.         IN      A,(C)
  788.         AND     L
  789.         JP      Z,KEYRF22
  790. KEYRF_ok
  791.                 XOR             A
  792.                 LD              (RAZF),A
  793.                 RET
  794. KEYRF22 LD              A,(RAZF)
  795.                 CP              2                                       ;MOVE_PAUSE             ;Pause for change move direction
  796.                 JP              NC,KEYRF2
  797.                 LD              A,(RAZF)
  798.                 INC             A
  799.                 LD              (RAZF),A
  800.                 LD              A,2
  801.                 LD              (IX+UNIT_DIRECTION),A
  802.                 RET
  803. RAZF    DEFB    0
  804. KQ1     LD      HL,Keys1PlRt+2
  805.         LD      A,(COMA)
  806.         LD      (IX+UNIT_DIRECTION),A
  807.         LD      (IX+UNIT_ANIMATION),1
  808.         RET
  809. KEYYR3
  810.         LD      (IX+UNIT_ANIMATION),1
  811.         LD      A,(IX+UNIT_COUNTER)
  812.         CP      8
  813.         JR      NZ,KEYQQ1
  814.         CALL    MATEMAT
  815.         ;INC    HL
  816.         ;INC    HL
  817.          TILEMAPRIGHT
  818.         CALL    COUNT
  819. KEYQQ1  LD      A,(IX+UNIT_DIRECTION)
  820.         CP      2
  821.         RET     NZ
  822.         LD      A,(IX+UNIT_SAND)
  823.         CP      28
  824.         CALL    Z,KRF3
  825.         LD      A,(IX+UNIT_COUNTER)
  826.         DEC     A
  827.         LD      (IX+UNIT_COUNTER),A
  828.         LD      E,(IX+UNIT_X)
  829.         LD      D,(IX+UNIT_X+1)
  830.         LD      A,D
  831.         CP      1
  832.         CALL    Z,KEYFCH
  833.         INC     DE
  834.         LD      (IX+UNIT_X),E
  835.         LD      (IX+UNIT_X+1),D
  836.         POP     HL
  837.         RET
  838. KRF22
  839.         LD      A,(IX+UNIT_DIRECTION)
  840.         CP      1
  841.         JP      Z,PEYUF2A
  842.         CP      2
  843.         JP      Z,PEYRF2A
  844.         CP      3
  845.         JP      Z,PEYDF2A
  846.         CP      4
  847.         JP      Z,PEYLF2A
  848.         RET
  849. KRF2
  850.         LD      A,(IX+UNIT_DIRECTION)
  851.         CP      1
  852.         JP      Z,KEYUF2A
  853.         CP      2
  854.         JP      Z,KEYRF2A
  855.         CP      3
  856.         JP      Z,KEYDF2A
  857.         CP      4
  858.         JP      Z,KEYLF2A
  859.         RET
  860.         LD      A,(IX+UNIT_ICE)
  861.         CP      26
  862.         JP      Z,KRF22
  863. KEYRF2  LD      A,(IX+UNIT_BITPARENTSBULL)
  864.         CP      3
  865.         JR      NC,KEYRF2A
  866.         LD      A,(IX+UNIT_ICE)
  867.         CP      26
  868.         JP      Z,KRF2
  869. KEYRF2A LD      A,(IX+UNIT_STOPBIT)
  870.         CP      0
  871.         JP      NZ,KQ1
  872.         LD      A,(IX+UNIT_COUNTER)
  873.         CP      0
  874.         RET     NZ
  875.         LD      (IX+UNIT_DIRECTION),2
  876.         LD      (IX+UNIT_COUNTER),8
  877.         LD      A,(IX+UNIT_DIRECTION2)
  878.         CP      0
  879.         JP      NZ,KEYRFC
  880.         JP      KEYRF
  881. KEYFCH
  882.         LD      A,E
  883.         CP      0
  884.         RET     NZ
  885.         CALL    RNDD
  886.         POP     HL
  887.         RET
  888.  
  889. KEYLF   LD              A,4
  890.                 CALL    COMPA1P
  891.                 LD              A,(IX+UNIT_COUNTER)
  892.                 CP              0
  893.                 JP              NZ,KEYLL3
  894.         IF KEMPSTON             ;Replace 1st player's control to Kempston joystick
  895.         ld a,(kempstonbuttons) ;IN      A,(#1F)
  896.         AND     %00000010
  897.         JP      NZ,KEYLF22
  898.         ENDIF
  899.         LD      HL,(Keys1PlLt)          ;LD             HL,Keys1PlLt+2
  900.         LD      B,H                                     ;LD             BC,(Keys1PlLt)
  901.         LD      C,#FE                           ;CALL   CHBIT
  902.         IN      A,(C)
  903.         AND     L
  904.         JP      Z,KEYLF22
  905. KEYLF_ok
  906.                 XOR             A
  907.                 LD              (RAZF2),A
  908.                 RET
  909. KEYLF22 LD              A,(RAZF2)
  910.                 CP              2                                       ;MOVE_PAUSE             ;Pause for change move direction
  911.                 JP              NC,KEYLF2
  912.                 LD              A,(RAZF2)
  913.                 INC             A
  914.                 LD              (RAZF2),A
  915.                 LD              A,4
  916.                 LD              (IX+UNIT_DIRECTION),A
  917.                 RET
  918. RAZF2   DEFB    0
  919.  
  920.  
  921.  
  922. KEYLL3
  923.         LD      (IX+UNIT_ANIMATION),1
  924.         LD      A,(IX+UNIT_COUNTER)
  925.         CP      8
  926.         JR      NZ,KEYYY
  927.         CALL    MATEMAT
  928.         ;DEC    HL
  929.         ;DEC    HL
  930.          TILEMAPLEFT
  931.         CALL    COUNT
  932. KEYYY   LD      A,(IX+UNIT_DIRECTION)
  933.         CP      4
  934.         RET     NZ
  935.         LD      A,(IX+UNIT_SAND)
  936.         CP      28
  937.         CALL    Z,KRF3
  938.         LD      A,(IX+UNIT_COUNTER)
  939.         DEC     A
  940.         LD      (IX+UNIT_COUNTER),A
  941.         LD      E,(IX+UNIT_X)
  942.         LD      D,(IX+UNIT_X+1)
  943.         LD      A,D
  944.         CP      0
  945.         CALL    Z,KEYFCH
  946.         DEC     DE
  947.         LD      (IX+UNIT_X),E
  948.         LD      (IX+UNIT_X+1),D
  949.         POP     HL
  950.         RET
  951. KEYLF2  LD      A,(IX+UNIT_BITPARENTSBULL)
  952.         CP      3
  953.         JR      NC,KEYLF2A
  954.         LD      A,(IX+UNIT_ICE)
  955.         CP      26
  956.         JP      Z,KRF2
  957. KEYLF2A LD      A,(IX+UNIT_STOPBIT)
  958.         CP      0
  959.         JP      NZ,KQ1
  960.         LD      A,(IX+UNIT_COUNTER)
  961.         CP      0
  962.         RET     NZ
  963.         LD      (IX+UNIT_DIRECTION),4
  964.         LD      (IX+UNIT_COUNTER),8
  965.         LD      A,(IX+UNIT_DIRECTION2)
  966.         CP      0
  967.         JP      NZ,KEYLFC
  968.         JP      KEYLF
  969.  
  970.  
  971.  
  972. KEYDFP2 LD              A,3
  973.                 CALL    YOMPA2P
  974.                 LD              A,(IX+UNIT_COUNTER)
  975.                 CP              0
  976.                 JP              NZ,KEYD3P
  977.                 LD      HL,(Keys2PlDn)          ;LD             HL,Keys2PlDn+2
  978.                 LD      B,H                                     ;LD             BC,(Keys2PlDn)
  979.                 LD      C,#FE                           ;CALL   CHBIT
  980.                 IN      A,(C)
  981.         AND     L
  982.                 JP              Z,KEYDF2P
  983.                 RET
  984.  
  985. KEYD3P  LD      (IX+UNIT_ANIMATION),1
  986.         LD      A,(IX+UNIT_COUNTER)
  987.         CP      8
  988.         JR      NZ,KEYQQP
  989.         CALL    MATEMAT
  990.         ;LD     BC,256
  991.         ;ADD    HL,BC
  992.          TILEMAPLINEDOWN
  993.         CALL    COUNT
  994. KEYQQP  LD      A,(IX+UNIT_DIRECTION)
  995.         CP      3
  996.         RET     NZ
  997.         LD      A,(IX+UNIT_SAND)
  998.         CP      28
  999.         CALL    Z,KRF3
  1000.         LD      A,(IX+UNIT_COUNTER)
  1001.         DEC     A
  1002.         LD      (IX+UNIT_COUNTER),A
  1003.         LD      E,(IX+UNIT_Y)
  1004.         LD      D,(IX+UNIT_Y+1)
  1005.         LD      A,E
  1006.         CP      MAXY;224
  1007.         RET     Z
  1008.         INC     DE
  1009.         LD      (IX+UNIT_Y),E
  1010.         LD      (IX+UNIT_Y+1),D
  1011.         POP     HL
  1012.         RET
  1013.  
  1014. KEYDF2P
  1015.         LD      A,(IX+UNIT_ICE)
  1016.         CP      26
  1017.         JP      Z,KRF22
  1018. PEYDF2A LD      A,(IX+UNIT_STOPBIT)
  1019.         CP      0
  1020.         JP      NZ,KQ1
  1021.         LD      A,(IX+UNIT_COUNTER)
  1022.         CP      0
  1023.         RET     NZ
  1024.         LD      (IX+UNIT_DIRECTION),3
  1025.         LD      (IX+UNIT_COUNTER),8
  1026.         JP      KEYDFP2
  1027. KEYUFP2 LD              A,1
  1028.                 CALL    YOMPA2P
  1029.                 LD              A,(IX+UNIT_COUNTER)
  1030.                 CP      0
  1031.                 JP              NZ,KEYF3P
  1032.                 LD      HL,(Keys2PlUp)          ;LD             HL,Keys2PlUp+2
  1033.                 LD      B,H                                     ;LD             BC,(Keys2PlUp)
  1034.                 LD      C,#FE                           ;CALL   CHBIT
  1035.                 IN      A,(C)
  1036.         AND     L
  1037.                 JP              Z,QEYUF2P
  1038.                 RET
  1039.  
  1040. KEYF3P
  1041.         LD      (IX+UNIT_ANIMATION),1
  1042.         LD      A,(IX+UNIT_COUNTER)
  1043.         CP      8
  1044.         JR      NZ,KEYQ1QP
  1045.         CALL    MATEMAT
  1046.         ;LD     DE,256
  1047.         ;SBC    HL,DE
  1048.          TILEMAPLINEUP
  1049.         CALL    COUNT
  1050. KEYQ1QP
  1051.         LD      A,(IX+UNIT_DIRECTION)
  1052.         CP      1
  1053.         RET     NZ
  1054.         LD      A,(IX+UNIT_SAND)
  1055.         CP      28
  1056.         CALL    Z,KRF3
  1057.         LD      A,(IX+UNIT_COUNTER)
  1058.         DEC     A
  1059.         LD      (IX+UNIT_COUNTER),A
  1060.         LD      E,(IX+UNIT_Y)
  1061.         LD      D,(IX+UNIT_Y+1)
  1062.         LD      A,E
  1063.         CP      0
  1064.         RET     Z
  1065.         DEC     DE
  1066.         LD      (IX+UNIT_Y),E
  1067.         LD      (IX+UNIT_Y+1),D
  1068.         POP     HL
  1069.         RET
  1070. QEYUF2P
  1071.         LD      A,(IX+UNIT_ICE)
  1072.         CP      26
  1073.         JP      Z,KRF22
  1074. PEYUF2A LD      A,(IX+UNIT_STOPBIT)
  1075.         CP      0
  1076.         JP      NZ,KQ1
  1077.         LD      (IX+UNIT_DIRECTION),1
  1078.         LD      (IX+UNIT_COUNTER),8
  1079.         JP      KEYUFP2
  1080. KEYRFP2 LD              A,2
  1081.                 CALL    COMPA2P
  1082.                 LD              A,(IX+UNIT_COUNTER)
  1083.                 CP              0
  1084.                 JP              NZ,KEYYR3P
  1085.                 LD      HL,(Keys2PlRt)          ;LD             HL,Keys2PlRt+2
  1086.                 LD      B,H                                     ;LD             BC,(Keys2PlRt)
  1087.                 LD      C,#FE                           ;CALL   CHBIT
  1088.                 IN      A,(C)
  1089.         AND     L
  1090.                 JP              Z,QEYRF2P
  1091.                 RET
  1092. KEYYR3P
  1093.         LD      (IX+UNIT_ANIMATION),1
  1094.         LD      A,(IX+UNIT_COUNTER)
  1095.         CP      8
  1096.         JR      NZ,KEQQPP
  1097.         CALL    MATEMAT
  1098.         ;INC    HL
  1099.         ;INC    HL
  1100.          TILEMAPRIGHT
  1101.         CALL    COUNT
  1102. KEQQPP  LD      A,(IX+UNIT_DIRECTION)
  1103.         CP      2
  1104.         RET     NZ
  1105.         LD      A,(IX+UNIT_SAND)
  1106.         CP      28
  1107.         CALL    Z,KRF3
  1108.         LD      A,(IX+UNIT_COUNTER)
  1109.         DEC     A
  1110.         LD      (IX+UNIT_COUNTER),A
  1111.         LD      E,(IX+UNIT_X)
  1112.         LD      D,(IX+UNIT_X+1)
  1113.         LD      A,D
  1114.         CP      1
  1115.         CALL    Z,KEYFCH
  1116.         INC     DE
  1117.         LD      (IX+UNIT_X),E
  1118.         LD      (IX+UNIT_X+1),D
  1119.         POP     HL
  1120.         RET
  1121. QEYRF2P
  1122.  
  1123.         LD      A,(IX+UNIT_ICE)
  1124.         CP      26
  1125.         JP      Z,KRF22
  1126. PEYRF2A LD      A,(IX+UNIT_STOPBIT)
  1127.         CP      0
  1128.         JP      NZ,KQ1
  1129.         LD      (IX+UNIT_DIRECTION),2
  1130.         LD      (IX+UNIT_COUNTER),8
  1131.         JP      KEYRFP2
  1132. KEYLFP2 LD              A,4
  1133.                 CALL    COMPA2P
  1134.                 LD              A,(IX+UNIT_COUNTER)
  1135.                 AND             A
  1136.                 JP              NZ,KEYLL3P
  1137.                 LD      HL,(Keys2PlLt)          ;LD             HL,Keys2PlLt+2
  1138.                 LD      B,H                                     ;LD             BC,(Keys2PlLt)
  1139.                 LD      C,#FE                           ;CALL   CHBIT
  1140.                 IN      A,(C)
  1141.         AND     L
  1142.                 JP              Z,QEYLF2P
  1143.                 RET
  1144.  
  1145. KEYLL3P
  1146.         LD      (IX+UNIT_ANIMATION),1
  1147.         LD      A,(IX+UNIT_COUNTER)
  1148.         CP      8
  1149.         JR      NZ,LLKK
  1150.         CALL    MATEMAT
  1151.         ;DEC    HL
  1152.         ;DEC    HL
  1153.          TILEMAPLEFT
  1154.         CALL    COUNT
  1155. LLKK    LD      A,(IX+UNIT_DIRECTION)
  1156.         CP      4
  1157.         RET     NZ
  1158.         LD      A,(IX+UNIT_SAND)
  1159.         CP      28
  1160.         CALL    Z,KRF3
  1161.         LD      A,(IX+UNIT_COUNTER)
  1162.         DEC     A
  1163.         LD      (IX+UNIT_COUNTER),A
  1164.         LD      E,(IX+UNIT_X)
  1165.         LD      D,(IX+UNIT_X+1)
  1166.         LD      A,D
  1167.         CP      0
  1168.         CALL    Z,KEYFCH
  1169.         DEC     DE
  1170.         LD      (IX+UNIT_X),E
  1171.         LD      (IX+UNIT_X+1),D
  1172.         POP     HL
  1173.         RET
  1174. QEYLF2P
  1175.         LD      A,(IX+UNIT_ICE)
  1176.         CP      26
  1177.         JP      Z,KRF22
  1178. PEYLF2A LD      A,(IX+UNIT_STOPBIT)
  1179.         CP      0
  1180.         JP      NZ,KQ1
  1181.         LD      (IX+UNIT_DIRECTION),4
  1182.         LD      (IX+UNIT_COUNTER),8
  1183.         JP      KEYLFP2
  1184.