Subversion Repositories NedoOS

Rev

Rev 891 | 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.                 IFNDEF  KEMPSTONE_HACK          ;Replace 1st player's control to Kempston joystick
  475.                 LD      HL,(Keys1PlDn)          ;LD             HL,Keys1PlDn+2
  476.                 LD      B,H                                     ;LD             BC,(Keys1PlDn)
  477.                 LD      C,#FE                           ;CALL   CHBIT
  478.                 IN      A,(C)
  479.         AND     L
  480.                 JP      Z,KEYDF22
  481.                 ELSE
  482.                 IN              A,(#1F) ;??? TODO use OS
  483.                 AND             %00000100
  484.                 JP              NZ,KEYDF22
  485.                 ENDIF
  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.                 IFNDEF  KEMPSTONE_HACK          ;Replace 1st player's control to Kempston joystick
  567.                 LD      HL,(Keys1PlUp)          ;LD             HL,Keys1PlUp+2
  568.                 LD      B,H                                     ;LD             BC,(Keys1PlUp)
  569.                 LD      C,#FE                           ;CALL   CHBIT
  570.                 IN      A,(C)
  571.         AND     L
  572.                 JP      Z,KEYUF22
  573.                 ELSE
  574.                 IN              A,(#1F) ;??? TODO use OS
  575.                 AND             %00001000
  576.                 JP              NZ,KEYUF22
  577.                 ENDIF
  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.                 IFNDEF  KEMPSTONE_HACK          ;Replace 1st player's control to Kempston joystick
  780.                 LD      HL,(Keys1PlRt)          ;LD             HL,Keys1PlRt+2
  781.                 LD      B,H                                     ;LD             BC,(Keys1PlRt)
  782.                 LD      C,#FE                           ;CALL   CHBIT
  783.                 IN      A,(C)
  784.         AND     L
  785.                 JP      Z,KEYRF22
  786.                 ELSE
  787.                 IN              A,(#1F) ;??? TODO use OS
  788.                 AND             %00000001
  789.                 JP              NZ,KEYRF22
  790.                 ENDIF
  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. KEYLF   LD              A,4
  889.                 CALL    COMPA1P
  890.                 LD              A,(IX+UNIT_COUNTER)
  891.                 CP              0
  892.                 JP              NZ,KEYLL3
  893.                 IFNDEF  KEMPSTONE_HACK          ;Replace 1st player's control to Kempston joystick
  894.                 LD      HL,(Keys1PlLt)          ;LD             HL,Keys1PlLt+2
  895.                 LD      B,H                                     ;LD             BC,(Keys1PlLt)
  896.                 LD      C,#FE                           ;CALL   CHBIT
  897.                 IN      A,(C)
  898.         AND     L
  899.                 JP      Z,KEYLF22
  900.                 ELSE
  901.                 IN              A,(#1F) ;??? TODO use OS
  902.                 AND             %00000010
  903.                 JP              NZ,KEYLF22
  904.                 ENDIF
  905.                 XOR             A
  906.                 LD              (RAZF2),A
  907.                 RET
  908. KEYLF22 LD              A,(RAZF2)
  909.                 CP              2                                       ;MOVE_PAUSE             ;Pause for change move direction
  910.                 JP              NC,KEYLF2
  911.                 LD              A,(RAZF2)
  912.                 INC             A
  913.                 LD              (RAZF2),A
  914.                 LD              A,4
  915.                 LD              (IX+UNIT_DIRECTION),A
  916.                 RET
  917. RAZF2   DEFB    0
  918.  
  919.  
  920.  
  921. KEYLL3
  922.         LD      (IX+UNIT_ANIMATION),1
  923.         LD      A,(IX+UNIT_COUNTER)
  924.         CP      8
  925.         JR      NZ,KEYYY
  926.         CALL    MATEMAT
  927.         ;DEC    HL
  928.         ;DEC    HL
  929.          TILEMAPLEFT
  930.         CALL    COUNT
  931. KEYYY   LD      A,(IX+UNIT_DIRECTION)
  932.         CP      4
  933.         RET     NZ
  934.         LD      A,(IX+UNIT_SAND)
  935.         CP      28
  936.         CALL    Z,KRF3
  937.         LD      A,(IX+UNIT_COUNTER)
  938.         DEC     A
  939.         LD      (IX+UNIT_COUNTER),A
  940.         LD      E,(IX+UNIT_X)
  941.         LD      D,(IX+UNIT_X+1)
  942.         LD      A,D
  943.         CP      0
  944.         CALL    Z,KEYFCH
  945.         DEC     DE
  946.         LD      (IX+UNIT_X),E
  947.         LD      (IX+UNIT_X+1),D
  948.         POP     HL
  949.         RET
  950. KEYLF2  LD      A,(IX+UNIT_BITPARENTSBULL)
  951.         CP      3
  952.         JR      NC,KEYLF2A
  953.         LD      A,(IX+UNIT_ICE)
  954.         CP      26
  955.         JP      Z,KRF2
  956. KEYLF2A LD      A,(IX+UNIT_STOPBIT)
  957.         CP      0
  958.         JP      NZ,KQ1
  959.         LD      A,(IX+UNIT_COUNTER)
  960.         CP      0
  961.         RET     NZ
  962.         LD      (IX+UNIT_DIRECTION),4
  963.         LD      (IX+UNIT_COUNTER),8
  964.         LD      A,(IX+UNIT_DIRECTION2)
  965.         CP      0
  966.         JP      NZ,KEYLFC
  967.         JP      KEYLF
  968.  
  969.  
  970.  
  971. KEYDFP2 LD              A,3
  972.                 CALL    YOMPA2P
  973.                 LD              A,(IX+UNIT_COUNTER)
  974.                 CP              0
  975.                 JP              NZ,KEYD3P
  976.                 LD      HL,(Keys2PlDn)          ;LD             HL,Keys2PlDn+2
  977.                 LD      B,H                                     ;LD             BC,(Keys2PlDn)
  978.                 LD      C,#FE                           ;CALL   CHBIT
  979.                 IN      A,(C)
  980.         AND     L
  981.                 JP              Z,KEYDF2P
  982.                 RET
  983.  
  984. KEYD3P  LD      (IX+UNIT_ANIMATION),1
  985.         LD      A,(IX+UNIT_COUNTER)
  986.         CP      8
  987.         JR      NZ,KEYQQP
  988.         CALL    MATEMAT
  989.         ;LD     BC,256
  990.         ;ADD    HL,BC
  991.          TILEMAPLINEDOWN
  992.         CALL    COUNT
  993. KEYQQP  LD      A,(IX+UNIT_DIRECTION)
  994.         CP      3
  995.         RET     NZ
  996.         LD      A,(IX+UNIT_SAND)
  997.         CP      28
  998.         CALL    Z,KRF3
  999.         LD      A,(IX+UNIT_COUNTER)
  1000.         DEC     A
  1001.         LD      (IX+UNIT_COUNTER),A
  1002.         LD      E,(IX+UNIT_Y)
  1003.         LD      D,(IX+UNIT_Y+1)
  1004.         LD      A,E
  1005.         CP      MAXY;224
  1006.         RET     Z
  1007.         INC     DE
  1008.         LD      (IX+UNIT_Y),E
  1009.         LD      (IX+UNIT_Y+1),D
  1010.         POP     HL
  1011.         RET
  1012.  
  1013. KEYDF2P
  1014.         LD      A,(IX+UNIT_ICE)
  1015.         CP      26
  1016.         JP      Z,KRF22
  1017. PEYDF2A LD      A,(IX+UNIT_STOPBIT)
  1018.         CP      0
  1019.         JP      NZ,KQ1
  1020.         LD      A,(IX+UNIT_COUNTER)
  1021.         CP      0
  1022.         RET     NZ
  1023.         LD      (IX+UNIT_DIRECTION),3
  1024.         LD      (IX+UNIT_COUNTER),8
  1025.         JP      KEYDFP2
  1026. KEYUFP2 LD              A,1
  1027.                 CALL    YOMPA2P
  1028.                 LD              A,(IX+UNIT_COUNTER)
  1029.                 CP      0
  1030.                 JP              NZ,KEYF3P
  1031.                 LD      HL,(Keys2PlUp)          ;LD             HL,Keys2PlUp+2
  1032.                 LD      B,H                                     ;LD             BC,(Keys2PlUp)
  1033.                 LD      C,#FE                           ;CALL   CHBIT
  1034.                 IN      A,(C)
  1035.         AND     L
  1036.                 JP              Z,QEYUF2P
  1037.                 RET
  1038.  
  1039. KEYF3P
  1040.         LD      (IX+UNIT_ANIMATION),1
  1041.         LD      A,(IX+UNIT_COUNTER)
  1042.         CP      8
  1043.         JR      NZ,KEYQ1QP
  1044.         CALL    MATEMAT
  1045.         ;LD     DE,256
  1046.         ;SBC    HL,DE
  1047.          TILEMAPLINEUP
  1048.         CALL    COUNT
  1049. KEYQ1QP
  1050.         LD      A,(IX+UNIT_DIRECTION)
  1051.         CP      1
  1052.         RET     NZ
  1053.         LD      A,(IX+UNIT_SAND)
  1054.         CP      28
  1055.         CALL    Z,KRF3
  1056.         LD      A,(IX+UNIT_COUNTER)
  1057.         DEC     A
  1058.         LD      (IX+UNIT_COUNTER),A
  1059.         LD      E,(IX+UNIT_Y)
  1060.         LD      D,(IX+UNIT_Y+1)
  1061.         LD      A,E
  1062.         CP      0
  1063.         RET     Z
  1064.         DEC     DE
  1065.         LD      (IX+UNIT_Y),E
  1066.         LD      (IX+UNIT_Y+1),D
  1067.         POP     HL
  1068.         RET
  1069. QEYUF2P
  1070.         LD      A,(IX+UNIT_ICE)
  1071.         CP      26
  1072.         JP      Z,KRF22
  1073. PEYUF2A LD      A,(IX+UNIT_STOPBIT)
  1074.         CP      0
  1075.         JP      NZ,KQ1
  1076.         LD      (IX+UNIT_DIRECTION),1
  1077.         LD      (IX+UNIT_COUNTER),8
  1078.         JP      KEYUFP2
  1079. KEYRFP2 LD              A,2
  1080.                 CALL    COMPA2P
  1081.                 LD              A,(IX+UNIT_COUNTER)
  1082.                 CP              0
  1083.                 JP              NZ,KEYYR3P
  1084.                 LD      HL,(Keys2PlRt)          ;LD             HL,Keys2PlRt+2
  1085.                 LD      B,H                                     ;LD             BC,(Keys2PlRt)
  1086.                 LD      C,#FE                           ;CALL   CHBIT
  1087.                 IN      A,(C)
  1088.         AND     L
  1089.                 JP              Z,QEYRF2P
  1090.                 RET
  1091. KEYYR3P
  1092.         LD      (IX+UNIT_ANIMATION),1
  1093.         LD      A,(IX+UNIT_COUNTER)
  1094.         CP      8
  1095.         JR      NZ,KEQQPP
  1096.         CALL    MATEMAT
  1097.         ;INC    HL
  1098.         ;INC    HL
  1099.          TILEMAPRIGHT
  1100.         CALL    COUNT
  1101. KEQQPP  LD      A,(IX+UNIT_DIRECTION)
  1102.         CP      2
  1103.         RET     NZ
  1104.         LD      A,(IX+UNIT_SAND)
  1105.         CP      28
  1106.         CALL    Z,KRF3
  1107.         LD      A,(IX+UNIT_COUNTER)
  1108.         DEC     A
  1109.         LD      (IX+UNIT_COUNTER),A
  1110.         LD      E,(IX+UNIT_X)
  1111.         LD      D,(IX+UNIT_X+1)
  1112.         LD      A,D
  1113.         CP      1
  1114.         CALL    Z,KEYFCH
  1115.         INC     DE
  1116.         LD      (IX+UNIT_X),E
  1117.         LD      (IX+UNIT_X+1),D
  1118.         POP     HL
  1119.         RET
  1120. QEYRF2P
  1121.  
  1122.         LD      A,(IX+UNIT_ICE)
  1123.         CP      26
  1124.         JP      Z,KRF22
  1125. PEYRF2A LD      A,(IX+UNIT_STOPBIT)
  1126.         CP      0
  1127.         JP      NZ,KQ1
  1128.         LD      (IX+UNIT_DIRECTION),2
  1129.         LD      (IX+UNIT_COUNTER),8
  1130.         JP      KEYRFP2
  1131. KEYLFP2 LD              A,4
  1132.                 CALL    COMPA2P
  1133.                 LD              A,(IX+UNIT_COUNTER)
  1134.                 AND             A
  1135.                 JP              NZ,KEYLL3P
  1136.                 LD      HL,(Keys2PlLt)          ;LD             HL,Keys2PlLt+2
  1137.                 LD      B,H                                     ;LD             BC,(Keys2PlLt)
  1138.                 LD      C,#FE                           ;CALL   CHBIT
  1139.                 IN      A,(C)
  1140.         AND     L
  1141.                 JP              Z,QEYLF2P
  1142.                 RET
  1143.  
  1144. KEYLL3P
  1145.         LD      (IX+UNIT_ANIMATION),1
  1146.         LD      A,(IX+UNIT_COUNTER)
  1147.         CP      8
  1148.         JR      NZ,LLKK
  1149.         CALL    MATEMAT
  1150.         ;DEC    HL
  1151.         ;DEC    HL
  1152.          TILEMAPLEFT
  1153.         CALL    COUNT
  1154. LLKK    LD      A,(IX+UNIT_DIRECTION)
  1155.         CP      4
  1156.         RET     NZ
  1157.         LD      A,(IX+UNIT_SAND)
  1158.         CP      28
  1159.         CALL    Z,KRF3
  1160.         LD      A,(IX+UNIT_COUNTER)
  1161.         DEC     A
  1162.         LD      (IX+UNIT_COUNTER),A
  1163.         LD      E,(IX+UNIT_X)
  1164.         LD      D,(IX+UNIT_X+1)
  1165.         LD      A,D
  1166.         CP      0
  1167.         CALL    Z,KEYFCH
  1168.         DEC     DE
  1169.         LD      (IX+UNIT_X),E
  1170.         LD      (IX+UNIT_X+1),D
  1171.         POP     HL
  1172.         RET
  1173. QEYLF2P
  1174.         LD      A,(IX+UNIT_ICE)
  1175.         CP      26
  1176.         JP      Z,KRF22
  1177. PEYLF2A LD      A,(IX+UNIT_STOPBIT)
  1178.         CP      0
  1179.         JP      NZ,KQ1
  1180.         LD      (IX+UNIT_DIRECTION),4
  1181.         LD      (IX+UNIT_COUNTER),8
  1182.         JP      KEYLFP2
  1183.