?login_element?

Subversion Repositories NedoOS

Rev

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

  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.        if VIRTUALKEYS
  480.         ld a,(joy1state)
  481.         and JOYMASK_DOWN
  482.        else
  483.         LD      HL,(Keys1PlDn)          ;LD             HL,Keys1PlDn+2
  484.         LD      B,H                                     ;LD             BC,(Keys1PlDn)
  485.         LD      C,#FE                           ;CALL   CHBIT
  486.         IN      A,(C)
  487.         AND     L
  488.        endif
  489.         JP      Z,KEYDF22
  490. KEYDF_ok
  491.                 XOR             A
  492.                 LD              (RAZF4),A
  493.                 RET
  494. KEYDF22 LD              A,(RAZF4)
  495.                 CP              2                                       ;MOVE_PAUSE             ;Pause for change move direction
  496.                 JP              NC,KEYDF2
  497.                 LD              A,(RAZF4)
  498.                 INC             A
  499.                 LD              (RAZF4),A
  500.                 LD              A,3
  501.                 LD              (IX+UNIT_DIRECTION),A
  502.                 RET
  503.  
  504. KRF3    LD      A,(TANKP)
  505.         CP      0
  506.         RET     Z
  507.         CP      5
  508.         RET     Z
  509.         POP     HL
  510.         RET
  511. KEYD3   LD      (IX+UNIT_ANIMATION),1
  512.         LD      A,(IX+UNIT_COUNTER)
  513.         CP      8
  514.         JR      NZ,KEYQQ
  515.         CALL    MATEMAT
  516.         ;LD     BC,256
  517.         ;ADD    HL,BC
  518.          TILEMAPLINEDOWN
  519.         CALL    COUNT
  520.  
  521. KEYQQ   LD      A,(IX+UNIT_DIRECTION)
  522.         CP      3
  523.         RET     NZ
  524.         LD      A,(IX+UNIT_SAND)
  525.         CP      28
  526.         CALL    Z,KRF3
  527.         LD      A,(IX+UNIT_COUNTER)
  528.         DEC     A
  529.         LD      (IX+UNIT_COUNTER),A
  530.         LD      E,(IX+UNIT_Y)
  531.         LD      D,(IX+UNIT_Y+1)
  532.         LD      A,E
  533.         CP      MAXY;224
  534.         JP      Z,RNDD
  535.         INC     DE
  536.         LD      (IX+UNIT_Y),E
  537.         LD      (IX+UNIT_Y+1),D
  538.         POP     HL
  539.         RET
  540. RNDD
  541.         LD      (IX+UNIT_NEEDRND),1
  542.         LD      (IX+UNIT_COUNTER),0
  543.         RET
  544.  
  545. KEYDF2  LD      A,(IX+UNIT_BITPARENTSBULL)
  546.         CP      3
  547.         JR      NC,KEYDF2A
  548.         LD      A,(IX+UNIT_ICE)
  549.         CP      26
  550.         JP      Z,KRF2
  551. KEYDF2A LD      A,(IX+UNIT_STOPBIT)
  552.         CP      0
  553.         JP      NZ,KQ1
  554.         LD      A,(IX+UNIT_COUNTER)
  555.         CP      0
  556.         RET     NZ
  557.         LD      (IX+UNIT_DIRECTION),3
  558.         LD      (IX+UNIT_COUNTER),8
  559.         LD      A,(IX+UNIT_DIRECTION2)
  560.         CP      0
  561.         JP      NZ,KEYDFC
  562.         JP      KEYDF
  563.  
  564.  
  565. KEYUF   LD              A,1
  566.                 CALL    YOMPA1P
  567.                 LD              A,(IX+UNIT_COUNTER)
  568.                 CP              0
  569.                 JP              NZ,KEYF3
  570.         IF KEMPSTON             ;Replace 1st player's control to Kempston joystick
  571.         ld a,(kempstonbuttons) ;IN      A,(#1F)
  572.         AND     %00001000
  573.         JP      NZ,KEYUF22
  574.         ENDIF
  575.        if VIRTUALKEYS
  576.         ld a,(joy1state)
  577.         and JOYMASK_UP
  578.        else
  579.         LD      HL,(Keys1PlUp)          ;LD             HL,Keys1PlUp+2
  580.         LD      B,H                                     ;LD             BC,(Keys1PlUp)
  581.         LD      C,#FE                           ;CALL   CHBIT
  582.         IN      A,(C)
  583.         AND     L
  584.        endif
  585.         JP      Z,KEYUF22
  586. KEYUF_ok
  587.                 XOR             A
  588.                 LD              (RAZF3),A
  589.                 RET
  590. KEYUF22 LD              A,(RAZF3)
  591.                 CP              2                                       ;MOVE_PAUSE             ;Pause for change move direction
  592.                 JP              NC,KEYUF2
  593.                 LD              A,(RAZF3)
  594.                 INC             A
  595.                 LD              (RAZF3),A
  596.                 LD              A,1
  597.                 LD              (IX+UNIT_DIRECTION),A
  598.                 RET
  599.  
  600. KEYF3
  601.         LD      (IX+UNIT_ANIMATION),1
  602.         LD      A,(IX+UNIT_COUNTER)
  603.         CP      8
  604.         JR      NZ,KEYQ1Q
  605.         CALL    MATEMAT
  606.         ;LD     BC,256
  607.         ;SBC    HL,BC
  608.          TILEMAPLINEUP
  609.         CALL    COUNT
  610. KEYQ1Q
  611.         LD      A,(IX+UNIT_DIRECTION)
  612.         CP      1
  613.         RET     NZ
  614.         LD      A,(IX+UNIT_SAND)
  615.         CP      28
  616.         CALL    Z,KRF3
  617.         LD      A,(IX+UNIT_COUNTER)
  618.         DEC     A
  619.         LD      (IX+UNIT_COUNTER),A
  620.         LD      E,(IX+UNIT_Y)
  621.         LD      D,(IX+UNIT_Y+1)
  622.         LD      A,E
  623.         CP      0
  624.         JP      Z,RNDD
  625.         DEC     DE
  626.         LD      (IX+UNIT_Y),E
  627.         LD      (IX+UNIT_Y+1),D
  628.         POP     HL
  629.         RET
  630. KEYUF2  LD      A,(IX+UNIT_BITPARENTSBULL)
  631.         CP      3
  632.         JR      NC,KEYUF2A
  633.         LD      A,(IX+UNIT_ICE)
  634.         CP      26
  635.         JP      Z,KRF2
  636. KEYUF2A LD      A,(IX+UNIT_STOPBIT)
  637.         CP      0
  638.         JP      NZ,KQ1
  639.         LD      A,(IX+UNIT_COUNTER)
  640.         CP      0
  641.         RET     NZ
  642.         LD      (IX+UNIT_DIRECTION),1
  643.         LD      (IX+UNIT_COUNTER),8
  644.         LD      A,(IX+UNIT_DIRECTION2)
  645.         CP      0
  646.         JP      NZ,KEYUFC
  647.         JP      KEYUF
  648.  
  649.  
  650. COUNT
  651.         LD      A,(HL) ;wall tile
  652.         CP      2 ;brick
  653.         JP      Z,C1
  654.         CP      12 ;beton
  655.         JP      Z,C1
  656.         LD      A,(IX+UNIT_WATERWAY)
  657.         CP      1
  658.         JR      Z,CO1
  659.         LD      A,(HL)
  660.         CP 22 ;water
  661.         jp z,C1
  662.          sub WATERANIMTILE
  663.          cp NWATERANIMTILES
  664.          jp c,C1
  665. CO1     LD      A,(HL)
  666.         ;CP     38 ;brick broken from bottom
  667.         ;JP     Z,C1
  668.         ;CP     36 ;brick broken from top
  669.         ;JP     Z,C1
  670.         ;CP     35 ;brick broken from left
  671.         ;JP     Z,C1
  672.         ;CP     37 ;brick broken from right
  673.         ;JP     Z,C1
  674.         ;CP     30 ;eagle top-left
  675.         ;JP     Z,C1
  676.         ;CP     31 ;eagle top-right
  677.         ;JP     Z,C1
  678.         ;CP     94 ;eagle bottom-left
  679.         ;JP     Z,C1
  680.         ;CP     95 ;eagle bottom-right
  681.         ;JP     Z,C1
  682.        sub 35
  683.        cp 4
  684.        jp c,C1
  685.        sub 30-35
  686.        cp 2
  687.        jp c,C1
  688.        sub 94-30
  689.        cp 2
  690.        jp c,C1
  691.         ;INC    HL
  692.         ;INC    HL
  693.          TILEMAPRIGHT
  694.         LD      A,(HL)
  695.         CP      2
  696.         jp Z,C1
  697.         CP      12
  698.         jp Z,C1
  699.         LD      A,(IX+UNIT_WATERWAY)
  700.         CP      1
  701.         JR      Z,CO2
  702.         LD      A,(HL)
  703.         CP 22 ;water
  704.         jr z,C1
  705.          sub WATERANIMTILE
  706.          cp NWATERANIMTILES
  707.          jr c,C1
  708. CO2     LD      A,(HL)
  709.        sub 35
  710.        cp 4
  711.        jr c,C1
  712.        sub 30-35
  713.        cp 2
  714.        jr c,C1
  715.        sub 94-30
  716.        cp 2
  717.        jr c,C1
  718.  
  719.         ;LD     BC,254
  720.         ;ADD    HL,BC
  721.          TILEMAPLEFTLINEDOWN
  722.         LD      A,(HL)
  723.         CP      2
  724.         jr Z,C1
  725.         CP      12
  726.         jr Z,C1
  727.         LD      A,(IX+UNIT_WATERWAY)
  728.         CP      1
  729.         JR      Z,CO3
  730.         LD      A,(HL)
  731.         CP 22 ;water
  732.         jr z,C1
  733.          sub WATERANIMTILE
  734.          cp NWATERANIMTILES
  735.          jr c,C1
  736. CO3     LD      A,(HL)
  737.        sub 35
  738.        cp 4
  739.        jr c,C1
  740.        sub 30-35
  741.        cp 2
  742.        jr c,C1
  743.        sub 94-30
  744.        cp 2
  745.        jr c,C1
  746.  
  747.         ;INC    HL
  748.         ;INC    HL
  749.          TILEMAPRIGHT
  750.         LD      A,(HL)
  751.         CP      2
  752.         JR      Z,C1
  753.         CP      12
  754.         JR      Z,C1
  755.         LD      A,(IX+UNIT_WATERWAY)
  756.         CP      1
  757.         JR      Z,CO4
  758.         LD      A,(HL)
  759.         CP 22 ;water
  760.         jr z,C1
  761.          sub WATERANIMTILE
  762.          cp NWATERANIMTILES
  763.          jr c,C1
  764. CO4     LD      A,(HL)
  765.        sub 35
  766.        cp 4
  767.        jr c,C1
  768.        sub 30-35
  769.        cp 2
  770.        jr c,C1
  771.        sub 94-30
  772.        cp 2
  773.        ;jr c,C1
  774.         RET nz
  775. C1      POP     HL
  776.         LD      (IX+UNIT_NEEDRND),1
  777.         LD      (IX+UNIT_COUNTER),0
  778.         RET
  779.  
  780.  
  781.  
  782. KEYRF   LD              A,2
  783.                 CALL    COMPA1P
  784.                 LD              A,(IX+UNIT_COUNTER)
  785.                 CP              0
  786.                 JP              NZ,KEYYR3
  787.         IF KEMPSTON             ;Replace 1st player's control to Kempston joystick
  788.         ld a,(kempstonbuttons) ;IN      A,(#1F)
  789.         AND     %00000001
  790.         JP      NZ,KEYRF22
  791.         ENDIF
  792.        if VIRTUALKEYS
  793.         ld a,(joy1state)
  794.         and JOYMASK_RIGHT
  795.        else
  796.         LD      HL,(Keys1PlRt)          ;LD             HL,Keys1PlRt+2
  797.         LD      B,H                                     ;LD             BC,(Keys1PlRt)
  798.         LD      C,#FE                           ;CALL   CHBIT
  799.         IN      A,(C)
  800.         AND     L
  801.        endif
  802.         JP      Z,KEYRF22
  803. KEYRF_ok
  804.                 XOR             A
  805.                 LD              (RAZF),A
  806.                 RET
  807. KEYRF22 LD              A,(RAZF)
  808.                 CP              2                                       ;MOVE_PAUSE             ;Pause for change move direction
  809.                 JP              NC,KEYRF2
  810.                 LD              A,(RAZF)
  811.                 INC             A
  812.                 LD              (RAZF),A
  813.                 LD              A,2
  814.                 LD              (IX+UNIT_DIRECTION),A
  815.                 RET
  816.  
  817. KQ1     LD      HL,Keys1PlRt+2
  818.         LD      A,(COMA)
  819.         LD      (IX+UNIT_DIRECTION),A
  820.         LD      (IX+UNIT_ANIMATION),1
  821.         RET
  822. KEYYR3
  823.         LD      (IX+UNIT_ANIMATION),1
  824.         LD      A,(IX+UNIT_COUNTER)
  825.         CP      8
  826.         JR      NZ,KEYQQ1
  827.         CALL    MATEMAT
  828.         ;INC    HL
  829.         ;INC    HL
  830.          TILEMAPRIGHT
  831.         CALL    COUNT
  832. KEYQQ1  LD      A,(IX+UNIT_DIRECTION)
  833.         CP      2
  834.         RET     NZ
  835.         LD      A,(IX+UNIT_SAND)
  836.         CP      28
  837.         CALL    Z,KRF3
  838.         LD      A,(IX+UNIT_COUNTER)
  839.         DEC     A
  840.         LD      (IX+UNIT_COUNTER),A
  841.         LD      E,(IX+UNIT_X)
  842.         LD      D,(IX+UNIT_X+1)
  843.         LD      A,D
  844.         CP      1
  845.         CALL    Z,KEYFCH
  846.         INC     DE
  847.         LD      (IX+UNIT_X),E
  848.         LD      (IX+UNIT_X+1),D
  849.         POP     HL
  850.         RET
  851. KRF22
  852.         LD      A,(IX+UNIT_DIRECTION)
  853.         CP      1
  854.         JP      Z,PEYUF2A
  855.         CP      2
  856.         JP      Z,PEYRF2A
  857.         CP      3
  858.         JP      Z,PEYDF2A
  859.         CP      4
  860.         JP      Z,PEYLF2A
  861.         RET
  862. KRF2
  863.         LD      A,(IX+UNIT_DIRECTION)
  864.         CP      1
  865.         JP      Z,KEYUF2A
  866.         CP      2
  867.         JP      Z,KEYRF2A
  868.         CP      3
  869.         JP      Z,KEYDF2A
  870.         CP      4
  871.         JP      Z,KEYLF2A
  872.         RET
  873.         LD      A,(IX+UNIT_ICE)
  874.         CP      26
  875.         JP      Z,KRF22
  876. KEYRF2  LD      A,(IX+UNIT_BITPARENTSBULL)
  877.         CP      3
  878.         JR      NC,KEYRF2A
  879.         LD      A,(IX+UNIT_ICE)
  880.         CP      26
  881.         JP      Z,KRF2
  882. KEYRF2A LD      A,(IX+UNIT_STOPBIT)
  883.         CP      0
  884.         JP      NZ,KQ1
  885.         LD      A,(IX+UNIT_COUNTER)
  886.         CP      0
  887.         RET     NZ
  888.         LD      (IX+UNIT_DIRECTION),2
  889.         LD      (IX+UNIT_COUNTER),8
  890.         LD      A,(IX+UNIT_DIRECTION2)
  891.         CP      0
  892.         JP      NZ,KEYRFC
  893.         JP      KEYRF
  894. KEYFCH
  895.         LD      A,E
  896.         CP      0
  897.         RET     NZ
  898.         CALL    RNDD
  899.         POP     HL
  900.         RET
  901.  
  902. KEYLF   LD              A,4
  903.                 CALL    COMPA1P
  904.                 LD              A,(IX+UNIT_COUNTER)
  905.                 CP              0
  906.                 JP              NZ,KEYLL3
  907.         IF KEMPSTON             ;Replace 1st player's control to Kempston joystick
  908.         ld a,(kempstonbuttons) ;IN      A,(#1F)
  909.         AND     %00000010
  910.         JP      NZ,KEYLF22
  911.         ENDIF
  912.        if VIRTUALKEYS
  913.         ld a,(joy1state)
  914.         and JOYMASK_LEFT
  915.        else
  916.         LD      HL,(Keys1PlLt)          ;LD             HL,Keys1PlLt+2
  917.         LD      B,H                                     ;LD             BC,(Keys1PlLt)
  918.         LD      C,#FE                           ;CALL   CHBIT
  919.         IN      A,(C)
  920.         AND     L
  921.        endif
  922.         JP      Z,KEYLF22
  923. KEYLF_ok
  924.                 XOR             A
  925.                 LD              (RAZF2),A
  926.                 RET
  927. KEYLF22 LD              A,(RAZF2)
  928.                 CP              2                                       ;MOVE_PAUSE             ;Pause for change move direction
  929.                 JP              NC,KEYLF2
  930.                 LD              A,(RAZF2)
  931.                 INC             A
  932.                 LD              (RAZF2),A
  933.                 LD              A,4
  934.                 LD              (IX+UNIT_DIRECTION),A
  935.                 RET
  936.  
  937. KEYLL3
  938.         LD      (IX+UNIT_ANIMATION),1
  939.         LD      A,(IX+UNIT_COUNTER)
  940.         CP      8
  941.         JR      NZ,KEYYY
  942.         CALL    MATEMAT
  943.         ;DEC    HL
  944.         ;DEC    HL
  945.          TILEMAPLEFT
  946.         CALL    COUNT
  947. KEYYY   LD      A,(IX+UNIT_DIRECTION)
  948.         CP      4
  949.         RET     NZ
  950.         LD      A,(IX+UNIT_SAND)
  951.         CP      28
  952.         CALL    Z,KRF3
  953.         LD      A,(IX+UNIT_COUNTER)
  954.         DEC     A
  955.         LD      (IX+UNIT_COUNTER),A
  956.         LD      E,(IX+UNIT_X)
  957.         LD      D,(IX+UNIT_X+1)
  958.         LD      A,D
  959.         CP      0
  960.         CALL    Z,KEYFCH
  961.         DEC     DE
  962.         LD      (IX+UNIT_X),E
  963.         LD      (IX+UNIT_X+1),D
  964.         POP     HL
  965.         RET
  966. KEYLF2  LD      A,(IX+UNIT_BITPARENTSBULL)
  967.         CP      3
  968.         JR      NC,KEYLF2A
  969.         LD      A,(IX+UNIT_ICE)
  970.         CP      26
  971.         JP      Z,KRF2
  972. KEYLF2A LD      A,(IX+UNIT_STOPBIT)
  973.         CP      0
  974.         JP      NZ,KQ1
  975.         LD      A,(IX+UNIT_COUNTER)
  976.         CP      0
  977.         RET     NZ
  978.         LD      (IX+UNIT_DIRECTION),4
  979.         LD      (IX+UNIT_COUNTER),8
  980.         LD      A,(IX+UNIT_DIRECTION2)
  981.         CP      0
  982.         JP      NZ,KEYLFC
  983.         JP      KEYLF
  984.  
  985.  
  986.  
  987. KEYDFP2 LD              A,3
  988.         CALL    YOMPA2P
  989.         LD              A,(IX+UNIT_COUNTER)
  990.         CP              0
  991.         JP              NZ,KEYD3P
  992.        if VIRTUALKEYS
  993.         ld a,(joy2state)
  994.         and JOYMASK_DOWN
  995.        else
  996.         LD      HL,(Keys2PlDn)          ;LD             HL,Keys2PlDn+2
  997.         LD      B,H                                     ;LD             BC,(Keys2PlDn)
  998.         LD      C,#FE                           ;CALL   CHBIT
  999.         IN      A,(C)
  1000.         AND     L
  1001.        endif
  1002.         JP              Z,KEYDF2P
  1003.         RET
  1004.  
  1005. KEYD3P  LD      (IX+UNIT_ANIMATION),1
  1006.         LD      A,(IX+UNIT_COUNTER)
  1007.         CP      8
  1008.         JR      NZ,KEYQQP
  1009.         CALL    MATEMAT
  1010.         ;LD     BC,256
  1011.         ;ADD    HL,BC
  1012.          TILEMAPLINEDOWN
  1013.         CALL    COUNT
  1014. KEYQQP  LD      A,(IX+UNIT_DIRECTION)
  1015.         CP      3
  1016.         RET     NZ
  1017.         LD      A,(IX+UNIT_SAND)
  1018.         CP      28
  1019.         CALL    Z,KRF3
  1020.         LD      A,(IX+UNIT_COUNTER)
  1021.         DEC     A
  1022.         LD      (IX+UNIT_COUNTER),A
  1023.         LD      E,(IX+UNIT_Y)
  1024.         LD      D,(IX+UNIT_Y+1)
  1025.         LD      A,E
  1026.         CP      MAXY;224
  1027.         RET     Z
  1028.         INC     DE
  1029.         LD      (IX+UNIT_Y),E
  1030.         LD      (IX+UNIT_Y+1),D
  1031.         POP     HL
  1032.         RET
  1033.  
  1034. KEYDF2P
  1035.         LD      A,(IX+UNIT_ICE)
  1036.         CP      26
  1037.         JP      Z,KRF22
  1038. PEYDF2A LD      A,(IX+UNIT_STOPBIT)
  1039.         CP      0
  1040.         JP      NZ,KQ1
  1041.         LD      A,(IX+UNIT_COUNTER)
  1042.         CP      0
  1043.         RET     NZ
  1044.         LD      (IX+UNIT_DIRECTION),3
  1045.         LD      (IX+UNIT_COUNTER),8
  1046.         JP      KEYDFP2
  1047. KEYUFP2 LD              A,1
  1048.         CALL    YOMPA2P
  1049.         LD              A,(IX+UNIT_COUNTER)
  1050.         CP      0
  1051.         JP              NZ,KEYF3P
  1052.        if VIRTUALKEYS
  1053.         ld a,(joy2state)
  1054.         and JOYMASK_UP
  1055.        else
  1056.         LD      HL,(Keys2PlUp)          ;LD             HL,Keys2PlUp+2
  1057.         LD      B,H                                     ;LD             BC,(Keys2PlUp)
  1058.         LD      C,#FE                           ;CALL   CHBIT
  1059.         IN      A,(C)
  1060.         AND     L
  1061.        endif
  1062.         JP              Z,QEYUF2P
  1063.         RET
  1064.  
  1065. KEYF3P
  1066.         LD      (IX+UNIT_ANIMATION),1
  1067.         LD      A,(IX+UNIT_COUNTER)
  1068.         CP      8
  1069.         JR      NZ,KEYQ1QP
  1070.         CALL    MATEMAT
  1071.         ;LD     DE,256
  1072.         ;SBC    HL,DE
  1073.          TILEMAPLINEUP
  1074.         CALL    COUNT
  1075. KEYQ1QP
  1076.         LD      A,(IX+UNIT_DIRECTION)
  1077.         CP      1
  1078.         RET     NZ
  1079.         LD      A,(IX+UNIT_SAND)
  1080.         CP      28
  1081.         CALL    Z,KRF3
  1082.         LD      A,(IX+UNIT_COUNTER)
  1083.         DEC     A
  1084.         LD      (IX+UNIT_COUNTER),A
  1085.         LD      E,(IX+UNIT_Y)
  1086.         LD      D,(IX+UNIT_Y+1)
  1087.         LD      A,E
  1088.         CP      0
  1089.         RET     Z
  1090.         DEC     DE
  1091.         LD      (IX+UNIT_Y),E
  1092.         LD      (IX+UNIT_Y+1),D
  1093.         POP     HL
  1094.         RET
  1095. QEYUF2P
  1096.         LD      A,(IX+UNIT_ICE)
  1097.         CP      26
  1098.         JP      Z,KRF22
  1099. PEYUF2A LD      A,(IX+UNIT_STOPBIT)
  1100.         CP      0
  1101.         JP      NZ,KQ1
  1102.         LD      (IX+UNIT_DIRECTION),1
  1103.         LD      (IX+UNIT_COUNTER),8
  1104.         JP      KEYUFP2
  1105. KEYRFP2 LD              A,2
  1106.         CALL    COMPA2P
  1107.         LD              A,(IX+UNIT_COUNTER)
  1108.         CP              0
  1109.         JP              NZ,KEYYR3P
  1110.        if VIRTUALKEYS
  1111.         ld a,(joy2state)
  1112.         and JOYMASK_RIGHT
  1113.        else
  1114.         LD      HL,(Keys2PlRt)          ;LD             HL,Keys2PlRt+2
  1115.         LD      B,H                                     ;LD             BC,(Keys2PlRt)
  1116.         LD      C,#FE                           ;CALL   CHBIT
  1117.         IN      A,(C)
  1118.         AND     L
  1119.        endif
  1120.         JP              Z,QEYRF2P
  1121.         RET
  1122. KEYYR3P
  1123.         LD      (IX+UNIT_ANIMATION),1
  1124.         LD      A,(IX+UNIT_COUNTER)
  1125.         CP      8
  1126.         JR      NZ,KEQQPP
  1127.         CALL    MATEMAT
  1128.         ;INC    HL
  1129.         ;INC    HL
  1130.          TILEMAPRIGHT
  1131.         CALL    COUNT
  1132. KEQQPP  LD      A,(IX+UNIT_DIRECTION)
  1133.         CP      2
  1134.         RET     NZ
  1135.         LD      A,(IX+UNIT_SAND)
  1136.         CP      28
  1137.         CALL    Z,KRF3
  1138.         LD      A,(IX+UNIT_COUNTER)
  1139.         DEC     A
  1140.         LD      (IX+UNIT_COUNTER),A
  1141.         LD      E,(IX+UNIT_X)
  1142.         LD      D,(IX+UNIT_X+1)
  1143.         LD      A,D
  1144.         CP      1
  1145.         CALL    Z,KEYFCH
  1146.         INC     DE
  1147.         LD      (IX+UNIT_X),E
  1148.         LD      (IX+UNIT_X+1),D
  1149.         POP     HL
  1150.         RET
  1151. QEYRF2P
  1152.  
  1153.         LD      A,(IX+UNIT_ICE)
  1154.         CP      26
  1155.         JP      Z,KRF22
  1156. PEYRF2A LD      A,(IX+UNIT_STOPBIT)
  1157.         CP      0
  1158.         JP      NZ,KQ1
  1159.         LD      (IX+UNIT_DIRECTION),2
  1160.         LD      (IX+UNIT_COUNTER),8
  1161.         JP      KEYRFP2
  1162. KEYLFP2 LD              A,4
  1163.         CALL    COMPA2P
  1164.         LD              A,(IX+UNIT_COUNTER)
  1165.         AND             A
  1166.         JP              NZ,KEYLL3P
  1167.        if VIRTUALKEYS
  1168.         ld a,(joy2state)
  1169.         and JOYMASK_LEFT
  1170.        else
  1171.         LD      HL,(Keys2PlLt)          ;LD             HL,Keys2PlLt+2
  1172.         LD      B,H                                     ;LD             BC,(Keys2PlLt)
  1173.         LD      C,#FE                           ;CALL   CHBIT
  1174.         IN      A,(C)
  1175.         AND     L
  1176.        endif
  1177.         JP              Z,QEYLF2P
  1178.         RET
  1179.  
  1180. KEYLL3P
  1181.         LD      (IX+UNIT_ANIMATION),1
  1182.         LD      A,(IX+UNIT_COUNTER)
  1183.         CP      8
  1184.         JR      NZ,LLKK
  1185.         CALL    MATEMAT
  1186.         ;DEC    HL
  1187.         ;DEC    HL
  1188.          TILEMAPLEFT
  1189.         CALL    COUNT
  1190. LLKK    LD      A,(IX+UNIT_DIRECTION)
  1191.         CP      4
  1192.         RET     NZ
  1193.         LD      A,(IX+UNIT_SAND)
  1194.         CP      28
  1195.         CALL    Z,KRF3
  1196.         LD      A,(IX+UNIT_COUNTER)
  1197.         DEC     A
  1198.         LD      (IX+UNIT_COUNTER),A
  1199.         LD      E,(IX+UNIT_X)
  1200.         LD      D,(IX+UNIT_X+1)
  1201.         LD      A,D
  1202.         CP      0
  1203.         CALL    Z,KEYFCH
  1204.         DEC     DE
  1205.         LD      (IX+UNIT_X),E
  1206.         LD      (IX+UNIT_X+1),D
  1207.         POP     HL
  1208.         RET
  1209. QEYLF2P
  1210.         LD      A,(IX+UNIT_ICE)
  1211.         CP      26
  1212.         JP      Z,KRF22
  1213. PEYLF2A LD      A,(IX+UNIT_STOPBIT)
  1214.         CP      0
  1215.         JP      NZ,KQ1
  1216.         LD      (IX+UNIT_DIRECTION),4
  1217.         LD      (IX+UNIT_COUNTER),8
  1218.         JP      KEYLFP2
  1219.