[Atari] AtariOnLine: Światowa premiera "Alberta"

[1] # AtariOnLine | Niedziela, 14 Lutego 2021 15:33CET

[Atari] AtariOnLine: Światowa premiera "Alberta"
Od początku istnienia AtariOnline.pl w 2004 roku jedną z najpiękniejszych i najprzyjemniejszych rzeczy jest możliwość prezentowania nowych programów dla Atari, czy to właśnie powstałych, jak poniższa gra, czy odnalezionych po latach w szufladzie, tudzież innej, mrocznej piwnicy... Za każdym razem, przy okazji takiej publikacji, odczucia mam podobne do tych, które towarzyszą otwieraniu prezentu świątecznego. Nowa gra, demo czy program użytkowy na Atari wywołuje ciekawość i ekscytację jak przy otwieraniu świątecznego pudła z nieznaną zawartością. Nie inaczej jest dzisiaj, szczególnie że prezent jest bardzo kolorowy i wykonała go osoba, która po latach przerwy wróciła do pasji z dzieciństwa, programowania na komputerze ze znaczkiem JIL.



Dzisiaj, jako prezent walentynkowy, mam przyjemność zaprezentować grę Albert kolegi Kski oraz przedstawić kilka słów od autora na temat tego programu. Przyjemność tym większa, że maczałem w projekcie palce. Głos oddaję programiście, koderowi Kski:

"Przed wielu laty, jako nastolatek czerpiący całą wiedzę o programowaniu z kursów Action!", oraz opisów przerwań, autorstwa Wojciecha Zientary w "Bajtkach", napisałem kilka gier w języku Action!. Udostępniłem je koledze, a potem zapomniałem zarówno o nich, jak i o komputerze Atari, który z braćmi sprzedaliśmy wraz z kasetami, zamieniając go na Amigę. Po latach, z ogromnym zdziwieniem, przypadkowo znalazłem je w internetowych archiwach gier Atari. Trzy lata temu, ponownie przypadkowo, trafiłem na forum i ze zdziwieniem zauważyłem, jak wielu ludzi aktywnie działa w temacie retrokomputerów i że wciąż powstają nowe programy i gry.

Z zawodu jestem programistą, lubię wyzwania algorytmiczne, a i pozostał duży sentyment do Atari, na którym się uczyłem programować. Architektura Atari wydała mi się bardzo ciekawa - i powtórzę tutaj to, co już wielokrotnie pisano na forum, ale to niepodważalny fakt - drzemią w niej jeszcze rozliczne, niewydobyte możliwości. Często trzeba jednak włożyć więcej pracy w ich uzyskanie, niż na konkurencyjnych platformach, szczególnie tych z mnogimi duszkami sprzętowymi. Z drugiej strony programowanie dla Atari dzisiaj jest też dużo łatwiejsze, dzięki istniejącym emulatorom i narzędziom na PC.

Gra "Albert" od początku miał być prostą platformówką, pisaną po to, żeby poznać MadPascala jako alternatywę dla asemblera, oraz po to, aby sprawdzić, ile da się wycisnąć z Atari w temacie grafiki, wykorzystania DLI, dostępnego czasu procesora, itd. No i odpowiedzieć na najważniejsze pytanie: czy gry na Atari, postacie w nich umieszczone, mogą być ładniejsze niż to się przyjęło, bardziej kolorowe. Gra pozwoliła osiągnąć tak postawione cele i naprawdę dużo się nauczyłem podczas jej tworzenia. Pozwoliła mi lepiej zrozumieć co w Atari piszczy, chociaż wciąż pozostało jeszcze kilka pomysłów do sprawdzenia. MadPascal nadaje się doskonale do tworzenia gier, a jeśli na koniec brakuje czasu procesora - a brakuje - łatwo przepisywać działający już kod, wiersz po wierszu, na asembler.



Zamierzenie było takie, by gra była dynamiczna, a tytułowy Albert mógł nie tylko chodzić, ale i biegać. Długość skoku jest zależna od prędkości naszego bohatera w momencie wybicia się w górę. Dla wygody graczy rozpędzenie się do pełnej prędkości jest szybkie, trwa mniej niż sekundę. Nawet skok z minimalnego rozbiegu, dosłownie po jednym kroku na malutkiej platformie, jest już dłuższy niż skok całkowicie z miejsca. Problemem okazało się jednak opracowanie wygodnego sterowania joystickiem, tak, aby normalnie chodząca postać mogła na żądanie zacząć biec. Jest przecież tylko jeden przycisk w joysticku. Wraz z trwaniem prac nad grą powstały więc trzy alternatywne rodzaje sterowania, z których ostatnie jest ustawione jako domyślne. Po wychyleniu joysticka w bok postać zawsze biegnie, a raczej rozpędza się do biegu, a następnie biegnie; natomiast wciąż można iść wolniej kierując joystick w dół na ukos. Wersje sterowania wybierane są klawiszami 1-3 na stronie tytułowej i w samej grze. Ponieważ postać jest stosunkowo duża, skoki dalekie, często nie widać wcześniej, gdzie Albert doleci lub co jest pod nim. Dlatego w każdej chwili można zatrzymać grę spacją i przesuwać kamerę (oczywiście w ograniczonym zakresie), żeby zobaczyć co jest dalej czy niżej.



Krótko o tym, jak to jest zrobione, bo takie pytania już się pojawiały na forum. Trzy duszki sprzętowe P0/1/2 oraz M0/1/2 wykorzystane są na postać Alberta. Dzięki temu nasz bohater może mieć trzy dowolne kolory w każdej linii, a więc czarny plus dwa dowolne inne, co nie byłoby możliwe przy nakładaniu kolorów dwóch duszków. Rozwiązanie takie jest jednak kosztowne (tracimy prawie wszystkie duchy jak i możliwość dokolorowania nimi tła) i zarzuciłem je w pracach nad następnym silnikiem, do kolejnej części przygód Alberta. Ostatni duszek sprzętowy zostaje zużyty na drabinki. Trzeba je więc przesuwać wraz z polem gry, no i przycinać na krawędziach ekranu. To z kolei jest kosztowne ze wzglądu na czas procesora, również zostało usunięte w silniku do drugiego Alberta. Co nie oznacza wcale, że nie będzie drabinek. Ale rezygnując z powyższego i robiąc postać na dwóch duszkach, zyskujemy dużo więcej możliwości gdzie indziej.

Platformy i owady zrobione są na znakach, kolory COLPF0-3 są odpowiednio zmieniane w kodzie DLI przed kolejnymi liniami ekranu, a więc jest bardziej kolorowo w pionie. Woda to jednokolorowe (niebieskie) znaki z dziurkami, przesuwającymi się w dół, i duszkami sprzętowymi schowanymi za nimi (zarówno graczami, jak i pociskami), poszerzonymi, w jaśniejszych kolorach, ale poruszającymi się z inną prędkością i na różnych pozycjach, dzięki czemu nie jest to zwykłe przewijanie, bo "bąbelki" żyją własnym życiem.

Za zmianę kolorów na ekranie (i innych rejestrów GTIA) jest odpowiedzialny kod DLI. Jest to jedna, wielka procedura dla 40 wierszy (40*8 linii) ekranu, przy czym 5 pierwszych wierszy jest pustych, aby Albert mógł skakać nad najwyższymi platformami. Widoczne pole gry ma wysokość 22 wierszy, nad nim znajdują się dwie puste linie ekranu, nad nimi dwa wiersze z napisami (życia, energia...). Te dwie puste linie ekranu pod napisami potrzebne są na inicjalizację wszystkich rejestrów wartościami właściwymi dla aktualnej pozycji pionowej pola gry. Następnie procesor wskakuje do procedury DLI we właściwe miejsce (JSR do właściwej etykiety), a po wyświetleniu 22 wierszy wyskakuje za sprawą wcześniej spreparowanego w odpowienim miejscu rozkazu RTS (a następnie RTI i powrót z przerwania DL).

Jak wiadomo, przed rozpoczęciem linii mamy mało cykli do wykorzystania, a zmian do wykonania w Albercie dużo, więc wszystkie wartości do ustawienia ładowane są przez rozkazy LDA/X/Y w trybie natychmiastowym. Rozkazy te są opisane etykietami, a część wartości jest zmieniana z kodu gry (tak nazywam tu resztę kodu, nie kod obsługi DLI), niektóre już podczas inicjalizacji poziomu gry, np. CHBASE, COLPF0-3, aby różne owady mogły być na danej wysokości w różnych levelach, inne już w trakcie gry, jak np. kolory Alberta, który przecież przesuwa się w pionie i ma różne kolory w różnych liniach.

Pierwotnie podobnie zrobiona była tęcza w tle gry. Wartości dla każdej linii ekranu inicjalizowane były z kodu gry w każdej ramce (przy scrollu pionowym), korzystając z tablicy adresów etykiet w kodzie DLI do podmiany wartości, co oczywiście trwało długo. Ponieważ zostało sporo cykli wolnych w DLI, już podczas wyświetlania kolejnych linii ekranu, udało się to przenieść (wraz ze zwiększaniem indeksu i odczytywaniem wartości z tablicy) do samego kodu DLI. A ponieważ poprzednie zdanie nie jest prawdziwe dla pierwszej linii każdego wiersza, bo podczas wyświetlania tych linii nie mamy żadnych cykli dostępnych, dla nich wartości są przygotowywane o linię lub dwie wcześniej. Ponieważ procesor wisi w DLI przez cały czas wyświetlania obrazu, gra musi rozgrywać się podczas synchronizacji pionowej. Już kwestie takie jak woda, drabinki na PMG, czy inicjalizowanie wielokolorowej postaci Alberta w kodzie obsługi DLI zajmują dużo czasu, nie mówiąc o całej reszcie kodu, niezbędnego w każdej grze. Dlatego finalnie prawie cały kod jest w asemblerze, chociaż MadPascal sprawdził się świetnie do całego procesu tworzenia, a także ze względu na łatwość przepisywania działającego już prawidłowo kodu na asembler, funkcja po funkcji, lub wręcz linijka po linijce.

Gra wyróżnia się pod względem grafiki, za to pod względem gameplay'a... No cóż, jest to najbardziej banalna platformówka, jaką sobie można wyobrazić. Przemieszczamy się po platformach, zbierając diamenty, a przeszkadzają nam owady i przeszkody terenowe. Nie ma zabijania owadów, bo od początku tak było planowane. Platformy są zawsze na tych samych wysokościach, bo tak skonstruowany jest kod obsługi DLI. To on jest siłą tej gry, ale jednocześnie i ograniczeniem. Kolory są zmieniane w pionie, ale w poziomie wciąż są to cztery kolory plus tło. Cała ta gra to eksperyment, którego kod kręci się wokół maksymalnego wykorzystania przerwań DL. Dla mnie eksperyment zakończony sukcesem, pokazuje że się dużo da, ale... da się więcej!

Można podejść do tematu jeszcze bardziej nowatorsko. I dlatego prace nad silnikiem Alberta dalej trwają, a w planach jest "Albert II". Scroll pionowy w połączeniu z właściwym kodem DLI daje ogromne możliwości, znika ograniczenie czterech kolorów w linii, które narzuciło wygląd poziomów prezentowanej gry. Oczywiście coś za coś. No i ogrom pracy. Ale prototypy pokazują, że się da. Dwa lata temu, gdy zaczynałem pisać grę, nie mogłem tego wszystkiego wiedzieć, dlatego program mocno ewoluuje i silnik się zmienia. No i jest zespół ludzi zaangażowany w drugiego "Alberta", również w zrobienie dobrego gameplay. Ale to potrwa i będzie wymagać już tego nowego silnika. Dlatego dzisiaj zamykamy rozdział pod tytułem "Albert" i rozpoczynamy kolejny. Podsumowując, mimo tego że ta gra, a raczej mini-gierka biorąc pod uwagę prostą rozgrywkę, jest skończona, to nie koniec przygód Alberta, a mam nadzieję, jeżeli zdrowie pozwoli, jedynie początek. Jeżeli komuś gra w obecnej postaci się spodoba to miłej zabawy, a Albert prosił mnie o przekazanie krótkiej wiadomości:
"I'll be back!"."




Do opisu technikaliów gry warto dodać, że program działa na Atari z 64KB pamięci RAM, ale wtedy uruchamia się tylko z trzema testowymi poziomami i bez wszystkich grafik. Pełnię szczęścia i wszystkie poziomy gry osiągniemy przy 128KB pamięci.

Autorzy:
Program: Kski
Muzyka: Kski
Grafika: Kaz
Grafika poziomów i poziomy: Kski
Grafika panelu w grze, fonty: Kaz
Animacje obiektów: Kski, Odyn1ec, Kaz
Animacja bohatera: Triplex

Sterowanie:
  • wybierane klawiszami 1-3
  • pod klawiszem 1: przytrzymaj fire, żeby biec; joy w górę, żeby skoczyć
  • pod klawiszem 2: wybierz skos, aby zacząć biec; fire, aby skoczyć
  • pod klawiszem 3: defaultowo bieganie; aby chodzić wybieraj skos w dół.

    W imieniu wszystkich autorów życzę dobrej zabawy z grą! Pliczek z grą o wadze 104KB do ściągnięcia stąd.



    2021-02-14 15:33 by Kaz
    komentarzy: 2
  • → NOWSZY [Atari] AtariOnLine: Zapowiedź KWAS #26 w Tarnowie
    → NOWSZY [Atari] AtariOnLine: Streaming z KWAS #25
    → NOWSZY [Atari] AtariOnLine: Wywiad z Pazurem
    → NOWSZY [Atari] AtariOnLine: KWAS #25 w Warszawie
    → NOWSZY [Atari] AtariOnLine: Spotkanie z człowiekiem z L.K. Avalon
    → NOWSZY [Atari] AtariOnLine: (Prawie) wszystko o Uni-Joy
    → NOWSZY [Atari] AtariOnLine: Światowa premera gry "Zgred"
    → NOWSZY [Atari] AtariOnLine: Kuba przegląda dyskietki #2
    → NOWSZY [Atari] AtariOnLine: Światowa premiera gry "Smok"
    → NOWSZY [Atari] AtariOnLine: Koncert Husaka na przełom 2021/22
    wstecz14/02/2021 15:33
    Inne treści związane z tematem
    [multi] BizHawk x64 2.8 RC1 27/01/2022 [multi] BizHawk x64 2.8 RC1 27/01/2022
    Wersja testowa multiemulatora BizHawk, specjalnie dla osób chcących sprawdzić i wspomóc projekt. Ten napisany w C# multiemulator pozwala udawać  konsole: Nintendo Entertainment System / Famicom / Famicom Disk System (NES/FDS), Super Nintendo (SNES), Nintendo 64, Gameboy, Gameboy Color, Super Gameboy, Sega Master System, SG-1000, Game Gear, Sega Genesis / Sega-CD, Sega ...
    [PSX2] Dev PCSX2 SVNv1.7.2277 2022-01-25 21:34:35 [PSX2] Dev PCSX2 SVNv1.7.2277 2022-01-25 21:34:35
    Bocianu opracował nowy edytor, który służy do szybkiego tworzenia sprajtów (grafiki P/M) dla ośmiobitowych Atari. Program pracuje w nowoczesnych przeglądarkach WWW, przez co nie jest wymagana instalacja czegokolwiek. Najważniejsze możliwości: edycja i animowanie trójkolorowych sprajtów (nałożonych) maksymalna wysokość sprajta: 128 pikseli maksymalna ilość klatek animacji: ...
    [Atari.Area] Atari800MacX 6.0.1 [Atari.Area] Atari800MacX 6.0.1
    Użytkownicy maszyn z MacOS X, a w szczególności posiadacze najnowszych modeli z procesorem M1, z pewnością będą zadowoleni, ponieważ od wersji 6.0 ich maszyny mogą się cieszyć wsparciem dla nowych układów od Apple. Zmiany i poprawki: Added support for ARM based M1 Macs. Update libSDL to version 2.0.14. Removed 2k limit on the number of characters that can be pasted into the ...
    [Atari.Area] LiteDOS-SE Build 2022 January 26 [Atari.Area] LiteDOS-SE Build 2022 January 26
    Ukazała się kolejna kompilacja minimalistycznego w rozmiarze DOS dla ośmiobitowych komputerów Atari. W poprawkowej wersji zauważymy: Fixed some 400/800 bugs and non Atari-OS Archiwum dystrybucyjne zawiera również kompleksową instrukcję użytkowania wraz z informacjami technicznymi. Pobieramy ze strony projektu.
    [Atari.Area] 4th Annual Atari Homebrew Awards [Atari.Area] 4th Annual Atari Homebrew Awards
    Jak co roku, przez ZeroPage Homebrew, AtariAge, Mark/Space | Argon, Atari Gamer oraz The Atari 2600 Homebrew Companion, organizowany jest konkurs na najlepszą pracę dla komputerów i konsol Atari w kilkunastu kategoriach. Rozpoczęło się właśnie głosowanie, w którym można wziąć udział będąc zarejestrowanym na forum AtariAge. W gronie nominowanych znalazły się również m.in. ...
    Komentarze
    Ostatnio dodane pliki

    T-shirt "Great Escape Zx Spectrum Crash"

    Retro T-Shirt Great Escape Zx Spectrum Crash - męski podkoszulek
    Newsy Linkownia Emulatory na PC Wideoteka Screenshoty Bajtek Reduks Ready.Run

    © Try2emu 1999 - 2022 | Krzysztof 'Faust' Karkosza Google+Kontakt