?login_element?

Subversion Repositories NedoOS

Rev

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

  1. tkeyangle=$-5
  2.               ;LRDU
  3.        ;DB -1 ;0000
  4.        ;DB 128;0001
  5.        ;DB 0  ;0010
  6.        ;DB -1 ;0011
  7.        ;DB 64 ;0100
  8.         DB 96 ;0101
  9.         DB 32 ;0110
  10.         DB 64 ;0111
  11.         DB 192;1000
  12.         DB 160;1001
  13.         DB 224;1010
  14.         DB 192;1011
  15.         DB -1 ;1100
  16.         DB 128;1101
  17.         DB 0  ;1110
  18.         DB -1 ;1111
  19. tkeyangleend
  20.  
  21. CONTROL
  22.        IF kempston
  23.         LD C,#FF
  24.         IN A,(#1F)
  25.         LD B,A
  26.         AND #E0
  27.         jr NZ,nKEMPSTON
  28.         LD A,B
  29.         RRA
  30.         jr NC,$+4
  31.         RES 1,C
  32.         RRA
  33.         jr NC,$+4
  34.         RES 0,C
  35.         RRA
  36.         jr NC,$+4
  37.         RES 3,C
  38.         RRA
  39.         jr NC,$+4
  40.         RES 2,C
  41.         RRA
  42.         jr NC,$+4
  43.         RES 6,C
  44. nKEMPSTON
  45. ;C=%1f11durl
  46.        ENDIF
  47.        IF autostrafe
  48.         BIT 3,C ;down
  49.         jr NZ,nAUTOSTRAFE
  50.         LD A,C
  51.         BIT 1,A
  52.         jr NZ,$+6
  53.         AND %01101111 ;strafe + rotate flag
  54.         OR %00001011 ;block down & rotate
  55.         BIT 0,A
  56.         jr NZ,$+6
  57.         AND %01011111 ;strafe + rotate flag
  58.         OR %00001011 ;block down & rotate
  59.         LD C,A
  60. nAUTOSTRAFE
  61.        ENDIF
  62.         LD B,#FF
  63.         LD A,#7D
  64.         IN A,(#FE)
  65.         RRA
  66.         RL B ;space (fire)
  67.         LD A,#FD
  68.         IN A,(#FE)
  69.         RRA
  70.         RL B ;A
  71.         RRA
  72.         RRA
  73.         RL B ;D
  74.         RLA
  75.         RL B ;S (down)
  76.         LD A,#FB
  77.         IN A,(#FE)
  78.         RRA
  79.         RRA
  80.         RL B ;W (up)
  81.         LD A,#DF
  82.         IN A,(#FE)
  83.         RRA
  84.         RL B ;P (right)
  85.         RRA
  86.         LD A,B
  87.         RLA ;O (left)
  88.        IF kempston
  89.         AND C
  90.        ENDIF
  91.  
  92. ;A=%1fADdurl
  93.  
  94.        IF demoplay
  95. demoplayoff=$
  96.         OR A
  97.         jr C,demoplayQ
  98.        BIT 4,A ;"D"
  99.        jr NZ,demoplaynOFF
  100.         LD A,#37 ;scf
  101.         LD (demoplayoff),A
  102.         LD A,#91 ;sub c
  103.         LD (mouseon),A
  104.         LD A,#FF
  105. demoplaynOFF
  106. democursor=$+1
  107.         LD HL,demobegin
  108. demokey=$+1
  109.         LD A,%00111111
  110. demokeytime=$+1
  111.         LD C,1
  112.         DEC C
  113.         jr NZ,CnNEWKEY
  114.         LD A,(HL)
  115.         LD (demokey),A
  116.         INC HL
  117.         LD C,(HL)
  118.         INC HL
  119.         LD (democursor),HL
  120. CnNEWKEY
  121.         LD HL,demokeytime
  122.         LD (HL),C
  123. demoplayQ
  124.        ELSE
  125.        IF demorec
  126. democursor=$+1
  127.         LD HL,demobegin
  128. demokeytime=$+1
  129.         LD C,0
  130.         INC C
  131.         jr Z,CNEWKEY
  132.         CP (HL)
  133.         jr Z,CnNEWKEY
  134. CNEWKEY
  135.         INC HL
  136.         LD (HL),C
  137.         LD C,0
  138.         INC HL
  139. CnNEWKEY
  140.         LD (HL),A
  141.         LD (democursor),HL
  142.         LD HL,demokeytime
  143.         LD (HL),C
  144.        ENDIF
  145.        ENDIF
  146.  
  147.        PUSH AF
  148.  
  149. IMavision=$+1
  150.         LD HL,32*256
  151. IMdavision=$+1
  152.         LD DE,100
  153.         AND %10110011
  154.         CP 0
  155.         LD ($-1),A
  156.         jr Z,$+4
  157.         LD E,50 ;key just pressed/released
  158.        IF autostrafe
  159.         BIT 7,A
  160.         jr NZ,nAUTOROTATE
  161.         BIT 4,A
  162.         jr NZ,$+3
  163.         ADD HL,DE
  164.         BIT 5,A
  165.         jr NZ,$+4
  166.         SBC HL,DE
  167. nAUTOROTATE
  168.        ENDIF
  169.        IF doublerotate
  170.         RRA
  171.         jr C,$+4
  172.         ADD HL,DE
  173.         ADD HL,DE
  174.         RRA
  175.         jr C,$+6
  176.         SBC HL,DE
  177.         SBC HL,DE
  178.        ELSE
  179.         RRA
  180.         jr C,$+3
  181.         ADD HL,DE
  182.         RRA
  183.         jr C,$+4
  184.         SBC HL,DE
  185.        ENDIF
  186.  
  187.         LD A,E
  188.         ADD A,12;10
  189.         jr C,$+3
  190.         LD E,A ;key held: increase rotspd
  191.         LD (IMdavision),DE
  192.        IF mouse
  193.         LD BC,#FBDF
  194.         IN A,(C)
  195. mouseoldx=$+1
  196.         LD C,0
  197.         LD ($-1),A
  198. mouseon=$
  199.        IF demoplay
  200.         XOR A
  201.        ELSE
  202.         SUB C
  203.        ENDIF
  204.         NEG
  205.         LD E,A
  206.         RLA
  207.         SBC A,A
  208.         LD D,A
  209.         EXD
  210.         DUP 6
  211.         ADD HL,HL
  212.         EDUP
  213.         ADD HL,DE
  214.        ENDIF
  215.         LD (IMavision),HL
  216.  
  217. ;делим вектор на коэфф замедления
  218. IMcurDX=$+1
  219.         LD HL,0
  220.         LD B,H
  221.         ld A,L
  222.         SRA B
  223.         RRA
  224.        IF doublespeed
  225.         SRA B
  226.         RRA
  227.        ENDIF
  228.         LD C,A
  229.         CP B
  230.        jr NZ,$+3
  231.        LD C,L
  232.         SBC HL,BC
  233.         LD B,H
  234.         ld C,L
  235. CSLOWXQ
  236. IMcurDY=$+1
  237.         LD HL,0
  238.         LD D,H
  239.         ld A,L
  240.         SRA D
  241.         RRA
  242.        IF doublespeed
  243.         SRA D
  244.         RRA
  245.        ENDIF
  246.         LD E,A
  247.         CP D
  248.        jr NZ,$+3
  249.        LD E,L
  250.         SBC HL,DE
  251.         LD D,H
  252.         ld E,L
  253. CSLOWYQ
  254.        POP AF ;%00ADSWPO
  255.        RRCA
  256.        RRCA
  257.        AND 15
  258.         LD HL,tkeyangle
  259.         ADD A,L
  260.         LD L,A
  261.        IF (tkeyangle^tkeyangleend)&256
  262.         ADC A,H
  263.         SUB L
  264.         LD H,A
  265.        ENDIF
  266.         LD A,(HL)
  267. ;прибавляем вектор направления
  268. ;sin и cos (IMavision+32*N), где N=0..7 в зав. от клавиш
  269. ;0=forth
  270. ;64=left
  271.        CP -1
  272.        JP Z,CTRLnspeed
  273.         LD HL,IMavision+1
  274.         ADD A,(HL)
  275.         LD L,A
  276.         LD H,tcos/256 ;-pi/4..+pi/4
  277.         LD A,(HL)
  278.        ADD A,C
  279.        LD C,A
  280.        BIT 7,(HL)
  281.        jr NZ,$+3
  282.        INC B
  283.        jr C,$+3
  284.        DEC B
  285.         LD A,64
  286.         SUB L
  287.         LD L,A
  288.         LD A,(HL)
  289.        ADD A,E
  290.        LD E,A
  291.        BIT 7,(HL)
  292.        jr NZ,$+3
  293.        INC D
  294.        jr C,$+3
  295.        DEC D
  296. CTRLnspeed
  297.         LD (IMcurDX),BC
  298.         LD (IMcurDY),DE
  299.        DUP 2
  300.         SRA D
  301.         RR E
  302.         SRA B
  303.         RR C
  304.        EDUP
  305.  
  306.         LD HL,(IMcurXx)
  307.         ADD HL,BC
  308.         BIT 7,B
  309.        PUSH DE,HL
  310.         LD HL,(IMcurXx)
  311.         LD DE,256-mindist ;dx>0
  312.         jr Z,$+4
  313.         LD  E,mindist ;dx<0
  314.         ADD HL,DE
  315.         LD A,H
  316.         LD HL,(IMcurYy)
  317.         LD  E,mindist
  318.         SBC HL,DE
  319.         LD B,H
  320.         ADD HL,DE
  321.         ADD HL,DE
  322.         LD L,A
  323.         SET mapdifbit,L
  324.         LD A,(HL)
  325.         LD H,B
  326.         OR (HL)
  327.        POP HL,DE
  328.         RLA
  329.         jr C,CTRLnX
  330.         LD (IMcurXx),HL
  331. CTRLnX
  332.         LD HL,(IMcurYy)
  333.         ADD HL,DE
  334.         BIT 7,D
  335.        PUSH HL
  336.         LD HL,(IMcurYy)
  337.         LD DE,256-mindist ;dx>0
  338.         jr Z,$+4
  339.         LD  E,mindist ;dx<0
  340.         ADD HL,DE
  341.         LD A,H
  342.         LD HL,(IMcurXx)
  343.         LD  E,mindist
  344.         SBC HL,DE
  345.         LD B,H
  346.         ADD HL,DE
  347.         ADD HL,DE
  348.         LD L,H
  349.         LD H,A
  350.         LD A,(HL)
  351.         LD L,B
  352.         OR (HL)
  353.        POP HL
  354.         RLA
  355.        RET C
  356.         LD (IMcurYy),HL ;H!=0
  357.         RET
  358.