?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. usetrackcamera
  2.         if DEBUGPRINT
  3.         ;call prcoords
  4.         endif
  5.  
  6.         call getmousedelta ;de=delta (d>0: go up) (e>0: go left), l=mousekey
  7.         push hl
  8. trackcamera_addr=$+1
  9.         ;call mousetrackcamera ;de=delta (d>0: go up) (e>0: go left) ;out: d=camera dy, e=camera dx        
  10.         call trackcamera ;de=delta (d>0: go up) (e>0: go left) ;out: d=camera dy, e=camera dx        
  11.         pop hl ;l=mousekey
  12.        
  13.         ld a,l
  14.         bit 1,a
  15.         ret nz;jr nz,nocamoff
  16.         ld bc,notrackcamera
  17.         ld (trackcamera_addr),bc
  18. ;nocamoff
  19.         ret
  20.        
  21. mousetrackcamera
  22. ;de=delta (d>0: go up) (e>0: go left)
  23. ;out: d=camera dy, e=camera dx
  24.         ld hl,(cameraxm)
  25.         ld c,e
  26.         ld a,c
  27.         rla
  28.         sbc a,a
  29.         ld b,a
  30.         add hl,bc
  31.         ld (cameraxm),hl
  32.         ld hl,(cameraym)
  33.         ld c,d
  34.         ld a,c
  35.         rla
  36.         sbc a,a
  37.         ld b,a
  38.         add hl,bc
  39.         ld (cameraym),hl
  40.         ret
  41.  
  42. notrackcamera
  43. ;out: d=camera dy, e=camera dx
  44.         ld de,0
  45.         ret
  46.  
  47. trackcamera
  48. ;de=delta (d>0: go up) (e>0: go left)
  49. ;out: d=camera dy, e=camera dx
  50. ;двигаем смещение камеры к идеалу (xspeed16;yspeed16), но не быстрее, чем на +-CAMERASHIFTSPEED
  51. ;и находим camerax/ymideal
  52. cameraxshift=$+1
  53.         ld hl,0
  54.         ld de,(objects+obj.xspeed16)
  55.         xor a
  56.         sbc hl,de
  57.         or h
  58.         jp m,xshifttoideal_neg
  59. ;hl=xshift-xshiftideal >=0
  60.         ld bc,CAMERASHIFTSPEED_X
  61.         sbc hl,bc
  62.         jr c,xshifttoideal_get ;не быстрее, чем на +CAMERASHIFTSPEED_X
  63.         jr xshifttoideal_limit
  64. xshifttoideal_neg
  65. ;hl=xshift-xshiftideal <0
  66.         ld bc,-CAMERASHIFTSPEED_X
  67.         sbc hl,bc
  68.         jr nc,xshifttoideal_get ;не быстрее, чем на -CAMERASHIFTSPEED_X
  69. xshifttoideal_limit
  70.         ld hl,(cameraxshift)
  71.         or a
  72.         sbc hl,bc
  73.         ex de,hl
  74. xshifttoideal_get
  75.         ex de,hl
  76. xshifttoideal_negq        
  77.         ld (cameraxshift),hl
  78.         ex de,hl
  79.  
  80.         ld hl,+80+24
  81.         ld bc,(objects+obj.x16)
  82.          dup 3
  83.          srl b
  84.          rr c
  85.          edup
  86.         or a
  87.         sbc hl,bc
  88.         ;ld de,(objects+obj.xspeed16)
  89.         or a
  90.         sbc hl,de
  91.         ld (cameraxmideal),hl
  92.  
  93. camerayshift=$+1
  94.         ld hl,0
  95.         ld de,(objects+obj.yspeed16)
  96.         xor a
  97.         sbc hl,de
  98.         or h
  99.         jp m,yshifttoideal_neg
  100. ;hl=yshift-yshiftideal >=0
  101.         ld bc,CAMERASHIFTSPEED_Y
  102.         sbc hl,bc
  103.         jr c,yshifttoideal_get ;не быстрее, чем на +CAMERASHIFTSPEED_Y
  104.         jr yshifttoideal_limit
  105. yshifttoideal_neg
  106. ;hl=yshift-yshiftideal <0
  107.         ld bc,-CAMERASHIFTSPEED_Y
  108.         sbc hl,bc
  109.         jr nc,yshifttoideal_get ;не быстрее, чем на -CAMERASHIFTSPEED_Y
  110. yshifttoideal_limit
  111.         ld hl,(camerayshift)
  112.         or a
  113.         sbc hl,bc
  114.         ex de,hl
  115. yshifttoideal_get
  116.         ex de,hl
  117. yshifttoideal_negq        
  118.         ld (camerayshift),hl
  119.         ex de,hl
  120.  
  121.         ld hl,+80+48
  122.         ld bc,(objects+obj.y16)
  123.          dup 3
  124.          srl b
  125.          rr c
  126.          edup
  127.         or a
  128.         sbc hl,bc
  129.         ;ld de,(objects+obj.yspeed16)
  130.         or a
  131.         sbc hl,de
  132.         ld (cameraymideal),hl
  133.        
  134. ;двигаем камеру к идеалу, но не быстрее, чем на +-CAMERATRACKINGSPEED
  135.         ld hl,(cameraxm)
  136. cameraxmideal=$+1
  137.         ld de,0;(cameraxmideal)
  138.         xor a
  139.         sbc hl,de
  140.         or h
  141.         jp m,xmtoideal_neg
  142. ;hl=xm-xmideal >=0
  143.         ld bc,CAMERATRACKINGSPEED_X
  144.         sbc hl,bc
  145.         jr c,xmtoideal_get ;не быстрее, чем на +CAMERATRACKINGSPEED_X
  146.         jr xmtoideal_limit
  147. xmtoideal_neg
  148. ;hl=xm-xmideal <0
  149.         ld bc,-CAMERATRACKINGSPEED_X
  150.         sbc hl,bc
  151.         jr nc,xmtoideal_get ;не быстрее, чем на -CAMERATRACKINGSPEED_X
  152. xmtoideal_limit
  153.         ld hl,(cameraxm)
  154.         or a
  155.         sbc hl,bc
  156.         ex de,hl
  157. xmtoideal_get
  158.         ex de,hl
  159. xmtoideal_negq        
  160.         ld (cameraxm),hl
  161. cameraxmold=$+1
  162.         ld de,0
  163.         ld (cameraxmold),hl
  164.         or a
  165.         sbc hl,de ;camera dx
  166.        push hl
  167.  
  168.         ld hl,(cameraym)
  169. cameraymideal=$+1
  170.         ld de,0;(cameraymideal)
  171.         xor a
  172.         sbc hl,de
  173.         or h
  174.         jp m,ymtoideal_neg
  175. ;hl=ym-ymideal >=0
  176.         ld bc,CAMERATRACKINGSPEED_Y
  177.         sbc hl,bc
  178.         jr c,ymtoideal_get ;не быстрее, чем на +CAMERATRACKINGSPEED_Y
  179.         jr ymtoideal_limit
  180. ymtoideal_neg
  181. ;hl=ym-ymideal <0
  182.         ld bc,-CAMERATRACKINGSPEED_Y
  183.         sbc hl,bc
  184.         jr nc,ymtoideal_get ;не быстрее, чем на -CAMERATRACKINGSPEED_Y
  185. ymtoideal_limit
  186.         ld hl,(cameraym)
  187.         or a
  188.         sbc hl,bc
  189.         ex de,hl
  190. ymtoideal_get
  191.         ex de,hl
  192. ymtoideal_negq        
  193.         ld (cameraym),hl
  194. cameraymold=$+1
  195.         ld de,0
  196.         ld (cameraymold),hl
  197.         or a
  198.         sbc hl,de ;camera dy
  199.        
  200.        pop bc ;camera dx
  201.          ld d,l
  202.          ld e,c
  203.         ret
  204.