C64Power Forum
Software => Programowanie => Wątek zaczęty przez: Zbych w 19 Kwietnia 2017, 14:39
-
Chodzi mi o o taki układ ekranu gdzie powiedzmy pierwsze 20 wierszy jest scrollowanych (w pionie) a pozostałe poniżej są nieruchome, taki typowy układ ekranu gry. Niebardzo wiem jak przysłonić tą dolną część obszaru scrolowanego żeby nie było widać rysowanych znaków. Jedyne co mi przyszło do głowy do zrobienie cienkiego paska ze sprajtów którym zasłoniłbym ten obszar, ale może jest jakiś inny trick?
-
a nie wystarczy, ze dociagniesz do "rownych" pixeli, czyli co 8 linii?
-
Może źle się wyraziłem, chodziło mi o 20 wierszy ekranu znakowego, czyli mamy 20 wierszy znakowych na scroll poruszający się w górę lub dół i kilka wierszy niżej np. na wyświetlenie wyniku liczby żyć itp. Nie wiem jak przysłonić tą granicę gdzie kończy się obszar ruchomy a zaczyna obszar statyczny tak żeby nie było widać uzupełniania grafiki gdy scroll jedzie w górę.
-
Chyba mam drugi pomysł poza przysłoną ze sprajtów, tylko jest to bardziej pamięciochłonny i nie wiem jak to się będzie zachowywać... ale mogę zmienić na granicy obszarów czcionkę na pustą i wtedy nie będzie widać rysowanych znaków bo będą puste :) no tylko że zje to całe 2kb pamięci i chyba trudno mi to będzie docyklować. Da się w połowie wysokości wyświetlanego wiersza znaków zmienić czcionkę?
-
nie do konca rozumiem w czym problem niestety ;) moze jakis screenshot?
-
Tak by to miało wyglądać
-
Teraz jak nad tym myślę to chyba wystarczy dodać w części nieruchomej pusty wiersz znaków tak żeby nie było widać że tam są różne kolory na granicy, tylko coś nie mogę sobie poradzić z docyklowaniem tego w momencie gdy badline występuje tuż przed granicą obszarów.
-
mozesz sobie w kodzie zrodlowym do kombi-nacja obcykac jak zrobilem cos podobnego
-
mozesz sobie w kodzie zrodlowym do kombi-nacja obcykac jak zrobilem cos podobnego
ooo Raf widzę małe "luki" w kodowaniu na C64 :D ...ale ja ma to samo, więc muszę co jakiś czas coś kodować na C64, bo po prostu zapominam, a to chyba przez kodowanie na PC :/
Zbych jeśli chodzi o płynne przesuwanie w pionie to na pewno musisz zostawić pustą linię pomiędzy tymi dwoma obszarami. Przesuwasz np. osiem punktów po jednym do góry poprzez $d011 i $d012, przy ósmym punkcie wracasz znowu do punktu zero oraz dalej jak w zwykłym scrollu poziomym tzn. kopiujesz całość do góry co 8 pikseli i wklejasz następną linijkę na samym dole przesuwanego obszaru, a w dół to na odwrót, o ile o to chodzi, a może V-12 coś powie więcej ? :)
-
Już sobie poradziłem, stwierdziłem że scroll o 1 pixel na ramkę będzie za wolny więc dałem co 2 i problem z krótką liniią rastra blisko granicy obszarów rozwiązał się sam. Teraz zastanawiam się nad inną rzeczą - o ile przesuwanie znaków mogę zrobić na podwójnym buforze (zamieniając adresy pamięci ekranu w $D018) to czy nie będzie widać jakiegoś migotania jak będę scrolował pamięć koloru. Muszę chyba po prostu napisać i przetestować.
Zacząłem pisać programik testowy z myślą że obejdzie się bez podwójnego buforowania ale jak doszło scrolowanie koloru okazało się że nie da rady i muszę przerobić na podwójny bufor ekranu.
-
mozesz sobie w kodzie zrodlowym do kombi-nacja obcykac jak zrobilem cos podobnego
ooo Raf widzę małe "luki" w kodowaniu na C64 :D ...ale ja ma to samo, więc muszę co jakiś czas coś kodować na C64, bo po prostu zapominam, a to chyba przez kodowanie na PC :/
Przynosze wedke a nie rybe ;)
Sa tez gry, w ktorych ten problem zostal rozwiazany, chocby boulder dash w 1984 ;D
-
to czy nie będzie widać jakiegoś migotania jak będę scrolował pamięć koloru.
nie będzie. Ten scroll to jakieś "napisy końcowe"? Można też w jednej linii "zgasić kolory" czyli np. zinwertować fonty, i gasić przez d021 (czy nawet zrobić fade'ing)- można też zakryć linię przez "wrong mode" d011 (bit 6)- który wyświetla tylko czarny.
-
Sa tez gry, w ktorych ten problem zostal rozwiazany, chocby boulder dash w 1984 ;D
Też myślałem o Boulder..., ale akurat w tam nie są używane sprajty więc nie było by problemu żeby je wykorzystać do wyświetlania wyniku i zasłonięcia górnych wierszy, dlatego nie sprawdzałem jak tam jest to zrobione.
nie będzie. Ten scroll to jakieś "napisy końcowe"? Można też w jednej linii "zgasić kolory" czyli np. zinwertować fonty, i gasić przez d021 (czy nawet zrobić fade'ing)- można też zakryć linię przez "wrong mode" d011 (bit 6)- który wyświetla tylko czarny.
Zastanawiam się nad napisaniem na C64 pewnej gierki w którą niedawno grałem na Androidzie, do tego potrzebny jest typowy 4-kierunkowy scroll. Nie wiem czy coś z tego wyjdzie ale na razie moim celem jest zrobienie takiego scrolla z kafelków 2x2 znaki.
Właśnie chyba o takie coś mi chodziło jak ten trick D011. Co prawda pokazały mi się 1 pixelowe artefakty w linii rastra w której zapaliłem bit 6 ale jeszcze dokładnie tego nie testowałem, w każdym razie takie info może mi się przydać, dzięki.
-
Zbych'u spróbuj jeszcze z tym kodem źródłowym. W spakowanym zip'ie jest też wykonalny prg (P00) jako example . Przykładowe kopiowanie, o którym napisałeś. Poruszasz się joystickiem :)
-
Dziś miałem chwile czasu żeby sobie pokodzić i mam problem/pytanie:
podczas przesuwania ekranu w pionie dolna część która powinna być statyczna (zapodaje tam stałą wartość do przesuwu do $D011) przeskakuje o jeden wiersz w górę i zastanawiam się czy da się tego uniknąć za pomocą jakiegoś tricku lub odpowiedniego docyklowania czy to taka "uroda" VICa i muszę ten przeskok kompensować przepisując zawartość części statycznej o jeden wiersz w dół (a potem znowu w górę)?
Widać to na załączonym programiku. Nie wykonuje on pełnego scrolla tylko modyfikuje przesunięcie ekranu o 2 piksele przy zmianie kierunku joya. Czarny pasek zrobiłem tym trickiem "wrong mode".
Wydaje mi się że gdybym umieścił statyczną część u góry ekranu to nie było by tego problemu i być może tak właśnie zrobię ale chciałbym wpierw wiedzieć czy moje przypuszczenia na temat VICa są prawidłowe i nie da się tak podzielić ekranu bez przepisywania statycznej części o jeden wiersz w górę lub dół w zależności od tego co w jakiej pozycji jest górna część scrolowana.
-
Sorry Zbych'u, ale musimy najpierw poczekać na wszechwiedzącego boga Comankh'a, który najpierw oceni, tajemniczo wyjaśni nam w "dwóch słowach", lub wklei link np. na youtube . Nie wiem czy mogę chociaż pobrać twój plik i zobaczyć w czym tkwi problem, więc mogę Comankh ? Szkoda Zbych'u bo fajny temat i aby twój wątek poleciał przez niego do śmietnika ...
-
w irq co ramke:
lda #$c0 <- linia rastra podzialu
cmp $d012
bne *-3
lda $d011
pha
pha
ora #$78
sta $d011
lda #$c0+8
cmp $d012
bne *-3
pla
and #$f8
ora #$00 <- 0-7 przesuniecie
sta $d011
bit $d011
bpl *-3
pla
sta $d011
nieladnie ale z grubsza chyba o to chodzilo, pokombinuj i masz bo jak sie domyslam na starcie ekranu wstawiasz do $d011 przesuniecie scrolla
najlepiej podzielic na oddzielne przerwania zeby nie tracic cykli
-
w irq co ramke:
[...]
nieladnie ale z grubsza chyba o to chodzilo, pokombinuj i masz bo jak sie domyslam na starcie ekranu wstawiasz do $d011 przesuniecie scrolla
najlepiej podzielic na oddzielne przerwania zeby nie tracic cykli
Dzięki za pomoc, ale największym problemem jest odpowiednie docyklowanie, w przeciwnym wypadku zaczynają się dziać dziwne rzeczy i tu był chyba mój problem. W zasadzie to udało mi się zrobić podstawę, na razie bez scrolu kolorów. Miałem też problem ze sprajtami i najlepsze co udało mi się z nimi zrobić to "uciąć" kilka linii wcześniej przed linią rastra w której włączam czarny pasek, innego pomysłu nie mam.
-
Ja jak potrzebuje uciac sprajty w linii X to zaraz na samym koncu linii X-1 robie tak:
Setup przed ucieciem gdy raster jest na gornej ramce na przyklad:
ldx #$07
lda tablicaspr,x
sta $07f8,x
dex
bpl *-7
od tego miejsca wie gdzie sa sprajty ale $d018 powinno byc ustawione tak aby ekran byl $0400 - $07f8 (mozna dac #$1x) gdzie x dobrane ze wzgledu na umieszenie fontow w pamieci
potem przygotuj sobie drugi ekran na przyklad pod $0800-$0bff i wpisz
ldx #$07
lda #$80
sta $0bf8,x
dex
bpl *-4
wtedy gdy dasz do $d018 wartosc #$2x to sprajty beda czytane od $2000 (bo $80 wstawiles do $0bf8+)
zapisz zera od $2000-$203e i masz pusty sprajt
Po co az tyle pieprzenia?
Po to by "zgasic" w ten sposob jednym rozkazem wszystkie 8 sprajtow (czyli pokazac puste).
Mozna oczywiscie bawic sie w 8zapisow ale to utrudnia zycie.
Jesli chodzi o cyklowanie , to faktycznie z $d011 trzeba dosc delikatnie sie obchodzic i wiedziec co sie robi, bo jak wrzucisz krotka linie
to pojawi sie vsp lc fld czy inne rzeczy i idzie oglupiec. Dlatego sugerowalem dac $7x do $d011 by zagasic kwasy i wymusic czarny pasek w tym miejscu przez kolejnych 8 linii.
edit :
tak na szybko jeszcze "z grubsza" malo profesjonalnie, ale mam nadzieje ze uprosci zycie
gdy zaczyna sie czarny pasek trzeba ustawic $d011 na stale "gdzies" byle nie wywolac kwasu,
dlatego te "gdzies" mozesz dobrac doswiadczalnie opoznieniem np
lda $d011
and #$07
tax
ldy tabopox,x
dey
bpl *-1
lda #$1b <- normalny ekran
sta $d011
tabopoz .byte 8,8,8,8,8,8,8,8
osemki pozamieniaj dla kazdej wartosci na dobrane dla kazdego $d011 jaki sie pojawia przy scrollu u gory aby nie kwasilo sie na dole ;) chyba tak pojdzie najszybciej
-
Ja jak potrzebuje uciac sprajty w linii X to zaraz na samym koncu linii X-1 robie tak [...]
Dla mnie problemem nie jest samo ukrycie sprajtów, chodzi o to że one mogą w nieregularnej liczbie pojawiać się w pozycji rastra przełączania VICa we "wrong mode" i nie wiem jak sobie z tym poradzić bo pojawienie się sprajta psuje mi synchronizację, dlatego zrobiłem tak, że ustawiam pozycje sprajtów aby były niewidoczne dzięki temu VIC ich nie rysuje i nie psuje mi to synchronizacji. Ponieważ ustawienie nowych pozycji zajmuje trochę czasu więc muszę to zrobić zanim raster dotrze do pozycji w której rozpoczynam synchronizację, a synchronizację zrobiłem metodą 2 przerwań, ale mogłem coś nie do końca zrozumieć, w każdym razie jeśli odpowiednio wcześniej wyłączę sprajty to mam stabilnego rastra z czarnym obszarem :)
W sumie mogę wrzucić źródła i tak jest to jeszcze wczesna niedokończona wersja.
-
Oj nie, to tak nie jest ze sprajtami i synchronizacja.
Jesli sprajt zacznie sie juz wyswietlac to musi sie skonczyc jego wyswietlanie i zmiana pozycji X czy nawet Y nic nie da, dalej vic bedzie bral cykle za kazdy sprajt dopoki nie zakonczy sie wyswietlanie calej matrycy. Istnieja tricki typu sprite crunchery itd, ale tu trzeba docyklowac sie idealnie i zapisac do $d017 co linie w odpowiednim cyklu - co odradzam w tym wypadku.
Znacznie bardziej zachecil bym (takze jako ciekawostke przyrodnicza) do zapoznania sie z generalna zasada w jaki sposob kradzione sa cykle przez vic przez sprajty z artukulu Jetboya z archiwalnego C&A "Kącik początkującego cyklisty". Znajdziesz tam odpowiedzi na wiekszosc pytan jesli chodzi o cyklowanie, krotkie linie, sprakty i kilka efektow "trickowych".
Postaram sie znalezc te artykuly i podac jakis link.
-
Oj nie, to tak nie jest ze sprajtami i synchronizacja.
Jesli sprajt zacznie sie juz wyswietlac to musi sie skonczyc jego wyswietlanie i zmiana pozycji X czy nawet Y nic nie da, dalej vic bedzie bral cykle za kazdy sprajt dopoki nie zakonczy sie wyswietlanie calej matrycy. Istnieja tricki typu sprite crunchery itd, ale tu trzeba docyklowac sie idealnie i zapisac do $d017 co linie w odpowiednim cyklu - co odradzam w tym wypadku.
Znacznie bardziej zachecil bym (takze jako ciekawostke przyrodnicza) do zapoznania sie z generalna zasada w jaki sposob kradzione sa cykle przez vic przez sprajty z artukulu Jetboya z archiwalnego C&A "Kącik początkującego cyklisty". Znajdziesz tam odpowiedzi na wiekszosc pytan jesli chodzi o cyklowanie, krotkie linie, sprakty i kilka efektow "trickowych".
Postaram sie znalezc te artykuly i podac jakis link.
Trochę namieszałem z tym wyłączaniem sprajtów bo dawno nie zaglądałem w to miejsce kodu i zapomniałem jak to działało.
Dokładnie to zrobiłem tak: ustawiam wszystkim sprajtom pozycję X na 0, a potem pozycję Y o 3 linie rastra przed synchronizacją (czy jakoś tak). Takie zagranie powoduje że zawsze mam w miejscu synchronizacji jednakową liczbę sprajtów, tylko minus jest taki że sprajty są ucinane przed czarnym obszarem, po prostu zanim wypełnie wszystkie rejestry pozycji sprajtów to wiązka już zdąży się przesunąć, a drugie przerwanie synchronizacyjne też nie mogę zrobić natychmiast tylko w kolejnej linii.
Chyba można by było zmniejszyć to ucinanie sprajtów tym trickiem ze zmianą adresu ekranu i rejestrów banków sprajtów, ale na razie muszę znaleźć czas na dorobienie innych rzeczy.
-
http://www.c64.com.pl/index.php/gazety/ca.html?mag=_ca94-8
Powyzej obiecany link do serii artykulow "klub wesołego cyklisty"
Z tych screenshotow co widze, oraz z tego co odpalilem w vice, widze ze sprajty nachodza na czarny pasek (zaczynaja sie nad nim).
To jest pierwsza kwestia, ze jesli sprajt juz zacznie byc wyswietlany to najszybciej wyswietlic mozna go ponownie po zakonczeniu wyswietlania calej matrycy czyli bez trickow co 21linii. Mozna conajwyzej przelaczyc tak jak wczesniej mowilem $d018 by nic nie bylo wyswietlane (lub ciut wolniejsza metoda tak jak napisales kolejno przelaczac X i $d010 co odradzam bo wszystki zapisy zajma Ci wiecej niz linia rastra) i najszybsza opcja jest
obliczyc opoznienia ktore generuja sprajty wg artykulow wskazanych powyzej. Wykonac petle opozniajaca wg tego arta i po sprawie.
Jesli bedziesz mial nadal problem wystaw kod zrodlowy to Ci pomoge i wyjasnie pokolei.
-
Witam po przerwie moich fanów, jak i też chyba wrogów, nie wiem, ale przede wszystkim to zawsze wspaniałych czytelników forum C64power :) Ja już nie jestem na scenie C64 od 2014 roku, co błędnie jest podane na moim profilu CSDB, że odszedłem ze sceny w 2016 roku ! Nie zajmuję się jeszcze tworzeniem gier, ale widzę, że trochę czasu się już męczycie, z tym zapewne nie trudnym efektem. Ja postanowiłem napisać tylko kilka tricków np. jak zdobyć kod do tego rodzaju efektu, ale pod warunkiem, że ma się już jakieś tam pojęcie o kodowaniu w ASM. Zbych Nie łatwiej będzie znaleźć podobną grę, do tej, którą planujesz stworzyć, spośród całej gamy gier na C64 ? Najprościej to chyba będzie zatrzymać (pauza) w Winvice po przejściu do "monitora" i tam pokaże się adres w którym momencie kodu gra się zatrzymała, a później prześledzić od tej linii np. z poziomu "monitora" Winvice, lub Action Replay, gdzie np. jakiś inny koder znalazł na twój problem idealne rozwiązanie ? Podobnie można to też chyba zrobić za pomocą jakiegoś debuggera na C64 :) Ja byłem na urlopie od czerwca do końca lipca, więc trochę się działo, trochę się bawiłem, trochę pisałem głupoty na bani, ale i tak nikt mnie nie zna, więc super, że nikt się tym za bardzo nie przejmuje :) Fajnie by było, gdyby chociaż spróbować pisać listingi kodu w KickAss, który składnią trochę przypomina język C, gdzie po kompilacji można lepiej zrozumieć składnię języka C, skoro się zna ASM, a mam na myśli początkujących koderów :) Super sprawa, że muzyk Scarzix zaczyna się robić koderem, o czym ja już wiedziałem dużo przedtem, w rozmowach z nim, ale najlepsze jest to, że wrzuca już swoje próbki + kod źródłowy w KickAss na CSDB (link: http://csdb.dk/release/?id=157049 ) . Zapewne myślicie o jakimś tam rozwoju, gdzieś później dalej na PC, więc chyba znajomość ASM i nowoczesne kompilatory na C64, które składnią przypominają np. język C to z czasem pozwolą lepiej zrozumieć programowanie na PC, a dalej to większość języków programowania na PC, są już na podobnej zasadzie, tylko inaczej nazwane np. funkcje itd. itp. Ja chwilowo chce się jeszcze doszlifować w tworzeniu grafiki i muzyki, że tak powiem, a jeśli chodzi o muzykę to zrozumiałem jak działa Sound Interface Device i co dalej za tym poszło to nie korzystam już z presetów, tylko sam tworzę dźwięki np. na prostych i darmowych generatorach VSTi. Ostatnio to korzystam już nawet z jakichś dawnych i mało znanych DOS'owych efektów typu np. Reverb, Delay, które zgrywam do sampla WAV, gdzie mogę później śmiało powiedzieć, że dźwięki są zrobione już w całości przeze mnie . Poznałem kilka styli tworzenia grafiki, mając jeszcze kontakt z grafikami na scenie C64, którzy niestety już nie są moimi kolegami, ale co zrobisz, takie życie. Wiem już teraz, że coraz lepiej mi to wychodzi, kiedy powiększam fragment ekranu na PC i rysuję np. kilka symetrycznych rzeczy, z których później powstaje cały obraz, oczywiście bez znanych efektów, generatorów efektów tzn. aby na końcu znowu mógł powiedzieć, że to w całości sam zrobiłem i też aby to wyglądało w miarę dobrze, a nawet profesjonalnie. Nie chwalę się tym bo po co, a jedynie wrzucam na CSDB to, czego nigdy nie wykorzystam już "gdzieś dalej", że tak powiem np. to co zrobiłem tylko na C64. Mam jakąś tam samoocenę i kilku ludzi, którzy kompletnie nie mają pojęcia o tworzeniu np. grafiki i muzyki, więc wydaje mi się, że tacy ludzie są najlepsi w ocenianiu bo po prostu od razu mówią szczerze tak jak coś widzą i słyszą, a nie myślą nad tym, dyskutują, tylko mówią, że coś jest dobre lub nie i w prosty sposób, że dlaczego. W związku z tym, skoro ludzie ci uważają już, że jest to "dobre", że mam już na ten temat w miarę pojęcie to za niedługi okres czasu zostawiam tworzenie grafiki i muzyki oraz wracam tylko i wyłącznie do kodowania. Fajnie, że coś robicie i np. jak w tym przypadku to wcale nie robicie tutaj gry, w sensie współpracy, tylko wymieniacie się swoją wiedzą na dany temat :) Wydaje mi się, że kilka osób idzie w moim kierunku tzn. dla mnie to jest duży postęp, że wracając na scenę w 2006 roku byłem w większości tylko muzykiem. Raf chyba nawet pamięta, jak zdaje się w 2007-2008 roku, będąc jeszcze w Vulture Design napisałem do niego, czy nie zakodował by mojej kolekcji muzycznej, ale odparł na to, że nie ma czasu na kodowanie C64, więc pomyślałem sobie, że lepiej wrócić do kodowania oraz w przyszłości samemu to zakodować. Problem był znowu z grafiką, więc napisałem do pewnego grafika, aby zrobił logo, tylko w odpowiedzi dostałem, że wyślę mi fakturę VAT za to logo. Nie chodzi o to, że kogoś próbuje tutaj znowu wkurzyć, tylko o to, że to były początki, które dały mi do zrozumienia, że nie ma sensu coś robić w grupach. Denerwujące było już później dla mnie szukanie grup, zespołów ludzi, którzy z mojego pomysłu (idei) robili z tym co chcieli bo im się coś nie podobało np. przeważnie liderom grup. W tej chwili to nie przyjęli by mnie już do żadnej grupy, ale ja się wcale tym nie martwię np. jak grafik JSL, który w rozmowach ze mną twierdził, że ban na CSDB to koniec totalny już jest dla niego kariery grafika, w sensie utraty kontaktów i znajomości. Ja znalazłem na to inne rozwiązanie, że po prostu jako pojedyncza osoba zaczynam być koderem, grafikiem, muzykiem i liderem np. jednoosobowej grupy ! Nie mam już zmartwień typu, że muszę komuś przytakiwać i tańczyć jak mi zagra bo inaczej wylecę z grupy, dostanę bana itd. itp. Jak napisałem gdzieś tam na początku to sporo w tej chwili zajmuję się tworzeniem stron internetowych, ale dla mnie to i tak za mało, więc napisałem o tym, że wracam do czystego kodu na C64 i PC. Oczywiście mam kilku przyjaciół koderów na PC, którzy nie są na scenie komputerowej, więc możecie sobie tylko teraz wyobrazić, że jeden mój kolega jest na prawdę dobrym koderem na PC, ale kompletnie nic nie koduje od około 2 lat bo jeździ po Polsce i szkoli innych koderów, gdzie zarabia nawet kilka razy więcej, kiedy sam pisał programy, projekty komercyjne. Ciekawa perspektywa, nie ? A biorąc jeszcze pod uwagę czasy, że coraz więcej informatyków, coraz trudniej się wybić itd. itp. Nie rozmawiam z tymi programistami o samej nauce programowania, tylko o perspektywach i nowoczesnych rozwiązaniach, skoro pełno teraz w sieci książek, kursów wideo dotyczących programowania itd. itp. Wiadomo, że wszechwiedzący Comankh to zaraz będzie robił "syf" z mojego posta, który szybko trafi do śmietnika. Natomiast nie napisałem tego, aby prosić kogoś o współprace, pomoc, czy coś podobnego, jak dobrych kilka lat temu, tylko w sensie, że warto się uczyć, aby być wielofunkcyjnym informatykiem, aby nie być aż tak bardzo uzależnionym od kogoś, czegoś itd. itp. Ja gdzieś tam wcześniej pisałem tylko publicznie, ale wyszło z tego trochę "nie halo", że tak powiem, więc raczej rozmawiam już teraz na priv'ach. Ma to też sens, aby nikt nie wiedział z kim się kontaktuje, z kim rozmawiam bo np. kiedy napiszę coś publicznie to ktoś, kto np. mnie nie lubi zrobi z tego fejka . Jak napisałem przedtem to wrzucam tylko moje próbki np. na CSDB, modules.pl i ciągle zaznaczam, aby tego nie komentowali, nie oceniali bo to jest tylko pamiątka próbek, które zrobiłem + źródłówki, które mogą się kiedyś przydać innym ludziom. Znam też kilka konkretnych dla mnie osób (informatyków), którzy mogą potwierdzić, że nigdy nie powiedziałem im nic złego, nie ubliżyłem, że nie jestem taki, jak z pozorów teraz wynika, że jestem konfliktowy itd. itp. Spoko Comankh i mnie tam nie denerwuje twoja rozmowa, ani nic do ciebie nie mam, a raczej to, że niekiedy lubię się też pośmiać, pożartować, ale niekiedy coś piszę ogólnie do ludzi, bo sam jestem ciekawy co oni na to, aby coś może się dowiedzieć, coś też im doradzić, podzielić się swoją wiedzą itd. itp. Pozdrawiam :)
-
doceniam podwójne ad personam.
gdzie mogę później śmiało powiedzieć, , że dźwięki są zrobione już w całości przeze mnie
śmiało to mało powiedziane!
-
(do moderatora, w poście kolegi nie ma ani pół wzmianki o scrollu z tematu więc śmietnikowałbym razem z moimi)
-
A ty jak zwykle, ale co tam, niech leci do śmietnika. Z tego co widziałem, to większość tych osób, o które mi chodziło to przeczytała, więc jest ok :) . A jak byś był chociaż trochę koderem to czytał byś ze zrozumieniem i wiedział, że prawie wszystko w tym tekście jest związane z programowaniem. Ja niekiedy nie piszę szczegółowo, a miałem na myśli, że te dźwięki z prostych generatorów VSTi, o których napisałem, to używam już tylko do jakichś czołówek w programach, na stronach internetowych, tak aby nikt się do mnie nie przyczepił, ze wydałem coś na piratach itd. itp. ... Z drugiej strony to i tak większość koderów w tych czasach powinna mieć chociaż jakieś minimalne pojęcie o grafice np. konwersji, aby co chwilę nie zwracać się z banalnymi rzeczami do grafika. Dzięki mojemu przyjacielowi z Wrocławia, który ma studio i kilka naturalnych instrumentów to zacząłem robić muzykę z pojedynczych dźwięków lub sekwencji, które dogrywamy na żywo do utworów z naturalnych instrumentów, ale to nie ten temat w tej chwili. Info jest w moim "last C64 song", gdyby ktoś konkretny chciał kiedyś porozmawiać normalnie ze mną na priv, a nie tylko mieszać się z błotem publicznie na forach to zapraszam. Chodzi o to, że wbrew pozorom to ciągle się rozwijam, ale nie szukam współpracy, tylko lubię porozmawiać na ciekawe tematy, odnośnie rozwoju. Nie śpieszę się, abym mógł zrobić też to wszystko jak należy, więc za jakiś czas wrzucę linki, gdzie zrobię już coś myślę, że na poziomie, ale i tak nadal jeszcze jako próbki. Nie komentuj już Comankh bo ja i tak więcej nie będę już nic pisał publicznie. Ciebie nie znam, więc może rzeczywiście jesteś wszechwiedzący, ustawiony, kto wie ? No ale są jeszcze ludzie, którzy próbują własnych sił i nie tylko jako hobby, czy dla zabawy. Podoba mi się pomysł z tą grą i dzisiaj napisałem już do dwóch moich przyjaciół koderów z zagranicznej sceny C64, aby przyjrzeli się problemowi Zbycha, więc coś za ich pośrednictwem może mu doradzę na priv bo dzięki tobie publicznie się już nie da, tak aby każdy inny człowiek, który się interesuje programowaniem, muzyką i grafiką mógł coś poczytać, spróbować samemu własnych sił, ale mniejsza o to. Comankh Chciałbym chociaż raz przeczytać jakiś twój konkretny tekst, o twojej wiedzy, a nie tylko piszesz, że "koledzy z Keen Acid", że koledzy jeszcze jacyś inni itd. itp. Ty wiesz chociaż co się dzieje teraz na scenie C64, poza fejkami, głupotami bo taka była scena i będzie już zawsze, ale nie uwierzę, że ty jesteś taki bardzo poważny, że tak bronisz tą scenę komputerową, skoro nic dla niej nie zrobiłeś od 18 lat ? Mam na myśli czy ty się chociaż tym zajmujesz, jesteś w tym non-stop tzn. od strony softu, jak to wszystko ewoluowało na C64, odnośnie PC ? Pisałeś kiedyś i wielu innych ludzi było przeciwnych, że nie chcecie takich jak ja na scenie, więc teraz już wiesz, że nie jestem już na scenie komputerowej od 2014 roku, więc co jeszcze ? Chciałem wydać jeszcze swoje pierwsze i ostatnie demo na scenie C64, ale mi się nie udało, trudno. Na koniec napisałem jeszcze dwa artykuły o programowaniu C64 do Hot-Style, ale V-12 się obraził na mnie, więc kliknąłem "delete" i to by było tyle na ten temat oraz to co zostało po mnie w jakichś dziwnych wspomnieniach np. w Trivia na CSDB !
-
W zasadzie to pierwszy etap już osiągnąłem - zrobiłem scroll włącznie z kolorami, z tym że przyjąłem pewne ograniczenia np. to że każdy kafelek będzie miał jeden kolor tzn. każdy z 4 znaków na jaki składa się kafel będzie miał jeden kolor, do tego nie będzie osobnej mapy kolorów czyli każdy typ kafla ma jeden kolor. To obcięcie sprajtów kilka pikseli przed statycznym obszarem zostawiam - mogę z tym żyć ;)
Trochę walczyłem z miganiem znaków podczas scrolowania kolorów ale w końcu udało mi się je wyeliminować. Wprowadziłem 2 przerwania rastra zamiast 1, chociaż teraz myślę że przekombinowałem i jak zacząłem zamieniać różne rzeczy miejscami to okazało się że to jedno przerwanie mogło by wystarczyć.
W każdym razie obecnie pierwsze przerwanie jest w momencie wyświetlania granicy (czyli wrong mode, to w zasdzie są 2 przerwania 1 dla synchronizacji a 2 już właściwe) a drugie jest tuż po rozpoczęciu nowej ramki po to żeby przywrócić wartości rejestrów VICa dla scrola i sprajtów.
W obecnym układzie zastanawiam się jeszcze nad jedną rzeczą: czy robić osobne wywołanie przerwania rastra dla muzyki, bo chciałem wywołać odtwarzanie na początku lub na końcu irq w dolnej części ekranu, ale na początku niebardzo bo w momencie gdy jest wykonywane scrolowanie koloru to przez muzykę czasami kopiowanie może przedłużyć się na tyle że zaczyna się już rysowanie części ekranu tekstowego, wrzuciłem więc to wywołanie na koniec tylko że wtedy muzyka jest nierównomiernie wywoływana, bo gdy nie ma kopiowania koloru to procedura przerwania trwa krótko, ale gdy jest to odtwarzanie przedłuża się już na kolejną ramkę obrazu. Jak dla mnie to nie słychać żeby coś nie tak było z muzyką ale logika podpowiada że to nie powinno tak być.
Wrzucam projekt (zrobiony pod C64Studio) gdyby ktoś chciał obejrzeć i oczywiście wszystkie sensowne sugestie mile widziane. To jest pierwszy etap więc jeszcze układ pamięci może się zmienić być może grafika będzie na innym banku VICa, zależy ile przeznaczę klatek animacji na obiekty, poza tym dla przejrzystości nie włączyłem multicoloru w sumie jeszcze nie zdecydowałem w jakim trybie koloru będzie grafika. Nie jestem nadal pewny czy uda mi się doprowadzić to do końca, to jest taki luźny projekt - jak mam czas to go robię jak nie to stoi w miejscu, dlatego w kodzie mam tyle komentarzy żeby po dłuższym przestoju można było zrozumieć o co tam chodzi :)
Obecnie zastanawiam się nad wykrywaniem kolizji. Ciekawi mnie jak Skull to zrobił w Bomberlandzie, czy/jak porównywane są pozycje? czy jest to robione na 16 bitach? czy obiekty nadal są poruszane jak już znikną z pola widzenia (też na 16 bitach?)?
Nadal dość często zdarzają mi się jakieś głupie błędy np. czasami zapominam że z rejestrami CPU to nie do końca jest jak ze zmiennymi w programie i zapominam po jakiejś operacji zapisać wynik do pamięci :D
-
że te dźwięki z prostych generatorów VSTi
scrollują w pionie.
-
że te dźwięki z prostych generatorów VSTi
scrollują w pionie.
Haha :D Nie wiem czy miałeś na myśli, aby mnie wkurzyć bo tym razem to mnie rozbawiłeś tym tekstem :D Ja jak przyjadę na SP9 to stawiam ci Comankh nie 6, ale 7 piw, za które zapłacę z własnej kieszeni, abyś nie czuł się tym razem zdołowany i przygnębiony, tylko był wesoły, jak ja dzisiaj :) Zastanawiam się ogólnie nad zachęcaniem ludzi na kolejną edycję Silesia Party oraz pomyśleć nad zorganizowaniem jakiejś pomocy dla organizatorów bo śmiało mogę powiedzieć, że SP8 było kozackie pod względem organizacji, jakości prac oraz atmosfery, którą mogłem tylko obejrzeć już później na youtube. Żałuję też, że nie byłem tam osobiście, że narobiłem takiego bigosu tzn. oficjalny ban itd. itp.
W zasadzie to pierwszy etap już osiągnąłem - zrobiłem scroll włącznie z kolorami, z tym że przyjąłem pewne ograniczenia np. to że każdy kafelek będzie miał jeden kolor tzn. każdy z 4 znaków na jaki składa się kafel będzie miał jeden kolor, do tego nie będzie osobnej mapy kolorów czyli każdy typ kafla ma jeden kolor. To obcięcie sprajtów
......
Powiem ci Zbych, że temat zaczyna się robić dla mnie coraz bardziej ciekawy. Ja gdy pisałem kod do intra i bujanego scrolla w pionie na $d011, to jak widać też zrobiłem jedną linię przerwy bo działo mi się dokładnie to samo, a tutaj link do tego intra : http://csdb.dk/release/?id=151529
Zastanawiałem się później nad tym, czy może potrzebny tutaj speedcode np. z 50 NOP, lub BIT $xxxx, zamiast pętli, aby perfekcyjnie docyklować, podobnie jak przy wychodzeniu z ramek bocznych, a może coś jeszcze innego ? . Widziałem gdzieś kiedyś w jakiejś produkcji idealne rozwiązanie tego problemu, że jakiś koder poradził sobie z tym, tylko nie chciałem rypać kodu do swojego intra, więc zrobiłem tak jak umiem, czyli jedną linią przerwy pomiędzy logo, a scroll'em . Dylematy miałem już różne z cyklowaniem na C64, kiedyś zrobiłem ciekawy efekt przechodzenia jednej bitmapy, w drugą, lecz po dodaniu muzyki i kilku innych rzeczy, to znowu był podobny problem, mimo to, że efekt nawet był poza przerwaniami IRQ tzn. po CLI. Ostatecznym wtedy rozwiązaniem dla mnie to stało się pozmienianie układu poszczególnych rzeczy na ekranie oraz zrobienie zupełnie innego efektu przejścia dwóch bitmap. Nie wiem czy o to chodzi, ale są jakieś rejestry odpowiedzialne za kolizję sprajtów, lecz ja grami się nie zajmuje, więc nigdy tego nie używałem. Dodaje załącznik z podobną grą i układem na ekranie do twojej Zbych, ale zauważ, że dzieje się tam to samo, kiedy zaczynasz się poruszać joystickiem po ekranie w pionie, zauważ też, kto zrobił kod do tej gry tzn. Martin Piper, a to raczej dobry koder, więc zapewne też się nad tym zastanawiał bo to migotanie szpeci grę i mocno rzuca się w oczy. Pozdrawiam :)
-
No ale rzeczywiście może to być genialne rozwiązanie z tablicami, jak napisał Luke. Podobnie jak się robi bujane w pionie kolorowe rasterbars. Przy każdym przesunięciu sprajtów x,y zobaczyć ile cykli zabiera VIC, CPU i na jakich wartościach nie migają linie rastra oraz wpisać je do tablicy. Ja raz już tak miałem, że żadna wartość mi nie pasowała i dopiero wtedy pomogło mi speedcode zamiast np. pętli :
ldx #$08
dex
bne *-1
wpisałem :
nop
nop
bit $eaea
nop
... itd.
Wtedy można zrobić sobie tablice np. z wartościami adresów do skoku pośredniego JSR, gdzie są speedcode z różnymi wielkościami cykli .
Pewnie Wegi by wiedział jak to zrobić :) Ja podobnie jak Zbych to nie jestem zaawansowanym koderem na C64 :) Fajnie ogólnie i tak, że coś jeszcze kodujecie na C64, że można poczytać i czegoś się dowiedzieć nowego :)