atarionline.pl Shanti Sprite Multiplexer - engine - 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: CommentAuthortebe
    • CommentTime15 Aug 2021 zmieniony
     
    W załączniku instrukcja w formie pliku PDF (katalog \doc\) oraz przykład użycia (katalog \example\) silnika Shanti-ego pozwalającego na wyświetlenie do 16 duszków 8x16 pikseli w 3 dowolnych kolorach każdy.

    Źródła w postaci kodu relokowalnego Mad-Assemblera są w katalogu \src\

    Dodatkowo w katalogu \convert\ jest programik którym możemy przygotować klatki duchów dla silnika, domyślnie zawsze generowane jest 8 klatek z pliku MIC (MIC o szerokość 40 bajtów na linię).

    Jest to wersja zintegrowana i mieszcząca się w 4KB pamięci, w formie łatwej jak sądzę do wykorzystania. Maksymalnie 16 obiektów, 128 kształtów, zmiana zestawu znaków co wiersz, zmiana jednego z rejestrów GTIA co wiersz.

    Nowy etap tworzenia gier stoi przed Wami otworem :)

    p.s.
    Dodatkowo Shanti udostępnił kod silnika z gry "The Last Squadron" w pliku 'src\multi_tls.asm' (możliwe różne wysokości duszków) oraz z jego nowej gry "Bomb Jack" w pliku 'src\multi_bj.asm' (mniejsza zajętość pamięci kosztem szybkości generowania duszków)

    pliki 'multi_tls', 'multi_bj' nie są zintegrowane z tą wersją przykładowego silnika
    • 2: CommentAuthorilmenit
    • CommentTime15 Aug 2021
     
    świetne, dzięki!
    • 3: CommentAuthorEagle
    • CommentTime16 Aug 2021
     
    Jakas szansa na silnik DDA od Shantiego?
    Bardzo by sie przydal.
    • 4: CommentAuthortebe
    • CommentTime16 Aug 2021
     
    DDA ? od czego to skrót ?
    • 5: CommentAuthorEagle
    • CommentTime16 Aug 2021
     
    • 6:
       
      CommentAuthorKaz
    • CommentTime20 Aug 2021
     
    Piękna sprawa, brawo Shanti. Przypomnę przy okazji rozmowę z autorem, który opisuje kulisy tworzenia przez siebie gier (korpobełkot, jak twierdzi Zaxon :D, ale ja tam uważam inaczej, bardzo ciekawa opowieść):

    • 7:
       
      CommentAuthorshanti77
    • CommentTime11 Sep 2021 zmieniony
     
    Tak wygląda Gacek , która korzysta z multiplexera duszków. (trzeba oglądać w 720/1080 50hz)

    • 8:
       
      CommentAuthorPeri Noid
    • CommentTime11 Sep 2021
     
    Piękne!
    • 9: CommentAuthormono
    • CommentTime11 Sep 2021
     
    Świetny! Wygląda jak na automatach.
    • 10: CommentAuthorbruno_j
    • CommentTime11 Sep 2021
     
    @Shanti WOW! Gdzieś ty był pod koniec XX? :)
    • 11:
       
      CommentAuthorCyprian
    • CommentTime11 Sep 2021
     
    eleganckie
    • 12: CommentAuthorilmenit
    • CommentTime11 Sep 2021 zmieniony
     
    To co, robimy Super Mario? ;)
    W załączniku źródła SMB, które przerobiłem tak, że można je skompilować MADSem (oczywiście wynikowy XEX się wywala, bo to wciąż dla mapy pamięci NESa). Ale kompilowalny kod to pierwszy krok ;)

    Jak widzę nie jestem jedyny, który coś w tym kierunku próbował:
    ->link<-

    Silnik Shanti-ego nie jest wystarczający, aby na nim SMB zrobić (np. obracające się strumienie ognia w dalszej części gry ->link<- ), więc trzeba by albo niektóre elementy gry przerobić, albo silnik duszków rozbudować.
    • 13:
       
      CommentAuthorMaW
    • CommentTime21 Sep 2021
     
    Wybaczcie, ale przegapiłem - w jakiej rozdzielczości działa silnik Shantiego?
    • 14: CommentAuthortebe
    • CommentTime21 Sep 2021
     
    a jakie to ma znaczenie, w rozdzielczości jaką ustalisz

    jedyny wymóg to wywołanie przerwań DLI co 8 linii (1 wiersz znakowy)
    • 15:
       
      CommentAuthorjhusak
    • CommentTime21 Sep 2021
     
    Pewnie też chodzi o to, że w dwuwierszowej rozdzielczości sprajt ma 8x8 punktów, a w jedno 8x16 punktów. Czy się mylę?

    Może też być tak, że silnik działa tylko w jednowierszowej. Ale trzeba do kodu zajrzeć, a ja w pracy jestem :)
    • 16: CommentAuthortebe
    • CommentTime21 Sep 2021
     
    silnik odpowiednio dzieli sprajta do kolejnych wierszy
    • 17:
       
      CommentAuthorjhusak
    • CommentTime21 Sep 2021 zmieniony
     
    @tebe, napisz coś po lucku :)

    Maw zapewne pyta, w jakiej rozdzielczości PIONOWEJ działa silnik Shantiego.
    Tebe zapewne zrozumiał, że chodzi o rozdzielczość/tryb graficzny Antica (co jako pytanie jest bez sensu, bo sprajty są od tego niezależne, więc zapewne o to nie chodzi).

    Zajrzałem do kodu, silnik obsługuje rozdzielczość pionową TYLKO jednoliniową. Do dwuliniowej trzeba dużo poprawek zrobić.
    DEMO test.obx jest mylące, bo sprajty wyglądają jakby były w dwuliniowej rozdzielczości, a są w jednoliniowej (są pod adresem 5c00)
    • 18: CommentAuthortebe
    • CommentTime21 Sep 2021
     
    w nowej grze GACEK jest wykorzystany ten silnik w wersji lekko wolniejszej aby zajmował mniej pamięci

    szerokość obrazu może mieć wpływ na wydajność, wąski obraz daje więcej cykli na zmianę linii obrazu, szeroki obraz zabiera tych cykli więcej

    co nie oznacza wcale że silnik nie da rady na szerokim obrazie
    • 19: CommentAuthortebe
    • CommentTime21 Sep 2021
     
    tryby graficzne dwu liniowe (Graphics 7) nie powinny być przeszkodą, przerwanie DLI wywołać co 4 takie linie, da nam 8, dla silnika to bez różnicy, on tylko chce zachować ciągłość sprajtów między kolejnymi wywołaniami przerwania, a to powinno odbywać się co 8 linii sprajtowych
    • 20:
       
      CommentAuthorjhusak
    • CommentTime21 Sep 2021
     
    Wszystko się zgadza. Jednak w docu nie jest napisane, jaka jest rozdzielczość pionowa sprajtów, tylko "8x16" punktów.
    • 21: CommentAuthortebe
    • CommentTime21 Sep 2021
     
    dodałem stosowną informację, plus kilka poprawek
    • 22:
       
      CommentAuthorjhusak
    • CommentTime21 Sep 2021
     
    Dzięki :)
    • 23:
       
      CommentAuthorshanti77
    • CommentTime22 Sep 2021
     
    Silnik opiera się na "silniku", który powstał podczas tworzenia gry "Last Squadron". Duszki sa tu w rozdzielczości jednoliniowej, a tło w Antic 4. Mamy 5 kolorów do wykorzystanie na tło gry, a duszki mają swoje kolory (3 kolory na obiekt 2+ORA). W każdej linii znakowej możemy wybrać dowolny zestaw znaków i dodatkowo zmienić 1 kolor (dowolny) tła. Silnik wyświetla duszki w rozmiarze 8x16pikseli, co zajmuje 3 linie znakowe, łatwo można go powiększyć dodając nastepne linie(8x24,8x32,8x64).
    Każdemu duszkowi ustalamy pozycję poziomą i pionową, kształt,kolory(zależnie od potrzeb można zostawić jeden kolor stały i zmieniać szerokość, tak jest w TLS)
    Nie jest to silnik uniwersalny i na pewno trzeba go modyfikować do własnych potrzeb, zależnie od wybranego trybu tła, wysokości i szerokości ekranu, scrolli pionowych i poziomych. Główny bohater jest rysowany co ramkę pozostałe obiekty zależnie od możliwości(naraz w jedej linii mogą być tylko 2 obiekty)
    Przykładem wykorzystania tego silnika jest właśnie Gacek. Ekran jest tu również w Antic 4, ale już bez scrolla pionowego. Zastosowałem tu obraz w szerokości 48 bajtów,a ramki zamaskowałem czarnymi znakami. Spowodowane jest to potrzebą uzyskania czarnego koloru pocisków (COLPF3), które są użyte na bohaterze rozgrywki.
    Zmieniłem też sposób animacji duszków, żeby można było dodawać dowolna ilość klatek animacji (w TLS były to potęgi 2, czyli 2,4,8...). Sama gra ,dzięki wykorzystaniu silnika,powstała w jakieś 2 miesiące, bo w międzyczasie zająłem się tworzeniem silnika 3D i poprawki robiłem przed końcem terminu ABBUC'a.
    • 24:
       
      CommentAuthorMaW
    • CommentTime22 Sep 2021
     
    Dzięki Shanti, niesamowity kawał dobrej roboty!
    Tebe - dzięki za dokumentację, a reszcie - że pochylili się nad moim pytaniem :)
    • 25:
       
      CommentAuthorshanti77
    • CommentTime27 Sep 2021
     
    Postępy w pracy nad silnikiem fpp

    • 26:
       
      CommentAuthorPeri Noid
    • CommentTime27 Sep 2021
     
    Oj... szybko!
    • 27:
       
      CommentAuthorpirx
    • CommentTime27 Sep 2021
     
    pół obrazu i lustro jak w capture the flag?
    • 28:
       
      CommentAuthorshanti77
    • CommentTime27 Sep 2021
     
    Nie, tekstura może być dowolna, obecnie ma 64bajty wysokości i 16 bajtów szerokości (32 piksele). Chyba trzeba będzie dodać kilka rozmiarów tekstur bo z większej odległości są mało wyraźne.
    • 29:
       
      CommentAuthorjhusak
    • CommentTime27 Sep 2021 zmieniony
     
    Zastosuj trik, który zastosował KK w Dreadzie. Opowiada o tym pod koniec "Making Of". O tu: ->link<- Chociaż może nie podchodzić to pod twój sposób renderowania.
    • 30: CommentAuthortebe
    • CommentTime28 Sep 2021
     
    jak można piksel dzielić na pół, przecież piksel jest niepodzielny
    • 31: CommentAuthorilmenit
    • CommentTime28 Sep 2021
     
    ->link<-
    "Well, I have one "mip map" that is one quarter of the vertical size and is used when the scaling is too small, because you start losing too much information just discarding lines"
    • 32: CommentAuthortbxx
    • CommentTime28 Sep 2021
     
    @tebe - niepodzielny to jest atom ;)
    chociaż to też podobno tylko kwestia odpowiedniego dłuta...
    • 33:
       
      CommentAuthorpirx
    • CommentTime28 Sep 2021
     
    oooo, to są miazmaty przebrzmiałych teoryj, atomy się dzielą od stu lat, a od pięćdziesięciu to nawet protony i neutrony się dzielą ;)
    • 34:
       
      CommentAuthorlaoo
    • CommentTime28 Sep 2021
     
    No ale etymologicznie to atomu właśnie podzielić się nie da (chociaż anatomia ma inne zdanie).
    • 35:
       
      CommentAuthorpirx
    • CommentTime28 Sep 2021 zmieniony
     
    OOOO dzięki, wreszcie się dowiedziałem, dlaczego tomograf i taki nóż do krojenia musku na cienkie plasterki (tomo--- zapomniałek)

    V--- @laoo tak i tak :] Odpowiadam u góry, żeby dodatkowo nie zaśmiecać.
    • 36:
       
      CommentAuthorlaoo
    • CommentTime28 Sep 2021
     
    @pirx mikrotom / wibratom?

    Znalazłem z ciekawości bo nawet nie wiedziałem, że te urządzanie mają specjalną nazwę. Ale chyba trochę za duży offtopic już ;)
    • 37:
       
      CommentAuthorjhusak
    • CommentTime28 Sep 2021
     
    tomo wydaje się być zniekształconym ćąo.
    • 38: CommentAuthorEagle
    • CommentTime30 Sep 2021
     
    Czy bedzie kiedys w przyszlosci udostepniony silnik?
    Pytam dla kolegi ;)
    • 39:
       
      CommentAuthorpirx
    • CommentTime1 Oct 2021 zmieniony
     
    mamy vectora udostępnionego ze wszystkimi źródłami, itp... bardziej komplikowany (bardziej 3D), ale i tak największy problem to dorobić w tym jakąś grę...
    • 40:
       
      CommentAuthorshanti77
    • CommentTime1 Oct 2021
     
    @pirx a gdzie można to znaleźć? Na zrobienie z tego gry pomysł już mam ;)
    • 41:
       
      CommentAuthorpirx
    • CommentTime1 Oct 2021
     
    hmmm. wydaje mi się, że gdzieś widziałem samego vectora, ale cały numen jest tu:https://github.com/pfusik/numen
    • 42:
       
      CommentAuthorsun
    • CommentTime1 Oct 2021
     
    ->link<-
    "Cały kod można znaleźć w źródłach dema, działa on na komputerach z 64 KB pamięci RAM. "
    • 43:
       
      CommentAuthorKaz
    • CommentTime12 Oct 2021
     
    Imponujące, brawo Shanti!
  1.  
    Shanti's engine can do a great 64k version of Bombjack (named Gacek). So for me there is no longer the need to play the 320k RAM or Corina cart. version.

    Question: Would the engine also make it possible to have a 64k or at least 128k Yie Ar Kung Fu version ? If so, there would be no need any longer for the 320k RAM or Corina .CAR versions of YAKF.
    • 45:
       
      CommentAuthorshanti77
    • CommentTime23 Oct 2021
     
    @CharlieChaplin Unfortunately, the engine is not suitable for such a game, because there are wide characters there, and atari sprites are only 8px wide.
    • 46: CommentAuthormrk
    • CommentTime28 Jan 2022 zmieniony
     
    Uparłem się ostatnio by zlinkować Shanti Sprite Multiplexer z programem napisanym w llvm-mos clang, efekt w załączniku (wrzuciłem też na youtube ale dużo mocniej miga, strzelam że youtube zmienił framerate?)

    Powstało w międzyczasie dość ciekawe narzędzie do konwertowania relokowalnych plików obx do formatu ELF obj, poniższe demo zostało zbudowane przy użyciu pliku engine.obx obecnego w archiwum. Ten sam wynikowy plik elf można użyć oczywiście też z rust-mos (można też się pokusić o opublikowanie na crates.io paczki a800xl-sprite-multiplexer, użycie potem biblioteki we własnym projekcie to dodanie jednej linijki do [dependencies] w Cargo.toml)

    Podziękowania dla @tebe za świetną dokumentację do formatu obx (choć kilka poprawek pewnie mogę na świeżo zasugerować)

    Źródla obx2elf postaram się udostępnić wkrótce.

    źródła 'demka' w clang: ->link<-
    • 47:
       
      CommentAuthorKaz
    • CommentTime13 Oct 2022
     
    Fajne.
  2.  
    Czasami widać, że literki mrygają. To znaczy, że multiplekser wtedy multiplekseruje.
    • 49: CommentAuthorgorgh
    • CommentTime13 Oct 2022
     
    źródełka zaskakująco czytelne jak na tak złożony język, dzięki!
    • 50: CommentAuthortebe
    • CommentTime13 Oct 2022
     
    w #1 poście jest ASM i PDF do tego silnika