?login_element?

Subversion Repositories NedoOS

Rev

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