76

Szczerze. Wymiękłem. :)
Siedziałem do 5 rano, oczy na zapałkach i d....
Wydawało mi się to banalne i pewnie jest. Bo proste rzeczy potrafią najbardziej dać w kość jak się patrzy ze złej perspektywy.
Rozwiązałem to doraźnie tablicą. Ale nie do końca podoba mi się to rozwiązanie.
Bo co gdy będę chciał przewijać drugi plan z inną prędkością? hmmm

77

Normalnie masakra :)
Jest jak jest, nie ma co rozpaczać. Zrobiłem tablice skróciłem scrolla. Lepiej na ta chwilę nie bedzie, po Cybie się tym zajmę.
Musiałbym cały kod od nowa przepisać, bo jak zacząłem modyfikować to uhhhh. Przynajmniej rozgryzłem o co chodziło.
Ale tak to jest jak się na początku wszystkiego nie zaplanuje i potem sie ciągną dziwadła w kodzie za człowiekiem.
Jednakże było to pisane pod wpływem impulsu bez zamiaru kończenia więc nie ma co rozpaczać.
Przynajmniej wiem na przyszłość co mnie czeka jak się za coś podobnego wezmę.
Zostawiłem pasek żeby zobaczyć gdzie kod się kończy na VB (muza jest nie uwzględniona)
No cóż, uważam że Flimbo jest jak najbardziej w zasięgu Atari.
Na tą chwilę jest użyty jeden generator dla pierwszych 6 lini i ostatnich dwóch. Łącznie 56 znaków.
W środku jest jeden generator (chociaż w programie jest zaplanowane na dwa) który zajmuje 20 znaków plus 10 na drugi plan.
W sumie przy dwóch zestawach można by przeznaczyć pomiędzy 64 a 96 znaków na tylni plan.
No można użyć więcej zestawów fontów ale to już w pamięci ciężko będzie się zmieścić.
Niestety system "bankowania" spritów zabiera 10kb pamięci ale myślę że warto bo jest bardzo szybkie. Tylko jest trochę z tym zabawy. No i małe ograniczenia.
Największy problem to jest chyba z zaplanowaniem całej grafiki, zgranie wszystkiego. Ze nie wspomnę że rysowanie na drugim tle wymaga zachowania pewnych zasad dosyć rygorystycznych.
Dlatego wcześniej migało, przepraszam za wszystkie złe słowa które w myślach powiedziałem na G2f. :) Mea culpa
Szczerze? Niby takie badziewie a jednak mnie cieszy że po tylu latach przerwy jeszcze coś mogę zrobić dla Atari.

Post's attachments

Flimbo.xex 15.6 kb, liczba pobrań: 36 (od 2011-03-18) 

Tylko zalogowani mogą pobierać załączniki.

78

Nie no, wyypas. Mam nadzieje, ze uzyjesz swoich doswiadczen piszac jakas kiler gre :)

79

Eagle napisał/a:

Sorki za słabą grafę, ale envision dawał mi w kość i G2F też :)

Do edycji fontow i przedewszystkim map polecam EnvisionPC Reborn
http://atarionline.pl/forum/comments.ph … e=3#Item_8
Zmiany w stosunku do oryginalnej wersji są tak rozlegle ze trudno je spisac. Jakub Husak praktycznie w locie poprawia i dodaje nowe funkcje na zyczenie.

Moglbys napisac w jaki sposob wydajnie animujesz duszki? Tzn domyslam sie ze za pomoca buforow, ale 10kB? Kazda klatka animacji to osobny bufor?

80

>Moglbys napisac w jaki sposob wydajnie animujesz duszki? Tzn domyslam sie ze za pomoca buforow, ale 10kB? Kazda klatka animacji to osobny bufor?

Metoda jest prosta, wręcz banalna ale pamięciożerna i niesie pewne ograniczenia.
Postaram się pokrótce opisać.

Komodorowcy mają banki na sprajty. Trzymają w pamięci w odpowiedni sposób w blokach co 64 bajty.
Potem tylko wskazują który sprajt ma skąd pobierać dane z tych bloków.
Pomyślałem a jakby coś takiego zrobić u nas.
I wyszło nawet nieźle. Dla obiektów poruszających się tylko w osi X jest to super rozwiązanie.
A więc:

Bank duszków na Atari (to wiadomo)
0-2ff puste
300-3ff pociski
400-7ff gracze 1-4

tworzymy 8 takich banków
zabiera nam to 16kb pamieci
ale jeśli nie używamy pocisków to adresy 0-3ff mamy wolne (na np fonty czy dane jakieś)
czyli faktycznie zużywamy 8 kb rozrzucone w obszarze 16kb (niestety adresy banków muszą być na granicy 2 kb więc nie da się tego ścieśnić)
Dla uproszczenia przykładu powiedzmy że mamy sprajta o szerokości 16 cykli koloru czyli używamy wszystkich czterech graczy.
Normalnie byśmy przepisali do adresu $400+pozycja Y,$500+pozycjaY,etc
ale możemy zrobić to dla każdego z ośmiu zarezerwowanych na to banków wpisując do każdego gotową fazę animacji
Bank0 - 1faza prawo
Bank1 -2faza prawo
Bank2 -3 faza prawo
Bank3 -4faza prawo
Bank4 -1faza lewo
Bank5 -2faza lewo
Bank6 -3faza lewo
Bank7 -4faza lewo

i możemy prosto animować zmieniając tylko $d407
lda #> tutaj adres banku
sta $d407

po prostu animujemy sprajta
ale co z następnymi?
robimy to samo kopiujemy je do banków w odpowiednie adresy odpowiadajace pozycji Y
i na DLI zmieniamy $d407 na numer fazy animacji jaką potrzebujemy
Ja mam zrobioną tablicę adresów faz, i na niej operuję na VB ustalając jaka faza animacji będzie wyświetlana.
A na DLI pobieram z niej bezpośrednio i przepisuję bank, czyli

DLI1
...
...
 lda TabSprite
 sta $d407
...
...
 rti

DLI2
...
...
 lda TabSprite+1
 sta $d407
...
...
rti

Ograniczenia:
Jeśli to jest jeden sprajt w lini czyli np 16 pixelowy złożony z czterech graczy to nie ma ograniczeń.
Jeśli są dwa to wtedy pierwszym (grac 0+1) można swobodnie animować ale drugi będzie miał ograniczenia.
Bo np. jeśli pierwszy bedzie szedł w lewo a drugi będzie chciał iść w prawo to nie da rady. :) Fazy się nie zgrają.
Trzeba wtedy do drugiego sprajta (gracz2+3) wrzucić animację która będzie niezależna od kierunku.
Mogą to być monety, gwiazdki (jak w Crowland), latające kule, itp
Można też użyć pocisków ale znika nam extra 2kb. Za to można zrobić z nich w połączeniu z graczem (0 i 1) sprajty jak na komodzie 12 pixelowe.

81

Dzieki za szczegolowe wyjasnienia. Faktycznie potwierdza sie ze im bardziej chcemy zaoszczedzic taktow procesora tym wiekszą iloscia pamieci musimy za to zaplacic...

82

Prace nad Cybem w toku.
Ale jestem na skraju załamania nerwowego. :)
Zacząłem w poniedziałek, myślę sobie do środy skończę. hehe optymista
Zaplanowałem sobie "specjalny" tryb graficzny.
No i zaczęło się konwersje, zamiany bitów, rozszerzanie ekranu, znowu konwertowanie, cyklowanie, znowu zmienianie :)
Skończyło się że teraz u mnie $200=$FFFA ;) te jedenaście cykli było jak zbawienie.
Bo przy szerokim ekranie to się nic nie da przepisać na DLI a co dopiero 6 rejestrów. O WSYNC to można pomarzyć.
Preview jest w dużej mierze skończone. Zostało tylko sceny narysować.
Dopóki to były pojedyncze obiekty żeby tylko zobaczyć jak to się prezentuje to było wszystko ok.
Ale zrobić klika, co ja mówię.... jedną scenę przy dwóch generatorach to ja już wymiękłem.
EnvisionPC się to tego nie nadaje, do tego robi różne dziwne numery. Jak przed chwilą zgubił mi drugi generator znaków.
Na przyszłość i tak trzeba będzie coś takiego sobie napisać ale na tą chwilę zostało mi tylko narysować sceny więc potrzebuję czegoś gotowego.
Wszystko chyba będzie lepsze od tego czym dysponuję teraz.
Może słyszeliście o jakimś edytorze który pozwala na tworzenie obrazu w tym a'la Avalon trybie (JGP 2x2).
Będę wdzięczny za wskazanie, a ja tym czasem w trosce o swoje zdrowie dzisiaj zrobię sobie już wolne.

83

CYBERNOID !!! pycha. ktora czesc? z jakiej maszyny? przenosisz kod czy piszesz od poczatku? w jakim trybie - graficzny/tekstowy?

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

84

Druga część z c64
Kod całkowicie mój.
W trybie tekstowym + 26 DLI
Jest to raczej próba generalna tego trybu, który wymyśliłem sobie na potrzeby innej gry.
Oraz chęć sprawdzenia jak by cyb mógł  wyglądać na JIL gdyby ktoś miał dużo samozaparcia i się do tego przyłożył.
No a dla mnie jest to idealna okazja do przypomnienia sobie kodowania.
Tak jak w przypadku Flimbo będzie miało to więcej wspólnego z demem niż z grą.
Jeszcze nie czuje się na siłach pociągnąć taki projekt do końca.

85

Z racji że przez następny miesiąc będę chyba nie dostępny dla JIL postanowiłem szybko coś sklecić z tego co miałem.
Bez ulepszonego Envisiona nawet nie zabieram się za to.  Cała nadzieja w Jakubie. :)
Przez ostatnie 2 tyg nie zrobiłem dosłownie nic z tym. Więc jest jak jest.
Generalnie próba generalna tego trybu. Do pewnych gier sie nada. Na razie kolorowałem zero-jedynkowo w assemblerze.
Zrobiłbym edytor do tego ale nie mam jeszcze pewności czy nie skuszę się na wyciśnięciu 2 kolorów jeszcze w linii.
Więc organizacja ekranu i układ atrybutów się może zmienić.
Paleta JIL jest do bani. A ja do tego jako grafik jestem jeszcze gorszy. Więc wygląda jak wygląda. ;)
Niby 120 kolorów na tych pseudo atrybutach mogę użyć na ekranie. No ale jak?

Post's attachments

CybTesty.7z 7.15 kb, liczba pobrań: 46 (od 2011-04-15) 

Tylko zalogowani mogą pobierać załączniki.

86

Nie no, miodzio :) Keep working!
A paleta atari wcale nie jest do bani. Jest tyle kolorow, ze czasami z nadmiaru bogactwa ciezko cos dobrac. W przeciwienstwie do c64 - 16 kolorow i nie ma wyjscia. Trzeba packac tym co jest :)

87

wyglada bardzo ladnie ale nie sadze zeby udalo sie z tego zrobic cybernoida 2 :( nie wystarczy znakow w generatorze na ruchome obiekty, chyba ze tryb znakowy bedzie uzyty jak w bbcmicro -ale to trzeba by napisac wszystko od poczatku

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

88

Na tą chwilę jest wolne prawie połowa generatorów znaków.
Ekran jest w trybie podobnym do 4+ są używane 2 zestawy.
Jak wygląda ten tryb w bbc?

89

saze ze braknie i to bardzo duzo znakow (chyba ze konwersja nie bedzie az tak dokladna - wybuchajacy przeciwnicy na pol ekranu, sklady stateczka ktore zostawiaja 'smugi') itp.

najlepiej na przykladzie obejrzec hobgoblina (pamiec ekranu to 1,2,3,4,5,6,7,8 itd. a w generatorze znakow rysyjesz - w pamieci ekranu tylko ustawiasz atrybut inverse dla koloru)

zreszta bardzo jestem ciekawy tego tyt. z racji tego ze przymierzam sie tez (kiedys) do cybernoida ale jedynki.

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

90

Są pewne ograniczenia które mnie nie puszczają.
No niestety jak się nie da czegoś zrobić tak samo to trzeba to zrobić inaczej (lepiej albo gorzej)
Wybuchanie przeciwników na pół ekranu nie wchodzi w grę. Atrybuty mi się posypią jak domino. :)
Dla tego trybu przewiduje zrobić "dynamiczne" generatory.
Z zasady góra są 2 większe obiekty naraz na ekranie.
Generator dzielę na elementy stałe (podłoża, ściany itp.) powiedzmy pierwsze 32 znaki (razy 2)
I elementy zmienne (potwory, działa, itp) które alokuje w generatorze przy zmianie sceny - 48 znaków (razy 2)
Dane sceny nie zawierają wtedy tych obiektów przez co są łatwiejsze w kompresji. Potem tylko narzucam taki obiekt na ekran.
No i na końcu na obiekty ruchome - 48 znaków (razy 2) - myślę że powinno wystarczyć.
No ale to są tylko testy graficzne do gry daleka droga.
Cybernoid bardzo mi pasował do tych testów i tylko dla tego się za niego zabrałem.

ps. Czekam na jedynkę, bo głupio by było żeby się dwójka pierwsza pokazała :)

91

mozesz dlugo czekac ;-)

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

92 Ostatnio edytowany przez Eagle (2011-04-15 21:39:59)

>mozesz dlugo czekac ;-)

Ja mam sporo czasu :)

A teraz parę szczegółów.
4 podstawowe kolory dla ekranu są stałe. (Czarny, biały, brązowy, jasno brązowy)
Nie są zmieniane na DLI.
Za to co linie zmieniam to:

DLIexample
    sta dl_a
    sta dl_a    ;powtórzone bo potrzebowałem przesunąć o 3 cykle :)
    lda #$00 
    sta $d012
    lda #$00
    sta $d013
    lda #$00
    sta $d014
    lda #$00 
    sta $d409
    lda #$00
    sta $d019
    lda #$00
    sta $d015
    lda #<NextDLI
    sta $FFFA
    lda #>NextDLI
    sta $FFFB
    lda dl_a
    rti

Kolejność przepisywania rejestrów musi być tak jak jest.
Ekran jest 48 znakowy, przy aktywnych wszystkich DMA ciężko zdążyć przed BadLinem.
Wbiłem się z DLI prosto w $FFFA. Na początku odpalam procedurę synchronizującą DLI z VBLKI.
Krótko mówiąc VBLKI jest odpalane jakby to było DLI ale na wszelki wypadek potem jest sprawdzany bit NMI.
I w razie jakby się wywaliło znowu odpali procedurę synchronizacji. (ale mi się to nie zdarzyło, jeszcze)

"Atrybuty" są zrobione z PM poczwórnej szerokości oraz znaku inversu.
Przed przerysowaniem ekranu kolory PM z tablicy 80 bajtowej przepisywane są prosto w DLI
Potem z tablicy 20 bajtowej przepisywane są kolory inversu prosto w DLI
Potem z tablicy 100 bajtowej generowane są dane w bankach PM (kwadraciki o wielkości znaku 4x8- moze byc 4x1 ale tablica będzie miała 800 bajtów)

Poniżej parę obrazków poglądowych. Na pierwszych dwóch nie widać zmiany inversu bo ekran jest pusty :)

http://img860.imageshack.us/img860/2196/colormap1.png

http://img823.imageshack.us/img823/8026/colormap2.png

http://img23.imageshack.us/img23/5115/cybd.png

93

oj, bardzo bardzo bardzo ładne!

http://www.5oft.pl/

94

Ekstra :) Szkoda, że na forum nie ma takiego buttona z literą "F" i podpisem "Lubię to" ;)

95

Eagle napisał/a:
DLIexample
    sta dl_a
    sta dl_a    ;powtórzone bo potrzebowałem przesunąć o 3 cykle :)
    lda #$00 
    sta $d012
    lda #$00
    sta $d013
    lda #$00
    sta $d014
    lda #$00 
    sta $d409
    lda #$00
    sta $d019
    lda #$00
    sta $d015
    lda #<NextDLI
    sta $FFFA
    lda #>NextDLI
    sta $FFFB
    lda dl_a
    rti

Dzięki odpowiedniemu rozmieszczeniu kolejnych procedur obsługi DLI w pamięci można pozbyć się zmiany jednego z bajtów składowych wektora przerwań ($FFFA).

96

Eagle napisał/a:

EnvisionPC się to tego nie nadaje, do tego robi różne dziwne numery. Jak przed chwilą zgubił mi drugi generator znaków.

@Eagle. EnvisionPC Reborn (w porównaniu do bazowego programu - EnvisionPC) jest mocnym rozszerzeniem. Dodaję na zawołanie nowe funkcje. Poprawiam stare. Jeśli coś nie działa, nie narzekaj, tylko pisz, że nie działa, poprawimy :)

Jest na to przeznaczony wątek na atarionline.pl

97

Marek podsunął mi inne rozwiązanie.
Jeszcze nie testowałem ale wygląda obiecująco.
Wtedy Envisiona będę używał tylko do edycji fontów.
Ale dzięki, pewnie się czasem odezwę.

98

Tutaj też wrzucę bo nie wszyscy zaglądają na AAge
W nocy mnie naszło żeby sprawdzić Emkay mode :) (antic 13+digi)
Z drugiej strony zawsze zastanawiało mnie jakby to było odpalać sample na DLI.
Do tego użyłem metody z cyba.
Jest jedno DLI wpięte w $FFFA uruchamiane 60 razy (3kHz)
VBLK nie używam.
Konwersja jakiegoś sampla z netu przy pomocy goldwave i zapis do 8bit unsigned potem przerobione na 4bit przez zwykłe przesunięcie.
Charczy strasznie, ale chyba w dużej mierze wina konwersji. Nie ma to jak ze samplować na JIL.
Program pisany z "marszu" więc o jakiejkolwiek optymalizacji kodu można zapomnieć.
Ale ogólnie daje rade ten tryb. Pure 50fps :)

Post's attachments

EmkayMode.xex 25.41 kb, liczba pobrań: 33 (od 2011-06-02) 

Tylko zalogowani mogą pobierać załączniki.

99

Przeczytałem że JIL potrafi odtwarzać sample w porywach do 6bit.
Na muzyce znam się tyle co .... mozna by wymieniać ;)
Od tego był zawsze TL.
No ale zacząłem kombinować żeby odtworzyć chociaż 5 bit.
No ale nie słyszę rewelacyjnej różnicy.
No może sampla mam marnej jakości albo moja procka jest do d....
Więc pytanie do zorientowanych w temacie.
Ja kombinuje sobie tak w łepetynie.
Mamy wartość sampla 5 bitow $13 - czyli dec 19
4 bitowo mamy 9,5 - więc ja to widzę tak do jednego kanału zapisuję 9 do drugiego 10
Bardzo proszę żeby ktoś mnie wyprowadził z błędu albo przyznał rację bo nie wiem czy w dobrym kierunku zmierzam.

poniżej kod:

    lda $xxxx
    lsr a
    ora #$10
    sta $d201
    adc #$00
    sta $d203

100

Problem rozwiązałem.
Wstyd się przyznawać :D