Advertisement
Guest User

Untitled

a guest
Sep 4th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. lda link_buffer
  2.     sta zp_tmp1
  3.     lda link_buffer+1
  4.     sta zp_tmp1+1
  5.     ldy #3
  6.     lda link_content
  7.     sta (zp_tmp1),y
  8.     iny
  9.     lda link_content+1
  10.     sta (zp_tmp1),y
  11.    
  12.    
  13.     ;translate to origin -> signed numbers!
  14.     lda pxpos
  15.     sec
  16.     sbc #80
  17.     sta tmp1
  18.     bpl ispositive0
  19. isnegative0
  20.     clc
  21.     eor #$ff
  22.     adc #$01
  23. ispositive0
  24. ;------------------------
  25.     and #7
  26.     asl
  27.     asl
  28.     asl
  29.     asl
  30.     asl
  31.     sta rem1
  32.    
  33.     lda tmp1 ;now re-attach the sign?
  34.     bpl waspositive0
  35. wasnegative0
  36.     lda rem1
  37.     clc
  38.     eor #$ff
  39.     adc #$01
  40.     sta rem1
  41. waspositive0
  42. ;------------------------
  43. ;------------------------    
  44.     lda pypos
  45.     sec
  46.     sbc #20
  47.     sta tmp2
  48. ;------------------------    
  49.     ;tmp2 can be negative
  50.     ;so check first
  51.     bpl ispositive
  52. isnegative
  53.     clc
  54.     eor #$ff
  55.     adc #$01
  56.    
  57. ispositive    
  58.     and #3
  59.     asl
  60.     asl
  61.     asl
  62.     asl
  63.     asl
  64.     asl
  65.     sta rem2
  66.    
  67.     lda tmp2 ;now re-attach the sign?
  68.     bpl waspositive
  69. wasnegative
  70.     lda rem2
  71.     clc
  72.     eor #$ff
  73.     adc #$01
  74.     sta rem2
  75. waspositive
  76. ;------------------------
  77.    
  78.    
  79.     lda rem1
  80.     clc
  81.     adc rem2
  82.     lda #0
  83.     adc #0
  84.     sta rem_msb1
  85.    
  86.    
  87.     ;pxpos / 8
  88.     lda tmp1 ;
  89.     cmp #$80  ;copy bit 7 to carry
  90.     ror       ;shift right as before
  91.     bpl *+4     ;if positive number then skip
  92.     adc #$00  ;else round up
  93.     sta tmp1
  94.    
  95.     lda tmp1 ;
  96.     cmp #$80  ;copy bit 7 to carry
  97.     ror       ;shift right as before
  98.     bpl *+4     ;if positive number then skip
  99.     adc #$00  ;else round up
  100.     sta tmp1
  101.    
  102.     lda tmp1 ;
  103.     cmp #$80  ;copy bit 7 to carry
  104.     ror       ;shift right as before
  105.     bpl *+4     ;if positive number then skip
  106.     adc #$00  ;else round up
  107.     sta tmp1
  108.  
  109.    ;pypos / 4
  110.     lda tmp2 ;
  111.     cmp #$80  ;copy bit 7 to carry
  112.     ror       ;shift right as before
  113.     bpl *+4     ;if positive number then skip
  114.     adc #$00  ;else round up
  115.     sta tmp2
  116.    
  117.     lda tmp2 ;
  118.     cmp #$80  ;copy bit 7 to carry
  119.     ror       ;shift right as before
  120.     bpl *+4     ;if positive number then skip
  121.     adc #$00  ;else round up
  122.     sta tmp2
  123.    
  124.     ;tmp3=tmp1+tmp2 + ((rem1+rem2)>>8)
  125.     lda tmp1
  126.     clc
  127.     adc tmp2
  128.     adc rem_msb1
  129.     sta tmp3
  130.    
  131.    
  132.     lda tmp3 ;
  133.     cmp #$80  ;copy bit 7 to carry
  134.     ror       ;shift right as before
  135.     bpl *+4     ;if positive number then skip
  136.     adc #$00  ;else round up
  137.     sta tmp3
  138.     ;tmp3 = map.x = (screen.x / TILE_WIDTH_HALF + screen.y / TILE_HEIGHT_HALF) /2;
  139.  
  140.    
  141.     ;tmp4=tmp2-tmp1 + ((rem2-rem1)>>8)
  142.     lda rem2
  143.     sec
  144.     sbc rem1
  145.     lda #0
  146.     sbc #0
  147.     sta rem_msb2
  148.    
  149. #ifdef DEBUG    
  150.     lda rem1
  151.     ldx #10
  152.     ldy #10
  153.     jsr plot_a_xy
  154.    
  155.     lda rem2
  156.     ldx #30
  157.     ldy #10
  158.     jsr plot_a_xy
  159.    
  160.     lda rem_msb1
  161.     ldx #50
  162.     ldy #10
  163.     jsr plot_a_xy
  164.    
  165.     lda rem_msb2
  166.     ldx #70
  167.     ldy #10
  168.     jsr plot_a_xy
  169. #endif    
  170.    
  171.    
  172.     lda tmp2
  173.     sec
  174.     sbc tmp1
  175.     clc
  176.     adc rem_msb2
  177.     sta tmp4
  178.    
  179.     lda tmp4 ;
  180.     cmp #$80  ;copy bit 7 to carry
  181.     ror       ;shift right as before
  182.     bpl *+4     ;if positive number then skip
  183.     adc #$00  ;else round up
  184.     sta tmp4
  185.     ;tmp4= map.y = (screen.y / TILE_HEIGHT_HALF -(screen.x / TILE_WIDTH_HALF)) /2;
  186.  
  187.  
  188. #ifdef DEBUG
  189.     lda tmp3
  190.     ldx #10
  191.     ldy #90
  192.     jsr plot_a_xy
  193.    
  194.     lda tmp4
  195.     ldx #24
  196.     ldy #90
  197.     jsr plot_a_xy
  198. #endif    
  199.     lda tmp4
  200.     sta     MATHD   ; Hardware multiply
  201.     stz     MATHC    
  202.    
  203.     lda #10
  204.     sta     MATHB   ; Hardware multiply
  205.     stz     MATHA
  206.    
  207.     bit $fc92;SPRSYS
  208.     bmi *-3
  209.    
  210.     lda tmp3
  211.     clc
  212.     adc MATHH ;y*10
  213.    
  214.     sta player_map_pos
  215. #ifdef DEBUG    
  216.     ldx #50
  217.     ldy #90
  218.     jsr plot_a_xy
  219. #endif    
  220.     ;debug screeny
  221.     ;just for debug
  222. ;------
  223. #ifdef DEBUG
  224.     lda #0
  225.     sta count
  226. loop2    
  227.     ldx count
  228.     lda omappos,x
  229.     pha;
  230.     ldy #80
  231.     lda count
  232.     asl
  233.     asl
  234.     asl
  235.     asl
  236.     tax
  237.     pla ;
  238.     jsr plot_a_xy
  239.     inc count
  240.     lda count
  241.     cmp #10
  242.     bne loop2
  243. ;------    
  244. #endif
  245.     ;inject player;
  246.     lda #0
  247.     sta count
  248. loop3
  249.     ldx count
  250.     lda omappos,x
  251.     cmp player_map_pos
  252.     bcs inject_here
  253.     inc count
  254.     lda count
  255.     cmp #10
  256.     bne loop3
  257.     ;rts
  258. inject_here
  259.     ;x*11
  260.     lda #<(object_chain)
  261.     sta zp_tmp1
  262.     lda #>(object_chain)
  263.     sta zp_tmp1+1
  264.    
  265.    ; ldx #5
  266.     stx player_position_in_list
  267.    
  268.     cpx #0
  269.     beq skip_search
  270.     dex ;WHY? TRY TO UNDERSTAND BUG NOTE TODO
  271. loop4 ;go through object chain in steps of OFFSET = 11
  272.     lda zp_tmp1
  273.     clc
  274.     adc #11
  275.     sta zp_tmp1
  276.     bcc ok
  277.     inc zp_tmp2
  278. ok
  279.     dex
  280.     bne loop4
  281.    
  282. skip_search
  283. #ifdef DEBUG
  284.     lda player_position_in_list
  285.     ldx #10
  286.     ldy #30
  287.     jsr plot_a_xy
  288. #endif
  289.     ;backup chain link
  290.     lda zp_tmp1
  291.     sta link_buffer
  292.     lda zp_tmp1+1
  293.     sta link_buffer+1
  294.     ldy #3
  295.     lda (zp_tmp1),y
  296.     sta link_content
  297.     iny
  298.     lda (zp_tmp1),y
  299.     sta link_content+1
  300.  
  301.     ;zp_tmp1 points to sprite to exchange
  302.     ldy #3
  303.     lda (zp_tmp1),y
  304.     sta player_chain ;point player to next chain link
  305.     lda #<player ;insert player into chain
  306.     sta (zp_tmp1),y
  307.    
  308.     iny
  309.     lda (zp_tmp1),y
  310.     sta player_chain+1
  311.     lda #>player ;insert player into chain
  312.     sta (zp_tmp1),y
  313.     rts
  314.  
  315. link_buffer .word object_chain
  316. link_content .word object_chain+11
  317. player_position_in_list .byte 0
  318. player_map_pos .byte 0    
  319. count .byte 0    
  320. mapxp .byte 0
  321. mapyp .byte 0
  322. tmp1 .byte 0
  323. tmp2 .byte 0
  324. tmp3 .byte 0
  325. tmp4 .byte 0
  326.  
  327. rem1 .byte 0
  328. rem2 .byte 0
  329. rem_msb1 .byte 0
  330. rem_msb2 .byte 0
  331. .)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement