witam,
http://atariarea.krap.pl/forum/viewtopic.php?id=5853
http://atari.online.pl/v01/index.phtml? … ct=nowinki
http://atari.pl/nr.rar - filmik
na filmiku widac, ze sprity smieca po ekranie... chcialbym prosic o pomoc w napisaniu dobrego i szybkiego silnika spritow dla tej gry.
obecnie wyglada on tak:
; sprite engine
_x equ $b0
_y equ $b1
_hv equ $b2
_ekran equ $b3
_sprite1 equ $b5
_sprite2 equ $b6
_temp_x equ $b7
_sprite_engine
ldx #$0f - 16 spritow
_next_spr stx _temp_x
lda $400,x - od $400 do $42f znajduja sie rejestry hardwarowe. $400-$40f to pozycja x spritow ponizej sposob liczenia
sta _x
lda $410,x - pozycja y
sta _y
lda $420,x - szerokosc i wysokosc sprita. starszy nibbel=0 oznacza sprita wylaczonego
sta _hv
jsr _se0
ldx _temp_x
dex
bpl _next_spr
rts
_se0
lda _hv
and #%11110000
bne _se1
rts
_se1
lda #$00
sta _sprite2
lda _x
and #%111
tay
lda _hv
lsr @
lsr @
lsr @
lsr @
tax
lda _tab_h,x
cpy #0
beq _se5
_se2 lsr @
ror _sprite2
dey
bne _se2
_se5 sta _sprite1
lda _y
lsr @
lsr @
lsr @
tax
lda _tab_y,x
sta _ekran+1
lda _y
and #%111
tax
lda _tab_y_fine,x
sta _ekran
lda _x
lsr @
lsr @
lsr @
clc
adc _ekran
sta _ekran
lda _hv
and #%1111
eor #%1111
tax
_se4 ldy #0
;lda (_ekran),y
;ora _sprite1
lda _sprite1
sta (_ekran),y
iny
;lda (_ekran),y
;ora _sprite2
lda _sprite2
sta (_ekran),y
lda _ekran
clc
adc #$20
sta _ekran
bcc _se3
inc _ekran+1
_se3 dex
bpl _se4
rts
; szerokosc sprita
_tab_h dta %00000000,%10000000,%11000000,%11100000
dta %11110000,%11111000,%11111100,%11111110,%11111111 - hardware obsluguje szersze ale w tej grze nie ma spritow szerszych od 8
; numer lini przelozyc na starszy adres 0,1,2,3..7 zawsze puste
_tab_y dta $40,$40,$40,$40,$40,$40,$40,$40
dta $40,$41,$42,$43,$44,$45,$46,$47
dta $48,$49,$4a,$4b,$4c,$4d,$4e,$4f
dta $50,$51,$52,$53,$54,$55,$56,$57
; mlodszy bajt pozycji pionowej
_tab_y_fine dta $00,$20,$40,$60,$80,$a0,$c0,$e0
nie bylo by problemu gdyby mozna bylo szybko na vbi wymazac pamiec ekranu, ale nie mozna...
na powyzsza procedurke jesli jest taka potrzeba mozna przeznaczyc pamiec: $b0-$1af
procedura bedzie wykonywana na vbi ale byc moze lepiej bedzie sie wpiac w kod gry:
ldy #$0f
ldx #$1f
_1 lda $08,x
sta $420,y
lda $28,x
eor #$ff
sta $400,y
lda $48,x
sta $410,y
dex
dex
dey
bpl _1