1

Temat: Sprite'y programowe

Witam

Interesuje mnie jak najszybsza procedura rysująca sprite'a programowego w trybie znakowym 4 ANTICA.
Przy założeniach, że można go przesuwać z dokładnością o jeden pixel(pion/poziom), nie niszczy tła oraz sprite'y mogą się na siebie nakładać.

Ja napisałem taką prockę, jeszcze nie zoptymalizowaną do końca, ale nawet po optymalizacji to i tak będzie za wolno bo dużo sprite'ów trzeba wyświetlić. Moja procka może wyświetlić max. 32 sprite'y o wielkości takiej jak na C64. (przy załozeniu, że wszystkie 128 znaków wykorzystujemy na sprite'y). Zamieściłbym przykład, żeby było wiadomo o co mi chodzi, ale nie wiem jak to załączyć.

Może pisał już ktoś taką procedurę i wykorzystał w demie, grze? (fajnie jeżeli byłby jeszcze kod źródłowy)

Ostatnio edytowany przez vega (2006-08-11 01:26:10)

2

Odp: Sprite'y programowe

Nasuwa się kilka pytań:
- jakiego rozmiaru są sprajty na C64 ? 12x21?
- co robić gdy znaki się skończą? (dla w/w rozmiarów może zabraknąć 128 znaków dla 32 sprajtów)
- czy optymalizować zużycie znaków dla spriteów o mniejszych rozmiarach?
- jak rozumiesz "tło" ? 128 znaków to niewiele na tło w znaczeniu kafelki (NxN znaków) + kilka takich dużych sprajtów
- dlaczego tryb 4 ANTICa a nie np. zwykła "piętnastka", tj. tryb 14 ANTICa ?

https://www.youtube.com/watch?v=jofNR_WkoCE

3

Odp: Sprite'y programowe

Tebe, zdaje się, napisał szybką prockę do rysowanie programowych sprajtów. Sprawdź w archiwum z madsem.

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

4

Odp: Sprite'y programowe

- sprajty c64 ma chyba 24x21?
- trzeba pociac obraz np. na 4 czesci, obnizy to sprawnosc(szybkosc) prcedury rysowania sprite ale pozwoli na roznorodna grafike?
- procka powinna miec wejscie na sprity o roznych wielkosciach?
- nie wiem, bo by bylo za prosto?

http://atari.pl/hsc/ad.php?i=1.

5

Odp: Sprite'y programowe

Fox napisał/a:

Nasuwa się kilka pytań:
- jakiego rozmiaru są sprajty na C64 ? 12x21?
- co robić gdy znaki się skończą? (dla w/w rozmiarów może zabraknąć 128 znaków dla 32 sprajtów)
- czy optymalizować zużycie znaków dla spriteów o mniejszych rozmiarach?
- jak rozumiesz "tło" ? 128 znaków to niewiele na tło w znaczeniu kafelki (NxN znaków) + kilka takich dużych sprajtów
- dlaczego tryb 4 ANTICa a nie np. zwykła "piętnastka", tj. tryb 14 ANTICa ?

1. Sprite'y to rozmiar 16x32 pixele (4x4 znaki) (ale wykorzystujemy tylko 12x24 bo jeden znak z prawej i na dole musi być pusty, żeby można było przesuwać o jeden pixel w pionie i poziomie. Mamy więc sprite'a takiego jaka na C64 praktycznie (12x21 pixele).

2. Przy 128 znakach można wyświetlić 32 sprite'y dzięki wykorzystaniu 4 zestawów znaków zmienianych co wiersz. Każdy sprite wykorzystuje 4 znaki z każdego zestawu. (128 znaków / 4 daje nam więc 32 sprite'y). Więc przy tej organizacji ekranu znaków nie zabraknie.

3. Nie mam optymalizacji zużycia znaków dla sprite'ów o mniejszych rozmiarach bo chce to wykorzystać tylko do spritów przenoszonych z C64.

4. Jak rozumie "tło"? Najlepiej przykład zamieszcze to będzie widać.

5. Tryb znakowy mnie interesuje z powodu liczyby kolorów. Ten 5-ty dodatkowy kolor jednak sporo mi daje.


Dely napisał/a:

Tebe, zdaje się, napisał szybką prockę do rysowanie programowych sprajtów. Sprawdź w archiwum z madsem.

Już kiedyś sprawdzałem, ale ta procedura to jest dla trybu graficznego. A mnie interesuje tryb znakowy.



Na jaki ftp mozna by wrzucić przykładowy plik i udostepnić? Wtedy sporo by się wyjaśniło o co mi chodzi.

6

Odp: Sprite'y programowe

Vega, masz przecież swoją stronę - http://yiear.atari8.info/ -  tam wrzuć.

7

Odp: Sprite'y programowe

Jurgi2 napisał/a:

Vega, masz przecież swoją stronę - http://yiear.atari8.info/ -  tam wrzuć.

Nawet nie pamiętam jaki tam login i hasło:(


Ale rozwiązałem już proglem. Plik jest na:

http://www.vega.freehost.pl

8

Odp: Sprite'y programowe

o, fajne :)

Tezz jeszcze to robił, ale mu się chyba utknęło...

o tutaj.

I Ty zostaniesz big endianem...

9

Odp: Sprite'y programowe

miker napisał/a:

Tezz jeszcze to robił, ale mu się chyba utknęło...

Jak widzę to poległ na procedurze rysującej sprite'y. To jest właśnie cały problem, że strasznie dużo czasu zabiera animacja takich spritów w trybie ANTIC 4. Coś mi się zdaje, że nie da się takiej gry zrobić jak BUBBLE BOBBLE właśnie ze względu na brak możliwości wygenerowania z rozsądną prędkością tylu sprite'ow w trybie ANTIC 4:(

Swoją drogą na C64 też musiano jakoś wykorzystać chyba sprite'y programowe? Bo tam przecież lata po ekranie więcej obiektów niż 8-siem.

10

Odp: Sprite'y programowe

C64 posiada sprity o szerokosci 12 pixli trybu 15OS Atari i wysokosci 21 linii (4 kolory), ich kształt, kolory itp mozna zdefiniowac "jako gotowce" potem np. w rastrze podmienic adres do nich i rozmnozyc je w linii, na Atari ten numer nie przejdzie bo Atari tworzy duchy przepisujac je linia po linii z odpowiednich rejestrow, czyli ogólnie Atari - C64 to zupełnie inne podejścia do tematu duchów sprzętowych

duchy programowe na znakach, jedyne jakie zrobiłem to te w grze Dynablaster, ekran to tryb JGP Dariusza Żołny zwany też 4+ (tryb wymyślony przez Avalon), czyli dwa zestawy znaków zmieniane co wiersz

ogólnie udało się w 1 ramce bez buforowania zmieścić 4 ruchome obiekty 8x8 pixli rozdzielczości trybu 15 OS, maksymalnie w 1 ramce możnaby zmieścić 8 takich obiektów, schemat działania: obraz and maska_obiektu -> obraz or kształt_obiektu -> zapisz na obraz

dla trybu graficznego udało się zmieścić 8 obiektów o rozdzielczości 12x24 pixli w 1 ramce z 3-ma buforami i bez maski_obiektu czyli schemat prostszy: obraz or kształt_obiektu -> zapisz na obraz
(przykład załączony do mads-a)

podejście Vegi do tematu wygląda OK, nie ma tu żadnych wielkich tajemnic i tricków, dla 4 zestawów znaków będzie trzeba napisać odpowiednią procedure kopiująca odpowiednie znaki do bufora, potem bufor zmodyfikować odpowiednim kształtem ducha i w końcu przesłać zawartość bufora do odpowiednich znaków z zestawów znakowych. Tak to działa w Dynablaster, wszystkie operacje przepisania są rozpisane (rozpętlone). Ideałem byłoby gdyby nie było bufora przejściowego tylko całą operację udało się zmieścić w jednej rozpętlonej pętli.

Pozatym Jaskier swego czasu zdisasemblował silnik duchów programowych Avalonu (chyba z Lasermani) i jest to ogólnie dostępne, próbowałem to uruchomić ale zabrakło nerwów :) Oczywiście duchy Avalonu wykorzystują tryb 4+ (2 zestawy znakowe) więc tak czy siak dla 4 zestawów znakowych trzeba napisać swój silnik.

*--------------------------*
* SP by Marcin Lewandowski *
*     based on SP by       *
*   Miroslaw Liminowicz    *
*--------------------------*

 opt 6
 org $a800

* jsr init  x=LSB(tab), y=MSB(tab)
* tab=
* 1.MSB(dane spriteow)
* 2.il.spriteow (max=21)
* 3.pierwszy wolny znak
* 4.lewa krawedz sceny
* 5.prawa krawedz sceny
* 6.wysokosc ekranu
* 7.szerokosc ekranu
* 8,9.pirwszy dlist
* 10,11.drugi dlist
* 12.MSB(pierwszy ekran)
* 13.MSB(drugi ekran)
* 14.MSB(pierwszy zestaw)
* 15.MSB(drugi zestaw)

* jsr proc  wywolywac co jakis czas
*           wedle uznania
* numzn= numer spritea w 4+
* xpos=  polozenie X
* ypos=  polozenie Y
* stat=  statusy spriteow
*  bit 0 zakrywanie przez ekran
*  bit 6 zwierciadlo poziome
*  bit 7 zwierciadlo pionowe

*--- strona 0

anascr equ $d6
aspr1 equ $d8
aspr2 equ $da
aznp1 equ $dc
aznp2 equ $de
aznp3 equ $e0
aznk1 equ $e2
aznk2 equ $e4
aznk3 equ $e6

posx equ $e8
posy equ $e9
invrs equ $ea
poczn equ $eb
przes equ $ec
numspr equ $ed
pr1 equ $ee
pr2 equ $ef
pr3 equ $f0
numl1 equ $f1
numl2 equ $f2
numl3 equ $f3

b1 equ $f4
b2 equ $f5
clock equ $f6
adrscr equ $f7
aktzes equ $f8
adrzes equ $f9
adrbuf equ $fa

*--- program

 jmp proc
 jmp init

numzn dta d'                     '
xpos  dta d'                     '
ypos  dta d'                     '
stat  dta d'                     '

*--- init

init stx b1
 sty b2
 jsr chow

* parametry

 ldy #1
 lda (b1),y
 tax
 dex
 stx zm21+1
 iny
 lda (b1),y
 sta zm31+1
 sta zm32+1
 sta zm33+1
 sta zm34+1
 iny
 iny
 iny
 lda (b1),y
 sta zm51+1
 sta zm52+1
 iny
 lda (b1),y
 sta zm61+1
 tax
 inx
 inx
 stx zm62+1
 inx
 stx zm64+1
 sec
 sbc #3
 sta zm63+1
 ldx #0
 ldy #0
i9 lda zmtab+1,x
 beq i11
 sta i10+2
 lda zmtab,x
 sta i10+1
 lda (b1),y
i10 sta $ffff
 iny
 inx
 inx
 bne i9
i11 lda zmd+1
 sta zmd1+1
 lda zme+1
 sta zme1+1
 lda #0
 sta bufor1+21
 sta bufor2+21
 sta clock
 tax

* maski

i1 txa
 sta b1
 asl @
 ora b1
 and #$aa
 sta b1
 lsr @
 ora b1
 eor #255
 sta msktab,x
 inx
 bne i1

* zwierciadla

i2 txa
 ldy #3
i3 asl @
 rol b1
 asl @
 ror odwr,x
 lsr b1
 ror odwr,x
 dey
 bpl i3
 inx
 bne i2

* adresy wzgl.fontow

i4 txa
 ldy #0
 sty b1
 asl @
 asl @
 rol b1
 asl @
 rol b1
 sta ladrzn,x
 lda b1
 sta hadrzn,x
 inx
 bpl i4

* adresy wzgl.ekranu

 ldx #0
 txa
 sec
zm62 sbc #0
 sta lscr
 lda #$ff
 sta hscr
 clc
i5 lda lscr,x
zm6 adc #0
 sta lscr+1,x
 lda hscr,x
 adc #0
 sta hscr+1,x
 inx
zm5 cpx #0
 bcc i5

zmf lda #0
 asl @
 asl @
 sta scena
 adc #4
 sta scena+1
 adc #4
 sta scena+2
zm4 lda #0
 asl @
 asl @
 sta scena+3
 adc #4
 sta scena+4
 adc #4
 sta scena+5

 jsr obraz
 jmp odchow

*--- animator

proc jsr chow

 stx numspr
 lda #$2a
 sta przes
 lda #0
 sta invrs
petla inc numspr
 ldx numspr
zm2 cpx #0
 bcc *+5
 jmp exit

 lda xpos,x
 sta posx
 lda ypos,x
 sta posy
 lda numzn,x
 ldy #0
 sty b1
 asl @
 rol b1
 asl @
 rol b1
 asl @
 rol b1
 asl @
 rol b1
 sta aspr1
 ora #8
 sta aspr2
 lda b1
zm1 adc #0
 sta aspr1+1
 sta aspr2+1
 lda stat,x
 asl @
 tay
 and #2
 tax
 lda atab2,x
 sta zjmp2+1
 lda atab2+1,x
 sta zjmp2+2
 tya
 bcs *+5
 jmp od5
 bpl od3

* odwracanie

 ldx #7
 stx b1
 ldy #0
od1 lda (aspr1),y
 tax
 lda odwr,x
 ldx b1
 sta buf2+8,x
 lda (aspr2),y
 tax
 lda odwr,x
 ldx b1
 sta buf2,x
 iny
 dec b1
 bpl od1
 lda aspr1+1
 adc #3
 sta aspr1+1
 lda aspr2+1
 adc #4
 sta aspr2+1
 dey
od2 inc b1
 lda (aspr1),y
 tax
 lda odwr,x
 ldx b1
 sta buf1+8,x
 lda (aspr2),y
 tax
 lda odwr,x
 ldx b1
 sta buf1,x
 dey
 bpl od2
 bmi od8

od3 ldy #0
 lda (aspr1),y
 tax
 lda odwr,x
 sta buf1+8,y
 lda (aspr2),y
 tax
 lda odwr,x
 sta buf1,y
 iny
 cpy #8
 bcc od3+2
 lda aspr1+1
 adc #3
 sta aspr1+1
 lda aspr2+1
 adc #4
 sta aspr2+1
 dey
od4 lda (aspr1),y
 tax
 lda odwr,x
 sta buf2+8,y
 lda (aspr2),y
 tax
 lda odwr,x
 sta buf2,y
 dey
 bpl od4
 bmi od8

od5 bpl od9
 ldx #7
 ldy #0
od6 lda (aspr1),y
 sta buf2,x
 lda (aspr2),y
 sta buf2+8,x
 iny
 dex
 bpl od6
 lda aspr1+1
 adc #4
 sta aspr1+1
 lda aspr2+1
 adc #4
 sta aspr2+1
 dey
od7 inx
 lda (aspr1),y
 sta buf1,x
 lda (aspr2),y
 sta buf1+8,x
 dey
 bpl od7

od8 lda <buf1
 sta aspr1
 lda <buf1+8
 sta aspr2
 lda >buf1
 sta aspr1+1
 sta aspr2+1

* przetw.danych

od9 lda posx
 and #3
 tay
 asl @
 tax
 lda atab1,x
 sta zjmp1+1
 lda atab1+1,x
 sta zjmp1+2
 lda maski,y
 sta zmas1+1
 eor #$ff
 sta zmas2+1
 lda #$ff
 sta numl1

 lda posy
 lsr @
 lsr @
 lsr @
 lsr @
 tax
 lda posx
 lsr @
 lsr @
 clc
 adc lscr,x
 sta anascr
 ldy numspr
 sta (adrbuf),y
 lda hscr,x
 adc adrscr
 sta anascr+1
 tax
 tya
 clc
 adc #21
 tay
 txa
 sta (adrbuf),y

 lda numspr
 asl @
 sta b1
 asl @
 adc b1
zm3 adc #0
 sta poczn
 jsr stznkk
 jsr przep

 lda posy
 cmp #16
 bcs zm51
 ldy przes
zm31 lda #0
 sta (adrbuf),y
 iny
 sta (adrbuf),y
 iny
 sta (adrbuf),y
 iny
 sty przes
 jmp a1
zm51 lda #0
 asl @
 asl @
 asl @
 asl @
 adc #16
 ldx #6
 cmp posy
 beq a2
 bcc a2
 jsr wstaw
a1 clc
 lda anascr
zm61 adc #0
 sta anascr
 bcc *+4
 inc anascr+1
 clc
 lda poczn
 adc #3
 sta poczn
 jsr stznkk
 ldy #0
 jsr przep2
zm52 lda #0
 asl @
 asl @
 asl @
 asl @
 ldx #3
 cmp posy
 beq a2
 bcc a2
 jsr wstaw
 jmp petla
a2 ldy przes
zm32 lda #0
 sta (adrbuf),y
 iny
 dex
 bne zm32+2
 sty przes
 jmp petla

exit jsr obraz

 ldy #21
 lda (adrbuf),y
 beq i12
zm21 ldy #0
 sty pr1
 tya
 asl @
 sta pr2
 asl @
 adc pr2
 adc #$2a
 tax
 lda adrbuf
 sta i7+1
 lda adrbuf+1
 sta i7+2
i6 lda (adrbuf),y
 sta b1
 tya
 clc
 adc #21
 tay
 lda (adrbuf),y
 sta b2
 ldy #0
i7 lda $ffff,x
zm33 cmp #0
 beq *+4
 sta (b1),y
 inx
 iny
zm64 cpy #0
 bcs i8
 cpy #3
 bne i7
 tya
 clc
zm63 adc #0
 tay
 bne i7
i8 txa
 sbc #12
 tax
 dec pr1
 ldy pr1
 bpl i6

i12 jmp odchow

* przepisywanie danych

q1 jsr inc
 bcc p2

przep3 ldy numl2
p2 lda (aznp1),y
 sta (aznk1),y
 lda (aznp2),y
 sta (aznk2),y
 lda (aznp3),y
 sta (aznk3),y
 iny
 cpy #8
 beq q1
 cpy #16
 bcc p2
 rts

q3 lda aspr1
 adc #$f7
 sta aspr1
 lda aspr1+1
 adc #3
 sta aspr1+1
 lda aspr2
 adc #$f8
 sta aspr2
 lda aspr2+1
 adc #3
 sta aspr2+1
 bcc p4

q2 jsr inc
 bcc q5

przep lda posy
 and #15
 sta numl3
 ldy #0
 cpy numl3
 beq przep2
p1 lda (aznp1),y
 sta (aznk1),y
 lda (aznp2),y
 sta (aznk2),y
 lda (aznp3),y
 sta (aznk3),y
 iny
 cpy #8
 beq q2
q5 cpy numl3
 bcc p1

przep2 sty numl2
 inc numl1
 ldy numl1
 cpy #16
 bcs przep3
 cpy #8
 beq q3
p4 lda (aspr2),y
 sta pr2
 lsr @
 lda (aspr1),y
zjmp1 jmp $ffff

q4 jsr inc
 bcc przep2

jmp5 ldx pr3
 lda (aznp3),y
 and msktab,x
 ora pr3
 sta (aznk3),y
 ldx pr2
 lda (aznp2),y
 and msktab,x
 ora pr2
 sta (aznk2),y
 ldx pr1
 lda (aznp1),y
 and msktab,x
 ora pr1
 sta (aznk1),y
 iny
 cpy #8
 beq q4
 cpy #16
 bcc przep2
 rts

jmp6 lda (aznp3),y
 tax
 lda pr3
 and msktab,x
 ora (aznp3),y
 sta (aznk3),y
 lda (aznp2),y
 tax
 lda pr2
 and msktab,x
 ora (aznp2),y
 sta (aznk2),y
 lda (aznp1),y
 tax
 lda pr1
 and msktab,x
 ora (aznp1),y
 sta (aznk1),y
 iny
 cpy #8
 beq q4
 cpy #16
 bcc przep2
 rts

jmp1 ror @
 ror pr2
 ror @
 ror pr2
jmp2 ror @
 ror pr2
 ror @
 ror pr2
jmp3 ror @
 ror pr2
 ror @
 ror pr2
jmp4 tax
zmas1 and #0
 sta pr1
 txa
 ror @
zmas2 and #0
 sta pr3
 ldy numl2
zjmp2 jmp $ffff

inc lda aznp1
 adc #$f7
 sta aznp1
 lda aznp1+1
 adc #3
 sta aznp1+1
 clc
 lda aznp2
 adc #$f8
 sta aznp2
 lda aznp2+1
 adc #3
 sta aznp2+1
 clc
 lda aznp3
 adc #$f8
 sta aznp3
 lda aznp3+1
 adc #3
 sta aznp3+1
 clc
 lda aznk1
 adc #$f8
 sta aznk1
 lda aznk1+1
 adc #3
 sta aznk1+1
 lda aznk2
 adc #$f8
 sta aznk2
 lda aznk2+1
 adc #3
 sta aznk2+1
 lda aznk3
 adc #$f8
 sta aznk3
 lda aznk3+1
 adc #3
 sta aznk3+1
 rts

* inne procedury

wstaw lda posx
 ldx #$ff
a3 inx
 cpx #6
 beq a4
 cmp scena,x
 bcs a3
a4 lda msceny,x
 ora invrs
 asl @
 asl @
 asl @
 asl @
 sta invrs
 ldy #0
 ldx poczn
a5 lda (anascr),y
 sty b1
 ldy przes
 asl invrs
 php
 bpl *+4
zm34 lda #0
 sta (adrbuf),y
 inc przes
 ldy b1
 txa
 plp
 bmi *+4
 sta (anascr),y
 inx
 iny
 cpy #3
 bcc a5
 rts

stznkk tax
 lda hadrzn,x
 ora adrzes
 sta aznk1+1
 lda hadrzn+1,x
 ora adrzes
 sta aznk2+1
 lda hadrzn+2,x
 ora adrzes
 sta aznk3+1
 lda ladrzn,x
 sta aznk1
 lda ladrzn+1,x
 sta aznk2
 lda ladrzn+2,x
 sta aznk3
 ldy #0
 lda (anascr),y
 tax
 asl @
 rol invrs
 lda hadrzn,x
 ora adrzes
 sta aznp1+1
 lda ladrzn,x
 sta aznp1
 iny
 lda (anascr),y
 tax
 asl @
 rol invrs
 lda hadrzn,x
 ora adrzes
 sta aznp2+1
 lda ladrzn,x
 sta aznp2
 iny
 lda (anascr),y
 tax
 asl @
 rol invrs
 lda hadrzn,x
 ora adrzes
 sta aznp3+1
 lda ladrzn,x
 sta aznp3
 rts

obraz lda $d40b
 bpl obraz

zm7 ldx #0
zm8 ldy #0
 lda clock
 lsr @
 bcc zma+2
zm9 ldx #0
zma ldy #0
 stx $d402
 stx $230
 sty $d403
 sty $231

zmc ldy #0
 bcc zmb+2
zmb ldy #0
 sty adrscr

zme ldy #0
zmd1 ldx #0
 bcc zmd+4
zmd ldy #0
zme1 ldx #0
 stx aktzes
 sty adrzes

 ldx <bufor1
 ldy >bufor1
 bcc *+6
 ldx <bufor2
 ldy >bufor2
 stx adrbuf
 sty adrbuf+1

 inc clock
 rts

chow ldx #$1e
 lda anascr,x
 sta przech,x
 dex
 bpl chow+2
 rts

odchow ldx #$1e
 lda przech,x
 sta anascr,x
 dex
 bpl odchow+2
 rts

*--- dane

scena dta d'      '
msceny dta b(7),b(6),b(4),b(0)
 dta b(1),b(3),b(7)

maski dta b($ff),b($3f),b(15),b(3)

zmtab dta a(zm1+1),a(zm2+1),a(zm3+1)
 dta a(zmf+1),a(zm4+1),a(zm5+1)
 dta a(zm6+1),a(zm7+1),a(zm8+1)
 dta a(zm9+1),a(zma+1),a(zmb+1)
 dta a(zmc+1),a(zmd+1),a(zme+1),a(0)

atab1 dta a(jmp4),a(jmp3)
 dta a(jmp2),a(jmp1)

atab2 dta a(jmp5),a(jmp6)

buf1   org *+$10
msktab org *+$100
odwr   org *+$100
ladrzn org *+$80
hadrzn org *+$80
bufor1 org *+$a8
lscr   org *+$10
hscr   org *+$10
przech org *+$28
buf2   org *+$10
bufor2 org *+$a8

*--- koniec

 end

p.s.
65816 i jego 16 bit rejestry są bardziej odpowiednie dla spritów programowych, może Vega stworzysz w końcu gre dla tego CPU

Ostatnio edytowany przez tebe (2006-08-11 18:29:00)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

11

Odp: Sprite'y programowe

nie wierze. jest demko avalonu gdzie porusza sie tez sporo sprajtow i to plynnie, jest phantom gdzie sprajty sa duze i poruszaja sie plynnie (nie w trybie znakowym co prawda)

poza tym czy potrzebujesz ruszac wszystko 50 razy na sekunde? mozna kolejkowac i np. poruszac tylko 4 w ramce, w kolejnej ramce nastepne 4, pozadna procedurka obliczajaca szybkosc sprajtow moze ukladac kolejke...

http://atari.pl/hsc/ad.php?i=1.

12

Odp: Sprite'y programowe

tebe napisał/a:

na Atari ten numer nie przejdzie bo Atari tworzy duchy przepisujac je linia po linii z odpowiednich rejestrow [...]

Nie tylko za pomocą DMA można duchy tworzyć :), ale rzeczywiście nie jest to na tyle
swobodne czasowo, aby sobie je mnożyć gdzie się chce i w jakiej ilości się chce, więc
zastosowanie w gierkach gdzie może się taki sprite znaleźc w dowolnym miejscu
ekranu w zależnośći od działań gracza raczej odpada.

---==<<Sc0rpi0>>==---

13

Odp: Sprite'y programowe

tak Scorpio, dla samego "sportu" mozna i samemu przepisywać przy wylaczonym DMA, ale jest to tak nieefektywne że wogole nie warto o tym wspominac

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

14

Odp: Sprite'y programowe

tebe napisał/a:

p.s.
65816 i jego 16 bit rejestry są bardziej odpowiednie dla spritów programowych, może Vega stworzysz w końcu gre dla tego CPU

Najpierw niech ktoś zaimplementuje ten procek w emulatorze ATARIWin. Nie wyobrażam sobie pisania tak skąplikowanej gierki jak BUBBLE BOBBLE na real ATARI.

15

Odp: Sprite'y programowe

Vega masz przecież UltraXE, udaje mi się na tym odpalić wszystko co napisałem dla 65816 łącznie z XLPMax 2.6

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

16

Odp: Sprite'y programowe

vega napisał/a:
Jurgi napisał/a:

Vega, masz przecież swoją stronę - http://yiear.atari8.info/ -  tam wrzuć.

Nawet nie pamiętam jaki tam login i hasło:(

Bash, to napisz do admina, żeby ci ustawił nowe. Co wy, ludzie, tacy nieporadni? :(

17

Odp: Sprite'y programowe

Vega, nie wspomnialem o tym wczesniej, ale wydawało mi sie to oczywiste że powinieneś rozpisać wszystkie klatki animacji ducha (12x24 pixli) na 4 fazy (przesuniete o 1 pixel w prawo)

Ostatnio edytowany przez tebe (2006-08-12 13:48:09)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

18

Odp: Sprite'y programowe

tebe napisał/a:

Vega, nie wspomnialem o tym wczesniej, ale wydawało mi sie to oczywiste że powinieneś rozpisać wszystkie klatki animacji ducha (12x24 pixli) na 4 fazy (przesuniete o 1 pixel w prawo)

Tak właśnie zrobiłem...dlatego w tej chwili wersja BUBBLE BOBBLE na 64KB jest nie możliwa, ale na 128KB da się.

Procka rysująca jest zoptymalizowana już. Teraz pozostały już tylko triki w stylu, że czasem nie wszystko trzeba liczyć dla pewnych wsp. X i Y lub rysować sprite'a na wszystkich znakach.

19

Odp: Sprite'y programowe

xxl napisał/a:

nie wierze. jest demko avalonu gdzie porusza sie tez sporo sprajtow i to plynnie, jest phantom gdzie sprajty sa duze i poruszaja sie plynnie (nie w trybie znakowym co prawda)

jak to demko sie nazywa?
Gierkę Phantom obejrzałem. Tam tylko jeden wzór przeciwnika jest więc pewnie wszystkie fazy animacji są już przygotowane wcześniej w zestawie znaków (wtedy nic dziwnego, że szybko to działa)

xxl napisał/a:

poza tym czy potrzebujesz ruszac wszystko 50 razy na sekunde? mozna kolejkowac i np. poruszac tylko 4 w ramce, w kolejnej ramce nastepne 4, pozadna procedurka obliczajaca szybkosc sprajtow moze ukladac kolejke...

50 razy na sekunde trzeba ruszac graczy i przeciwników. Razem 8 sprite'ow. Pozostałe elementy rzadziej, ale nawet te 8 spritów to nie wiem czy jest możliwe narysować w jednej klatce w trybie znakowym ANTIC 4:(

20

Odp: Sprite'y programowe

Vega możliwe, jednak musisz miec bufory, zeby nie zerwało synchronizacji

p.s.
napisze engine do znakowych taki ze pamieci Atari nie starczy

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

21

Odp: Sprite'y programowe

http://atari.fandal.cz/detail.php?files_id=573

phantom nie jest w trybie tekstowym tylko zwyklej 15tce. grzebalem kiedys w phantomie ... jak znajde notatki (moze, moze, moze) mozna bylo przyspieszyc ruch sprajtow bez straty plynnosci ruchu

po demku, ktore poslales widze, ze sprajty nie ruszaja sie 1 na ramke... nadal uwazam, ze powinienes stworzyc procedure kolejowania sprajtow do ruszenia niz optymalizowac sama proceke ruchu sprite

reszte pozniej.. laptok mi sie zaraz wylaczy a nie ma u mnie pradu ;-)

http://atari.pl/hsc/ad.php?i=1.

22

Odp: Sprite'y programowe

obejrzyjcie sobie gre POOYAN, jest na znakach

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

23

Odp: Sprite'y programowe

xxl napisał/a:

phantom nie jest w trybie tekstowym tylko zwyklej 15tce. grzebalem kiedys w phantomie ... jak znajde notatki (moze, moze, moze)...............

no fakt nie sprawdzałem w jakim trybie. Ale mnie interesuje tylko tryb znakowy, ze względu na 5-ty kolor.

xxl napisał/a:

.......... mozna bylo przyspieszyc ruch sprajtow bez straty plynnosci ruchu

ale w jaki sposób?

24

Odp: Sprite'y programowe

www.atari.pl/phantomturbo.atr


dlatego mowie - nie wierze. bomb jacki, bubble, alienbreedy itp sa do zrobienia na atari8

Ostatnio edytowany przez xxl (2006-08-12 18:22:51)

http://atari.pl/hsc/ad.php?i=1.

25

Odp: Sprite'y programowe

XXL po tym przykładzie widać że masz problem z płynnym scrolem :) W Phantom duchy stawiane są co znak a nie co pixel, jest to najbardziej prymitywna metoda, jeśli miałbyś robić gry w ten sposób to daruj sobie.

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C