C64 – Cake 7: Animacija sprajtova (pravci kretanja + sudar)
Datu objavljivanja: 25.10.2025.
Autore: Saša Petrović
C64 – Cake 7: Animacija sprajtova (pravci kretanja + sudar)
Preslušajte audio recenziju ovog teksta:
Dobrodošli u nove cake. Danas ćemo videti kako animirati sprajtove. Uradićemo primer sprajta koji menja izgled u zavisnosti od pravca kretanja, kao i u slučaju sudara sa pozadinom.
Kod svih arkadnih igrica šarm leži i u grafici, lepo urađenim sprajtovima, muzici/zvuku i — naravno — animacijama sprajtova, koje igri daju dinamiku. Glavni princip animacije je prepisivanje memorije opisa sprajta drugim izgledom u datom trenutku.
Uzećemo deo asemblerskog programa iz lekcije „C64 Asembler – lekcija 7“ i prilagoditi ga tako da sprajt menja izgled u skladu sa zadatim pokretima.
Primer koda
; C64 – Cake 7: animacija sprajta po pravcu + sudar
* = $1000
lda #147 ; PETSCII CLS
jsr $ffd2
lda #8
sta $d020 ; border
sta $d021 ; background
lda #0
sta $d010 ; reset 9. bit X za sve sprajtove
ldx #0
ldy #0
lda #0
sta $0500 ; prepreka: karakter "@"
sta $0510
ldx #0
jsr spr ; učitaj glavni izgled sprajta
lda #$0d
sta $07f8 ; opis prvog sprajta u bloku 13 (832–13*64)
lda #$01
sta $d015 ; enable sprite 0
sta $d01c ; multicolor enable sprite 0
lda #$71
sta $d000 ; X0
sta $d001 ; Y0
lda #$01
sta $d025 ; mc shared color 01 (bela)
lda #$02
sta $d026 ; mc shared color 11 (crvena)
lda #$03
sta $d027 ; mc unique color 10 za sprite 0 (svetlo plava)
upravljanje
lda $d01f ; "prime" bug detekcije sudara (reset očitavanjem)
jsr uspori
jsr sudar
ldx 197 ; keyboard buffer
cpx #10 ; 'A' -> levo
beq levo
cpx #18 ; 'D' -> desno
beq desno
cpx #9 ; 'W' -> gore
beq gore
cpx #13 ; 'S' -> dole
beq dole
ldx #0
jsr spr ; vrati glavni izgled
jmp upravljanje
levo
jmp smanjix
desno
jmp uvecajx
gore
jmp smanjiy
dole
jmp uvecajy
; --- LEVO: smanji X, obrni izgled ---
smanjix
ldx #0
jsr splev
dec $d000
lda $d010
and #%00000001
cmp #1
beq proverix
ldx $d000
cpx #14
beq stanix
jmp upravljanje
proverix
ldx $d000
cpx #0
beq resetujx
jmp upravljanje
resetujx
lda $d010
and #%11111110
sta $d010
lda #255
sta $d000
jmp upravljanje
stanix
lda #15
sta $d000
jmp upravljanje
; --- DESNO: uvećaj X, obrni izgled ---
uvecajx
ldx #0
jsr spldes
inc $d000
beq setujx
lda $d010
and #%00000001
cmp #1
beq proveri
jmp upravljanje
setujx
lda $d010
ora #%00000001
sta $d010
jmp upravljanje
proveri
ldx $d000
cpx #71
beq stanix2
jmp upravljanje
stanix2
lda #70
sta $d000
jmp upravljanje
; --- GORE/Dole: menjaj Y i izgled ---
smanjiy
ldx #0
jsr spgor
dec $d001
jmp upravljanje
uvecajy
ldx #0
jsr spdol
inc $d001
jmp upravljanje
; --- Usporavanje petlje ---
uspori
nop
nop
iny
bne uspori
rts
; --- Učitavanje opisa sprajta (glavni/varijante) ---
spr
lda sprajt,x
sta 832,x
inx
cpx #63
bne spr
rts
splev
lda sprlevo,x
sta 832,x
inx
cpx #63
bne splev
rts
spdes
lda sprdesno,x
sta 832,x
inx
cpx #63
bne spdes
rts
spgor
lda sprgore,x
sta 832,x
inx
cpx #63
bne spgor
rts
spdol
lda sprdole,x
sta 832,x
inx
cpx #63
bne spdol
rts
spbom
lda sprboom,x
sta 832,x
inx
cpx #63
bne spbom
rts
; --- Opisi sprajta (63 bajta) ---
sprajt
.byte 0,0,0
.byte 2,170,128
.byte 10,170,160
.byte 47,255,248
.byte 44,0,56
.byte 44,0,56
.byte 45,65,120
.byte 45,65,120
.byte 45,0,120
.byte 44,60,56
.byte 44,60,56
.byte 44,60,56
.byte 44,0,56
.byte 44,0,56
.byte 44,85,56
.byte 44,20,56
.byte 44,0,56
.byte 44,0,56
.byte 11,255,224
.byte 2,170,128
.byte 0,0,0
sprlevo
.byte 0,0,0
.byte 2,170,128
.byte 2,170,160
.byte 11,255,248
.byte 8,0,56
.byte 8,0,56
.byte 9,64,56
.byte 9,64,56
.byte 9,0,56
.byte 60,0,56
.byte 60,0,56
.byte 60,0,56
.byte 8,0,56
.byte 8,16,56
.byte 5,64,56
.byte 8,0,56
.byte 10,0,56
.byte 10,0,56
.byte 3,255,224
.byte 2,170,128
.byte 0,0,0
sprdesno
.byte 0,0,0
.byte 2,170,128
.byte 10,170,128
.byte 47,255,224
.byte 44,0,32
.byte 44,0,32
.byte 44,1,96
.byte 44,1,96
.byte 44,0,96
.byte 44,0,60
.byte 44,0,60
.byte 44,0,60
.byte 44,0,32
.byte 44,4,32
.byte 44,1,80
.byte 44,0,32
.byte 44,0,160
.byte 44,0,160
.byte 11,255,192
.byte 2,170,128
.byte 0,0,0
sprgore
.byte 0,0,0
.byte 2,170,128
.byte 10,170,160
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 11,255,224
.byte 3,255,192
.byte 0,0,0
sprdole
.byte 0,0,0
.byte 2,170,128
.byte 10,170,160
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 42,170,168
.byte 44,0,56
.byte 45,65,120
.byte 45,65,120
.byte 44,65,56
.byte 44,0,56
.byte 44,0,56
.byte 3,255,192
.byte 0,60,0
.byte 0,60,0
sprboom
.byte 0,0,0
.byte 160,0,0
.byte 136,0,0
.byte 168,192,0
.byte 171,48,0
.byte 139,51,0
.byte 139,60,192
.byte 163,60,192
.byte 3,60,209
.byte 0,204,213
.byte 0,12,213
.byte 0,3,17
.byte 0,0,17
.byte 32,0,17
.byte 8,0,0
.byte 10,1,0
.byte 0,132,64
.byte 0,239,220
.byte 0,0,0
.byte 0,0,0
.byte 0,0,0
; --- Sudar sa pozadinom ---
sudar
lda $d01f ; collision sprite/background
bne krajsve
rts
krajsve
ldx #0
jsr spbom
pla
pla
rts
Prilikom starta pojaviće se glava „čovečuljka“ koja u mirovanju gleda ka nama. Kretanje levo/desno/gore/dole menja izgled sprajta. Sudar sa dva „@“ karaktera na ekranu završava primer — sprajt dobija „boom“ izgled. Naravno, možete dodati više animacija, menjati multicolor boje, ili ciklično menjati idle izgled.
Tip: U sekciji upravljanje nismo koristili branch do dalekih etiketa, jer udaljenost prelazi +128 bajtova. Umesto toga koristili smo kratke skokove ka mestima gde izvršavamo
JMP(16-bitni). Grešku „branch out of range“ rešavajte ovim pristupom (iliJSRgde ima smisla).
Program za razmišljanje
* = $1000
lda #$ff
sta $d40e
sta $d40f
lda #$80
sta $d412
lda #$0d
sta $07f8
lda #$01
sta $d015
sta $d01c
lda #$71
sta $d000
sta $d001
lda #1
sta $d017
sta $d01d
ponovi
lda $d41b
sta $d025
lda $d41b
sta $d026
lda $d41b
sta $d027
ldx #0
opet
lda $d41b
sta 832,x
inx
cpx #63
bne opet
jmp ponovi
Mala pomoć: ima veze sa slučajnošću i izgledom sprajta. 😉
To je sve za danas. Veliki pozdrav!

