atarionline.pl trzeci kolor łącznych spritów 1 i 2 / 3 i 4 - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1: CommentAuthorkski
    • CommentTime14 Feb 2018 zmieniony
     
    Jako nowy na forum pozwolę sobie na kilka słów wstępu.
    W końcówce lat osiemdziesiątych napisałem kilka gier na Atari, rozprowadzonych wśród znajomych, niektóre z nich ze zdziwieniem odnalazłem kilka lat temu w archiwach gier na atari ( ->link<- ).
    Są słabe co do tego nie ma dyskusji, ale po przebrnięciu przez basic (ojciec zdobył gdzieś elegancko oprawione ksero jakiejś książki poświęconej atari basicowi) cała moja dalsza wiedza pochodziła z artykułów W. Zientary w bajtkach - kursy o przerwaniach oraz kurs Action!.
    Później przesiadłem się na Amigę, zafascynowały mnie jej możliwości graficzne - bitplany (o ile to właściwa nazwa) i pewnie lepsze sprity już nie pamiętam (tak wiem to nie to forum).
    Wiem że przez kolejne lata powstawały jeszcze wciąż w Polsce gry na Atari (na pewno fajne) ale żyłem już poza światem Atari. Tym niemniej sentyment do mojego pierwszego komputera pozostał. Fakt że jest trudniej zrobić efektowne gry ze względu na ograniczenia komputera stanowi kuszące wyzwanie. Właśnie studiuję Poradnik Programisty Atari (nowe wydanie chwała pasjonatom poświęcającym swój czas) wraz z dodatkiem (opisem gry - świetna robota) i biorę się za programowanie. Nie ukrywam, że będzie odjazd - niezależnie scrolowane plany, duże kolorowe postacie..... albo co się uda... coś się musi dać zrobić.

    Sorry za przynudzanie, pytanie, co robicie po zrobieniu wszystkiego co było do zrobienia w bieżącej ramce, przed zaczęciem rysowania następnej, sprawdzacie jakieś rejestry w pętli, może lepiej ustawiać jakąś flagę w ostatnim przerwaniu DLI czy też VBLK?

    Druga sprawa, przy łączeniu par spritów w jaki sposób wyznaczny jest trzeci kolor? Chcę wykorzystać wszystkie sprity na zrobienie postaci szerokokści 16 (podwójnych) punktów, w trzech kolorach, takich samych w obu połówkach.
    • 2: CommentAuthorgorgh
    • CommentTime14 Feb 2018
     
    Witamy serdecznie, fajnie, że wracasz do Atari, miłej pracy. Co do 3 koloru to nie pamiętam dokładnie, ale nie wiem czy nie jest to funkcja OR dwóch składowych
    • 3: CommentAuthorgorgh
    • CommentTime14 Feb 2018
     
    Or albo xor
    • 4: CommentAuthormono
    • CommentTime14 Feb 2018 zmieniony
     
    3-ci kolor powstaje przez OR wartości rejestrów koloru (nie składowych kolorów!). Łączenie przebiega w parach:
    - COLPM1 i COLPM2
    - COLPM3 i COLPM4
    przy czym nie ma znaczenia czy nakładany jest:
    - player z playerem,
    - missile z missilem,
    - czy też player z missilem.
    W ten sposób można uzyskać w linii 11 kolorów.
    Dodatkowy kolor sprajta można uzyskać włączając playera5 - wtedy kolor wszystkich missiles pobierany jest z rejestru COLPF3, ale playery nałożone na siebie ciągle generują 3-ci kolor. Jeżeli używasz trybu 4 ANTIC-a (12 OS) wtedy ten kolor jest identyczny jak w przypadku piksela %11 przy znakach w inverse (ale za to takie missile można wciąż pozycjonować w dowolnym punkcie ekranu). W ten sposób można uzyskać 8 kolorów w linii.
    Ważna rzecz - jeśli korzysta się z 3-go koloru przy nakładaniu sprajtów uzyskane kolory powstałe z nakładania będą inne w PAL i inne w NTSC właśnie ze względu na to, że OR-owane są wartości rejestrów koloru a nie składowe.

    Edit: literówki

    Edit 2: W załączniku jeszcze palety. Chętnie zobaczyłbym paletę SECAM.
    • 5: CommentAuthorkski
    • CommentTime15 Feb 2018
     
    Dzięki za powitanie i obszerne wyjaśnienie. Pozostaje mi przećwiczyć wszystko odnośnie kolorów w praktyce.
    • 6:
       
      CommentAuthorWolfen
    • CommentTime17 Feb 2018
     
    Gralem kiedys w Doofyiego :)
    • 7: CommentAuthormono
    • CommentTime18 Feb 2018 zmieniony
     
    Aaaaa... Co do pierwszej sprawy to zależy:
    1. Jeśli masz włączony OS i przerwania VBLKI to już masz odpowiednią flagę - w $12 znajduje się tzw. zegar systemowy RTCLOK i on jest zwiększany co ramkę właśnie na VBLKI. Po skończeniu roboty w programie głównym wystarczy się zsynchronizować z ramką za pomocą:
    lda RTCLOK+2
    cmp RTCLOK+2
    beq *-2

    2. Jeśli OS jest wyłączony, ale masz włączone przerwanie VBLK no to możesz sobie zrobić samodzielnie "zegar systemowy":
    vblkint:
    sta NMIRES ;$D40F
    inc rtclok
    rti

    rtclok .byte 0

    i w pętli głównej synchronizować się z nim identyczną metodą:
    lda rtclok
    cmp rtclok
    beq *-3

    3. Jeśli nie masz OS-a i nie masz VBLK, ale za to na 100% twój kod wykona się zawsze w ramce, to można wykorzystać licznik linii skanningowych:
    lda VCOUNT  ;$D40B
    bne *-3

    ale wtedy musisz zagwarantować, że żadne przerwanie nie wskoczy Ci przed zakończeniem ramki kiedy VCOUNT osiągnie 0 (maksymalny numer linii wskazywanej przez VCOUNT w PAL/SECAM to 312/2 a w NTSC 262/2, ale nie testuj wartości maksymalnej nigdy bo licznik trzyma ją tylko kilka cykli i łatwo przegapić).
    Ale jeśli nie masz przerwań VBLK, to nawet jeśli masz przerwania DLI, to ostatnie wskakuje w linii 247 (VCOUNT=247/2), więc i w PAL/SECAM i w NTSC jest spora szansa, że nie dotrwa do linii 0 (chyba, że robisz tam coś czasochłonnego), więc zagwarantować sobie odroczenie wykonania ewentualnych przerwań IRQ możesz po prostu ustawiając I:
    sei
    lda VCOUNT
    bne *-3
    cli

    UWAGA! To nie jest BLOKADA przerwań! IRQ są nadal zgłaszane i flagi IRQST/PACTL/PBCTL/PDVINT są aktualizowane - po prostu odebranie przerwań IRQ przez CPU o ile wystąpiły zostanie odroczone do chwili skasowania znacznika I.

    Edit: IRQ
    • 8: CommentAuthortebe
    • CommentTime18 Feb 2018
     
    C64 SEUC
    ->link<-
    • 9: CommentAuthorkski
    • CommentTime18 Feb 2018
     
    Dzięki. Do ewentualnego wyłączania OS jeszcze nie doszedłem więc pierwszy sposób będzie na razie odpowiedni.
    • 10:
       
      CommentAuthorKaz
    • CommentTime18 Feb 2018
     
    Miło mi powitać Cię na forum i cieszę się, że dostałeś szczegółowe informacje, które mogą się przydać także innym :) (dzięki Mono!).
    • 11: CommentAuthorsis101
    • CommentTime18 Feb 2018
     
    Trzeba także przyznać, że autor wymienionych gier to wcale nie była jakaś tam cienizna na tamte czasy. Tym bardziej jest to super prognostyk na przyszłość. Pozdrawiam i życzę wytrwałości w dążeniu do zamierzonych celów. Kibicuję całym sercem.
    • 12: CommentAuthorkski
    • CommentTime21 Feb 2018 zmieniony
     
    Dzięki wszystkim za dobre słowa i Mono za dzielenie się swoją wiedzą.
    Uff no pierwszy zaplanowany krok coś działa.

    ->link<-


    Trochę się zakopałem w tym asemblerze 6502, pierwsza moja większa przygoda z 8-bitowym procesorem i 8-bitowymi rejestrami. W porównaniu z nim asembler motoroli czy nawet '86 z którymi pracowałem w przeszłości to prawie jak języki czwartej generacji (oczywiście wszystko rozumiem, architektura, coś za coś itd). Ale potrzeba czasu i samozaparcia. W tej chwili gubię się już w swoim własnym kodzie, będę musiał go na spokojnie przejrzeć może przeorganizować a na pewno lepiej skomentować. Ponadto zrobić sobie środowisko do kompilowania i uruchamiania w eclipsie, widziałem gdzieś że macie to rozpracowane.

    Tym niemniej mój plan na najbliższy czas to
    1. wyspać się
    2,3,4 patrz 1 + inne zaniedbane obowiązki,
    5. Przeczytać wreszcie na spokojnie Asembler Ruszczyca (jeżeli ktoś ma zbędne nowe wydanie chętnie odkupię) i Poradnik Programisty Atari. Może przestanę zadawać pytania na które odpowiedź jest w literaturze.

    Grafikę miałem gotową z moich dawnych prób zrobienia czegoś na PC'ta (w czasach studenckich), trzeba było ją tylko przeskalować w dół do rozdzielczości i kolorów Atari. Artystą nie jestem ale nie o to chodzi, chodziło mi o sprawdzenie co się da zrobić.

    Proszę o opinie, warto dalej rozwijać ten projekt? Jest to coś zupełnie innego niż popularne komnatówki (moje ulubione, jak montezuma's revenge, bruce lee, zapowiadany rick dangerous wygląda świetnie na filmach), na pewno nie będzie miało takiej samej grywalności, na pewno szybko zabraknie pamięci przy próbie budowy rozbudowanych światów.
    • 13:
       
      CommentAuthorlarek
    • CommentTime21 Feb 2018
     
    Pięknie. Koniecznie rozwijaj dalej i dokończ projekt. Trzymam kciuki :)
    • 14:
       
      CommentAuthorRastan
    • CommentTime21 Feb 2018
     
    Fajne. Góry z Shadow of the Beast? :)
    • 15: CommentAuthorsis101
    • CommentTime21 Feb 2018
     
    Pięknie wygląda parallax. Kolory także super w czym atari rulez.
    • 16: CommentAuthormono
    • CommentTime21 Feb 2018
     
    Bardzo fajne. Rozwijaj!
    • 17:
       
      CommentAuthorbocianu
    • CommentTime21 Feb 2018
     
    robi wrażenie. wincyj chce!

    Bardzo się cieszę, że mamy kolejnego aktywnego twórcę gier.
    Korzystając z okazji zapraszam na grawitację :) Powymieniamy doświadczenia.

    ->link<-

    @larek: a Ty się wybierasz tym razem na grawitację?
    • 18:
       
      CommentAuthormaly_swd
    • CommentTime21 Feb 2018
     
    Witaj przybyszu:)

    Grałem w Twoje gierki, miło je wspominam.

    A to co teraz pokazałeś wygląda miodnie - trzymam kciuki za efekt końcowy.
    • 19:
       
      CommentAuthorKaz
    • CommentTime22 Feb 2018
     
    Pięknie się zapowiada, duże grafiki, sprytne obejście ograniczeń, i faktycznie pachnie Amigą :). Gratulacje i przyłączam się do trzymających kciuki za projekt! :)
    • 20: CommentAuthorkski
    • CommentTime22 Feb 2018
     
    Dzięki wszystkim. Rastan, rzeczywiście bestia to gra dla której porzuciłem kiedyś atari na rzecz amigi. Tą grafikę robiłem 20 lat temu na pececie na pewno nic nie skopiowałem żywcem ale miałem przed oczami przesuw obrazu z bestii a na górach zapewne się wzorowałem.

    Na razie nic jeszcze nie łazi po moim świecie więc na pewno będę kontynuował projekt. Kusi mnie żeby wyciągnąć maxa z tej maszynki. Optymalizowanie kodu w asemblerze na maxa i zrobienie czegoś czego jeszcze nie było daje mi niezbędnego kopa. Inaczej - gdyby to wszystko było łatwe do zrobienia, jak np. bitplany na amidze, a sprity szerokie i mnogie jak na C64 - w ogóle bym się za to nie brał. Bo po co??

    Zrobienie kompletnej gry to już inna historia, Ci którzy sami programowali gry na pewno rozumieją. Etap w którym będzie można pochodzić a może poskakać mogę obiecać. Co dalej zobaczymy.

    Znalazłem stary wątek o paraluxie na tym forum. Mój program nie przełącza gotowych zestawów znaków tylko je generuje co ramkę (to znaczy nakłada na siebie znaki z różnych zestawów). Mam dwie mapy jedna dla gór druga dla drzew na pierwszym planie i nakładam znaki drzew na góry tam gdzie należy.

    Działa to więc zapewne na podobnej zasadzie jak programowe sprity chociaż nie wiem dokładnie jak je robicie. Czy ktoś robił pomiary ile max. znaków generują biblioteki do programowalnych spritów na ramkę, oczywiście przy założeniu że nakładają je na dowolne tło (czyli inne znaki)? Ja wyciągam max 112 znaków na ramkę - tyle jest znaków pierwszego planu kiedy widać ścięty pieniek (który właśnie posłużył do pomiarów...).
    Oczywiście u mnie na razie procesor nie robi nic innego. Ale spoko mam jeszcze sporo pomysłów a co ważniejsze wiary więc na tym się nie skończy.
    • 21: CommentAuthorEagle
    • CommentTime22 Feb 2018 zmieniony
     
    Mnie się z tym skojarzyło


    • 22:
       
      CommentAuthorCOR/ira4
    • CommentTime7 Mar 2018
     
    Zapowiada się ciekawie ,brakuje gier z tego typu grafiką , gier z akcją dziejącą się na "powietrzu",kibicuję i ciekaw jestem co z tego będzie .