1

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
http://atari.pl/hsc/ad.php?i=1.

2

Az sie prosi by te "slupki" byly na duszkach sprzetowych (ze zmiana wspolzednych poziomych na DLI) albo narysowane "na stale" i przesuwane za pomoca plunnego przesuwu linii (w poziomie) i manipulacji adresem danych obrazu (w pionie) - przyklad: gra "Ballblazer". To nie zajmuje prawie czasu procesora, bo jest juz narysowane.

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

3 Ostatnio edytowany przez xxl (2008-05-04 13:28:14)

slupki na pm - tez o tym myslalem tylko, ze oprocz pozycji na dli trzeba by ustawiac tez szerokosc bo czasem 6 slupkow nachodzi na siebie czyli missiles tez sa potrzebne... ale gra sporo by stracila - zmiana pozycji co 2 pixele, zmana szerokosci co 2 pixele, a co najwazniejsze gra nie wygladalaby jak oryginal ;) poza tym moze pm uzyje sie do narysowania auta? albo do symulacji oswietlenia przez reflektory drogi w nocy ;D



---
poprawiony silnik spritow:
http://atari.pl/nr1.rar - nie wyswietlam 4 spritow bo obraz zacznie migac - w ostatecznej wersji obraz bedzie 2buforowy

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

4

XXL, nie wiem, czy to coś pomoże, ale kiedyś "dawno temu bawiąc się" w program do animacji sticki-bones'ów wykorzystałem to, że możesz pamięć grafiki przełączać pomiędzy różnymi obszarami pamięci, a wywołanie graphics N czyściło ten obszar w locie... więc jak w jednym obszarze rysowałem, to drugi "podsyłałem" do zerowania...

___
Press play on tape...

5

http://atari.pl/nr2.rar - wszystkie sprity na ekranie w 1 ramce. czas na klawiature

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

6

O ile dobrze pamiętam, to milion lat temu nad jez. białym grałem w tą grę w takiej budzie z automatami.

All I hear is the sound of me falling on the ground

7 Ostatnio edytowany przez xxl (2008-05-06 08:13:19)

plik uruchamiamlny dla atariwinplus  http://atari.pl/nightdriver1.a8s

f2 sart, f3 gaz do dechy

brakuje 2 spritow - gdy sa rysowane brakuje czasu na sama gre i zaczynaja sie smieci. optymalizacja w toku.

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

8

zrob doubble buffering - rysuj na 2 ekranach i przelaczaj (pokazuj narysowany, a rysuj na roboczym), chyba ze z jakis wzledow tutaj nie mozesz - dopiero w domu lookne sobie .rary ;o.

9

xxl napisał/a:

plik uruchamiamlny dla atariwinplus  http://atari.pl/nightdriver1.as8

link coś nie tegez

___
Press play on tape...

10

poprawione

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

11 Ostatnio edytowany przez maw (2008-05-06 08:20:06)

http://www.flashfactory.ovh.org/show/atari/nr1_a8s.png ups :)

//EDIT: fioletowe linie od góry pulsowały (raz było ich mniej, raz więcej) przy jeździe, pozostałe pasy wylazły, gdy coś nacisłem - SELECT+LEFT ?

___
Press play on tape...

12

slepe irq. tak ma byc narazie. fioletowy pasek to czas jaki potrzebuje silnik spritow do obslugi 14 obiektow. obslugiwane sa tylko klawisze konsoli - tylko dla demonstracji tego co narazie jest zrobione.

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

13

ciężki ten silnik - przy full speed i odświeżaniem co 2gą klatkę 300% szybkości atarynki (c2 4300@1.8Ghz)

___
Press play on tape...

14

? nie rozumiem.

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

15

mea culpa - można usunąć tamte info, mieszałem z odświeżaniem ekranu i musiałem coś przemieszać za bardzo - leci tak samo szybko jak river raid :)

___
Press play on tape...

16

http://atari.pl/nightdriver2.a8s

f2 - start
joy sterowanie, ustawiony jest bieg 2 na stale.

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

17 Ostatnio edytowany przez maw (2008-05-07 07:35:54)

http://www.flashfactory.ovh.org/show/atari/nr2_a8s.png
za pierwszym razem myślałem, że to brak jakiejś pocedurki pod koniec (np. migania ekranu jak kończy się czas) ponieważ śmieci pojawiały się w regularnych odstępach czasu, za drugim myślałem, że to wina mojego jeżdżenia po "pachołkach"...

za trzecim razem zaczęły się pojawiać po paru naprzemiennych ostrych zakrętach.

Co do rysowania i czyszczenia słupków - rysowałbym od pierwszej linii słupki, od ostatniej bym kasował obszary zmienne (a więc tylko słupki), a po kasowaniu rysował nowe słupki - ale wymagało by to trzymania tablicy pozycji słupków (obszarów zmiennych) w pamięci i przeliczania jej przed przystąpieniem do wyświetlania.

//EDIT: myślę, że to widać, jak układają się ślady słupków w drogę w lewo, potem prosto właściwa droga, a potem znowu ślady układają się w drogę w prawo

___
Press play on tape...

18

http://atari.pl/nd3.jpg

ze smieceniem sobie poradzilem, dodalem cieniowanie na pm (slupki dalej polozone sa ciemniejsze), dodalem zmiane biegow.

brakuje zmiany trasy (3 trasy)

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

19 Ostatnio edytowany przez maw (2008-05-13 10:46:46)

łooo, XXL rządzi! (ponownie :D)

Kiedy będzie jakiś zrzut do przetestowania ?

___
Press play on tape...

20

http://atari.pl/ndx.a8s

wylaczylem pm, cieniowanie zostawilem... biegi: joy do siebie wyzszy bieg, joy do gory nizszy bieg.

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

21 Ostatnio edytowany przez maw (2008-05-14 07:59:14)

czyli standard z PolePosition, okey.


//EDIT: gra się super, nie zauważyłem jakichś "nieścisłości", czekam na domontowanie autka lub przynajmniej jakąś kreskę jego szerokości na dole, bo teraz strasznie trudno jest się zmieścić między słupkami :)

___
Press play on tape...

22

sroll gor: http://atari.pl/ndm.rar filmik

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

23

No ladne cacko!!!
Jeszcze tylko 4 playery i 4 missile ladnie pokolorowane na dole jako samochod (niech z wykopem bedzie ;) ) i gotowe!!!

Moje gratulacje!

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

24

demo gry. gra jest na finiszu jesli ma ktos jakies uwagi to slucham.

1. wylaczanie basica bedzie w czolowce ktorej tu nie ma dlatego nalezy wylaczyc basic przed zaladowaniem gry.
2. wcisniecie jakiegokolwiek klawisza zawiesi gre (potrzebne mi do testowania) usune w koncowej wersji
3. klawisz start rozpoczecie, dzoj gora/dol - biegi, prawo/lewo - skret, fire - gaz
4. w czolowce jest wybor trasy (tu jest tylko jedna)


http://atari.pl/night_demo.obx

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

25

Ładne. Kolejne potwierdzenie teorii, że grywalność jest odwrotnie proporcjonalna do złożoności grafiki.

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.