Advertisement
Guest User

Untitled

a guest
May 7th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. start_move_to_target:
  2.         lda #$00                       ; обнуляем счетчики блоков и флаг Z
  3.         sta $6FF
  4.         sta $6FE
  5.         sta $6FD
  6.         jsr calculate_x                ; вычисляем разницу блоков по X
  7.         jsr calculate_z                ; вычисляем разницу блоков по Z
  8.         lda $6FE                      ; нужно получить номер блока по формуле z*8+x (строка*8+столбец)
  9.         asl
  10.         asl
  11.         asl
  12.         clc
  13.         adc $6FF                      
  14.         tay                            ; преобразуем в поинтер
  15.         lda x_coor_tbl,Y            ; загружаем из таблицы Xspeed
  16. ;       and #4
  17. lsr
  18. lsr
  19. ;lsr
  20. ;lsr
  21. lsr
  22.         sta Objects_X_speed,X
  23.         lda z_coor_tbl,Y            ; загружаем из таблицы Xspeed
  24.        
  25. lsr
  26. lsr
  27. lsr
  28. lsr
  29.  
  30.         sta Objects_Z_speed,X
  31.         lda $6FD                 ; проверяем знак Z
  32.         bne skip_Z
  33.         lda Objects_Z_speed,X
  34.         eor #$FF
  35.         sta Objects_Z_speed,X
  36.        
  37. skip_Z:
  38. lda Objects_Z_speed,X
  39. ;sr objects_add_Z_8
  40. STA Objects_Z_spd_sub,X
  41.         rts                            ; выходим из функции назначения скорости
  42. ; ----------------------------------------------------------------------------
  43.  
  44. calculate_x:
  45.         lda Objects_X_shadow, X        ; сравниваем позиции пули и игрока, при равной позиции - $6FF = 0
  46.         cmp Objects_X_shadow, Y
  47.         beq equal_r
  48.         bcs normal_way                 ; x1>x2 ?
  49.         lda Objects_dir, X             ; иначе меняем направление
  50.         eor #$80
  51.         sta Objects_dir, X          
  52.         lda Objects_X_shadow, Y        ; x1<x2
  53.         sec
  54.         sbc Objects_X_shadow, X
  55.         bne normalize_w                ; jump (условие не может быть иным, ибо выше уже была проверка)      
  56.        
  57. normal_way:
  58.         sec
  59.         sbc Objects_X_shadow, Y        
  60.        
  61. normalize_w:                   ; проверяем разницу
  62.         cmp #$E0                      
  63.         bcs nw0                        ; 8 блоков
  64.         cmp #$C0
  65.         bcs nw1                        ; 7 блоков
  66.         cmp #$A0                    
  67.         bcs nw2                        ; 6 блоков
  68.         cmp #$80                      
  69.         bcs nw3                        ; 5 блоков
  70.         cmp #$60                    
  71.         bcs nw4                        ; 4 блока
  72.         cmp #$40                    
  73.         bcs nw5                        ; 3 блока
  74.         cmp #$20                    
  75.         bcs nw6                        ; 2 блока
  76.         bcc nw7                        ; 1 блок
  77.  
  78. nw0:
  79.         inc $6FF
  80.        
  81. nw1:
  82.         inc $6FF
  83.  
  84. nw2:
  85.         inc $6FF
  86.  
  87. nw3:
  88.         inc $6FF
  89.  
  90. nw4:
  91.         inc $6FF
  92.  
  93. nw5:
  94.         inc $6FF
  95.  
  96. nw6:
  97.         inc $6FF
  98.  
  99. nw7:
  100.         inc $6FF
  101.  
  102. equal_r:
  103.         rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement