Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- start_move_to_target:
- lda #$00 ; обнуляем счетчики блоков и флаг Z
- sta $6FF
- sta $6FE
- sta $6FD
- jsr calculate_x ; вычисляем разницу блоков по X
- jsr calculate_z ; вычисляем разницу блоков по Z
- lda $6FE ; нужно получить номер блока по формуле z*8+x (строка*8+столбец)
- asl
- asl
- asl
- clc
- adc $6FF
- tay ; преобразуем в поинтер
- lda x_coor_tbl,Y ; загружаем из таблицы Xspeed
- ; and #4
- lsr
- lsr
- ;lsr
- ;lsr
- lsr
- sta Objects_X_speed,X
- lda z_coor_tbl,Y ; загружаем из таблицы Xspeed
- lsr
- lsr
- lsr
- lsr
- sta Objects_Z_speed,X
- lda $6FD ; проверяем знак Z
- bne skip_Z
- lda Objects_Z_speed,X
- eor #$FF
- sta Objects_Z_speed,X
- skip_Z:
- lda Objects_Z_speed,X
- ;sr objects_add_Z_8
- STA Objects_Z_spd_sub,X
- rts ; выходим из функции назначения скорости
- ; ----------------------------------------------------------------------------
- calculate_x:
- lda Objects_X_shadow, X ; сравниваем позиции пули и игрока, при равной позиции - $6FF = 0
- cmp Objects_X_shadow, Y
- beq equal_r
- bcs normal_way ; x1>x2 ?
- lda Objects_dir, X ; иначе меняем направление
- eor #$80
- sta Objects_dir, X
- lda Objects_X_shadow, Y ; x1<x2
- sec
- sbc Objects_X_shadow, X
- bne normalize_w ; jump (условие не может быть иным, ибо выше уже была проверка)
- normal_way:
- sec
- sbc Objects_X_shadow, Y
- normalize_w: ; проверяем разницу
- cmp #$E0
- bcs nw0 ; 8 блоков
- cmp #$C0
- bcs nw1 ; 7 блоков
- cmp #$A0
- bcs nw2 ; 6 блоков
- cmp #$80
- bcs nw3 ; 5 блоков
- cmp #$60
- bcs nw4 ; 4 блока
- cmp #$40
- bcs nw5 ; 3 блока
- cmp #$20
- bcs nw6 ; 2 блока
- bcc nw7 ; 1 блок
- nw0:
- inc $6FF
- nw1:
- inc $6FF
- nw2:
- inc $6FF
- nw3:
- inc $6FF
- nw4:
- inc $6FF
- nw5:
- inc $6FF
- nw6:
- inc $6FF
- nw7:
- inc $6FF
- equal_r:
- rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement