Krzysztof „Amarok” Piotrowski w ubiegłym roku zadebiutował udaną Arcadią w stylu gier Luxor czy Zuma. A w tym roku na konkurs programistyczny ABBUC przygotował platformówkę „Time Wizard” (luźno inspirowaną świetną grą Braid z 2008 roku, dostępną na wiele współczesnych platform).
Poniżej przedstawiamy opis gry i jej technikaliów przygotowany przez autora i opublikowany na naszym forum w ostatnich tygodniach (tutaj odpowiedni wątek). Warto podkreślić, że Amarok po raz kolejny stworzył swoją produkcję samodzielnie, pisząc kod, rysując grafikę oraz adaptując utwory muzyki klasycznej przy wykorzystaniu własnego playera.
Amarok pisze tak:
Z ogromną przyjemnością chciałbym przedstawić Wam moją grę wysłaną na konkurs ABBUC Software Contest 2023. Time Wizard jest platformową grą, w której gracz posiada zdolność manipulacji upływem czasu.
Fabuła gry: Roboty z przyszłości próbują zmienić historię, żeby rządzić światem. Jedynym ratunkiem dla ludzkości jesteś ty, Time Wizard (Czasodziej ;)). Musisz udać się do przyszłości, do świata robotów, żeby zapobiec katastrofie. Twoim zadaniem jest zebranie całej energii zgromadzonej w klepsydrach, żeby roboty nie mogły cofnąć się w czasie.
Misja jest trudna, ale twoją przewagą jest umiejętność manipulacji czasem. Możesz go zatrzymać, cofnąć albo przewinąć do przodu. Bądź jednak czujny! Niektóre obiekty są odporne na manipulację czasem i nie możesz ich kontrolować.
Sterowanie: Podczas gry naciśnij przycisk w dżojstiku, żeby zacząć manipulację czasem. Kiedy przycisk jest wciśnięty, przesuń w lewo, żeby cofnąć czas lub w prawo, żeby przywrócić zapisaną historię. Możesz zmieniać tempo upływu czasu poprzez wychylenie dżojstika w lewo lub prawo. Zwolnij przycisk, żeby przywrócić normalny upływ czasu. Jeśli zginiesz, naciśnij przycisk i wychyl dżojstik w lewo, żeby cofnąć czas. Naciśnij klawisz START, żeby zrestartować poziom. Naciśnij klawisz SELECT, żeby przejść do głównego ekranu.
Dodatkowe informacje: Na głównym ekranie jest możliwość wyboru jednego z 15 poziomów. Na początku wszystkie poziomy za wyjątkiem pierwszego są zablokowane. Musisz przejść dany poziom, żeby odblokować następny. Aby to zrobić należy zebrać wszystkie klepsydry, a następnie przejść do portalu czasowego.
Masz ograniczony czas na zaliczenie poziomu, ale pamiętaj, że zawsze możesz cofnąć czas jeśli tego potrzebujesz. Czas, którego nie wykorzystasz, jest wynikiem danego poziomu. Im więcej, tym lepszy wynik. Wartość sumaryczna ze wszystkich poziomów jest twoim całkowitym wynikiem widocznym na ekranie głównym.
Minimalne wymagania: • Komputer lub emulator Atari 8-bit z co najmniej 128kB RAM (dodatkowa pamięć RAM jest wykorzystywana do zapisywania i odtwarzania historii gry). • Dżojstik albo inny kontroler wpięty do portu 1.
Rekomendowane jest odblokowanie zapisu na dyskietce, żeby zachowywać wyniki oraz informację o aktywnych poziomach.
Poniżej dla zainteresowanych jeszcze garść technicznych informacji na temat gry. Przy okazji chciałbym podziękować całej społeczności Atari za ogrom wiedzy, którą chętnie się dzielą. W szczególności wyróżniłem niektóre osoby, których narzędzi użyłem podczas tworzenia Time Wizarda.
Czas trwania projektu: Prace nad projektem zajęły mi mniej więcej 5 miesięcy od końca lutego do końca lipca. Historia gita zawiera 175 commitów, które zostały wprowadzone w przeciągu 93 dni.
Środowisko programistyczne: Gra została zaimplementowana w MadPascalu, którego autorem jest Tomasz Biela (@tebe). Moje środowisko programistyczne to Visual Studio Code z rozszerzeniem do Pascala, którego autorem jest Allesandro Fragnani.
Kod źródłowy zajmuje około 10k linii, w tym około 2k to kod w asemblerze. W asemblerze zaimplementowałem głównie obsługę przerwań, silnik dźwiękowy oraz najbardziej krytyczne elementy wymagające szybkich obliczeń.
Kod wynikowy, czyli plik xex zajmuje niecałe 54 kB pamięci, a całość znajduje się na dyskietce 90 kB i uruchamiana jest pod kontrolą systemu DOS 2.5.
Środowisko testowe: Do testowania i debugowania programu wykorzystywałem emulator Altirra, którego autorem jest Avery Lee (@phaeron). Użyłem także swojego wysłużonego komputera Atari 130XE z SIO2PC jako emulator stacji dyskietek.
Grafika tytułowa i końcowa: Ekrany tytułowy oraz końcowy (widoczny po przejściu całej gry) są wyświetlane w bitmapowym trybie Antic E. Widoczna większa ilość kolorów niż 4 jest wynikiem przerwań DLI oraz użycia grafiki graczy i pocisków (Player/Missile Graphics).
Obrazy pierwotnie narysowałem w programie Inkscape, następnie wyeksportowałem je do bitmap o docelowej rozdzielczości dla Atari. Ostatnie szlify i korekty obrazów wykonałem w programie MS Paint.
Następnie przygotowałem skrypty w Pythonie konwertujące bitmapy do wynikowych plików do Atari. W ten sposób mogłem wygenerować pliki grafiki 2-bitowej głębi kolorów do formatu Antic E, jak i dane grafiki graczy i pocisków.
Dodatkowo generowany jest szkielet programu obsługi przerwań DLI do zmiany kolorów oraz pozycji graczy i pocisków w poszczególnych liniach ekranowych.
Grafika plansz: Wszystkie elementy planszy oraz elementy ponad nią są w znakowym trybie ANTIC 4. Przygotowałem w sumie 4 zestawy fontów – jeden do tekstów i elementów GUI (widocznych też w menu głównym), drugi to elementy graficzne na planszy. Pozostałe 2 zawierają grafikę wykorzystywaną podczas animacji elementów na planszy.
Fonty przygotowałem w programie Atari FontMaker, którego autorami są Martin Simeček (@matosimi) oraz Peter Hinz (@RetroCoder).
Grafika bohatera: Bohatera jest rysowany przy pomocy grafiki graczy i pocisków – całkowity rozmiar bohatera to 10x18 pikseli. Wykorzystałem nałożenie na siebie odpowiednich par graczy i pocisków, żeby uzyskać więcej kolorów.
W sumie powstało 36 klatek animacji zawierających różne elementy ruchu bohatera. Do projektowania grafiki użyłem edytora SprEd, którego autorem jest Wojciech Bociański (@bocianu).
Muzyka i dźwięki: Jedną z idei gry Time Wizard jest możliwość przewijania czasu gry, w tym odtwarzanych efektów dźwiękowych i muzyki. Zdecydowałem się na stworzenie prostego silnika umożliwiającego odtwarzanie muzyki i dźwięków z różną prędkością, w tym również wspak.
Silnik ten ma pewne ograniczenia i nie daje takiej elastyczności odtwarzania jak np. Raster Music Tracker w kontekście efektów, filtrów itp. Jednak w tym przypadku nie to było istotne – ważniejsze było wydajne odtwarzanie dźwięku z różnymi prędkościami.
Ostatecznie 3 kanały są wykorzystywane do odtwarzania muzyki, a czwarty do efektów dźwiękowych. Muzykę oraz efekty przygotowałem w programie Raster Music Tracker, którego autorami są Radek Sterba (Raster) oraz Vin Samuel (@VinsCool).
Tak przy okazji, w grze można usłyszeć następujące utwory: - "Kyrie Eleison" W. A. Mozarta - "Waltz of the Flowers" (Walc kwiatów) z baletu "Dziadek do orzechów" P. I. Czajkowskiego - "Dance of the Little Swans" (Taniec małych łabędzi) P. I. Czajkowskiego - "Voices of Spring" (Odgłosy wiosny) J. Straussa syna - "Sonata No. 8 Op. 13" L. Van Beethovena
Kompresja: Gra wykorzystuje dane graficzne, dźwiękowe i inne, które zajmują sporo miejsca, dlatego zdecydowałem się na wykorzystanie kompresji danych, żeby wszystko pomieścić w pamięci RAM.
Po kilku próbach zdecydowałem się na wykorzystanie (de-)kompresora zx5, którego autorami są: Einar Saukas oraz Krzysztof Dudek (@xxl). Prawie 45 kB danych udało się skompresować do rozmiaru niecałych 16 kB, co daje poziom kompresji na poziomie około 35%.
Poziomy: Przygotowałem bardzo prymitywny edytor poziomów w języku Python i bibliotece PySimpleGUI. Edytor nie jest zbyt wygodny w użytkowaniu, ale nie miałem czasu na implementowanie czegoś bardziej wyrafinowanego.
I to właściwie wszystkie podstawowe informacje techniczne. Gdybyście mieli jakieś pytania, to śmiało piszcie - postaram się wyjaśnić w miarę możliwości.
***
To tyle od Amaroka, dziękujemy za tak szczegółowy opis i życzymy mu powodzenia w konkursie ABBUC!
Jeśli chodzi o tegoroczną edycję, to zgłoszono łącznie 11 gier i 3 programy narzędziowe. Kiedy Time Wizard będzie mógł być udostępniony? Walne zgromadzenie niemieckiego klubu ABBUC odbędzie się w sobotę 28 października [EDIT: poprawiona data] i wówczas możemy się spodziewać ogłoszenia wyników konkursu, a później stopniowego udostępniania gier przez twórców.
2023-09-20 20:29 by "Adam"
komentarzy: 24
xman @2023-09-20 21:20:06
Świetna gra. Czy ktoś z szanownego grona Atarowców orientuje się, czy członkowie ABBUC dostali już gry zgłoszone na konkurs do testów?
The ABBUC members have not received the games of the competition yet, think it will take a few more days or maybe one more week (the paper-supplements are currently at the printery).
The paper-supplement for magazine 154 has a size of 68 pages and the paper supplement for the Sondermagazin has a size of 32 pages - both required quite some time for editing, proof-reading and creating the layout. And the "Sondermagazin 53" (special magazine nr. 53) features four disksides with all programs of the contest, while magazine nr. 154 features two disksides. The disks took also some time to create and test before they are copied with several Super Speedy and Mega Speedy drives and released to the public.
emkay @2023-09-20 22:59:25
Everything is fine. If only the sound was "2023" and not "1970" ;)
xman @2023-09-21 08:39:37
CharlieChaplin: Thank you for the information!
jhusak @2023-09-21 09:51:08
The sound is great and fits the game very well.
_ilmenit_ @2023-09-21 12:58:35
@emkay, considering your "achievements" and general level of understanding of programming topics, maybe you should be a little bit more humble instead of criticizing.
MDW2 @2023-09-21 18:08:16
Uuuaauuu. To jest ładne, w jakimś stopniu innowacyjne (przynajmniej na ośmiobitowcach, a już na pewno na Atari), pomysłowe, wygląda na świetnie wykonane i grywalne.
Miałem zapytać o to jak jest robione cofanie czasu ale opis to wyjaśnił (wymagane 128KB RAM) i już sobie wyobrażam. Szacun za zaimplementowanie tego na ośmiobitowcu. Bardzo mi się podoba to co się dzieje podczas cofania czasu (paleta czarno-biała i te niby VHS-we "śmieci" na ekranie).
Generalnie cała grafika bardzo pozytywnie zasakauje. Każdy element jest zrobiony ze smakiem, wyczuciem, bez szmiry, nadmiernych "efektów" w stylu disco lat 80 tylko po to żeby pokazać atarowską tęczę i że Atari też potrafi. :) Ostatni raz byłem tak zachwycony oprawą graficzną stworzoną przez programistę we Flobie, a wcześniej w latach 90 w produkcjach Kuby Husaka. Jak dla mnie w świecie małego Atari jest już trzech Jakubów Husaków: oryginał, Bocianu i Amarok. I wszyscy aktywni!
Amarok - ode mnie dostajesz złoty medal. Nie ciesz się za bardzo, bo w świecie ten tytuł ma zerowe znaczenie. :) Ale u mnie stoisz na podium razem z Kubą Husakiem, Bocianu i Leonardem da Vinci (tym prawdziwym ze średniowiecza).
MDW2 @2023-09-21 18:10:29
Leonardo da Vinci urodził się rok przed symboliczna datą końca średniowiecza więc proszę mi się tu nie czepiać, że gość był z renesansu. :) ;) Wtedy wszystko powoli postępowało. ;)
amarok @2023-09-21 19:20:34
@emkay, you are compelety right. Time Wizard likes music with an old sound, so he took his favorite songs to the future. ;)
@MDW2, dziękuję bardzo za miłe słowa, ale nie jestem godzien stać pośród takich Twórców, których wymieniłeś.
Szczęśliwie dla nas wszystkich jest wielu niespotykanie zdolnych programistów, którzy mają chęć i umiejętność tworzenia niesamowitych gier. Oj, chciałoby się widzieć to wszystko w latach 80-tych :)
Adam @2023-09-21 22:14:48
quote (MDW2):
Ostatni raz byłem tak zachwycony oprawą graficzną stworzoną przez programistę we Flobie, a wcześniej w latach 90 w produkcjach Kuby Husaka.
Jeśli chodzi o połączenie talentu programistycznego i graficznego - ciekawsze przykłady z ostatnich lat:
Można też wspomnieć o powstającym "Dude Story" - Mq robi tam wszystko :)
Anon @2023-09-22 07:41:38
Nie zapominajmy o Shanti77, to też programista level deluxe. A gra wygląda świetnie
Adam @2023-09-22 14:49:36
@Anon: a o czym piszesz? Bo dyskusja dotyczy osób łączących kodowanie i grafikę.
Możesz wskazać jakąś grę, do której Shanti77 stworzył oryginalną grafikę? Bo ja znam jego gry, w których adaptował grafikę np. z wersji arcade albo C64 oraz takie gry, w których pomagał mu grafik.
Ostatnio współpracuje z Odyńcem - jeśli piszesz o "świetnie wyglądającej" grze, to może masz na myśli właśnie grafikę Odyńca w "Trax".
tr1x @2023-09-23 18:13:33
Gra bardzo mi się podoba wizualnie. Wygląda jak z jakiejś lepszej platformy niż A8 (choć A8 to świetna platforma) :)
jhusak @2023-09-24 09:26:10
W ogóle tego rodzju grafika z czarnymi krawędziami robi wrażenie "konsolowej". Gra wygląda przepięknie i wyznaczyła by w epoce nowe trendy jakości. Gratulki.
jhusak @2023-09-24 09:33:39
A co do "człowieków orkiestrów" to nie można wspomnieć o TDC, który nie wiem, czy wśród dziesiątków (jeśli nie setek) swoich produkcji kiedykolwiek się skalał pożyczoną grafiką czy muzyką? Pewnie w jednostkowych przypadkach tak, np. Tomcat, ale jednak zwykle tego nie robi.
Adam @2023-09-24 13:47:46
TDC korzysta praktycznie zawsze z pomocy jakiegoś muzyka, a graficznie sporo razy korzystał z pomocy (np. Bioptronid, Calamanis, Grim Ritual) - ale fakt, że graficznie najczęściej radzi sobie sam.
IRATA4 @2023-09-24 15:46:37
No, no, kolorowo, atarowo, ładnie. :)
kade @2023-09-25 15:16:25
Giera wyglada super !
Wojtek @2023-09-30 16:27:21
Wow!
Adam @2023-10-02 23:04:10
Jednak walne zgromadzenie klubu, podczas którego mają być ogłoszone wyniki, odbędzie się 28.10 w sobotę, a nie jak początkowo napisałem 22.10. Poprawiłem w tekście.
Programista Bart @2023-11-03 12:27:15
Super produkt po przeczytaniu naszło mnie żeby spróbować jakiś hello world pod 8 bit ... czy mogę liczyć na wsparcie ? w bascicu to umiem i naklepałem kiedyś heartlight Avalonu zgrywusem Mam już VSCode ..... macie jakiś namiar na jakis tutorial MadPascala ? Jakiegoś gita z example ?
Adam @2023-11-05 00:34:35
@Programista Bart: przykłady dołączone są do paczki Mad Pascala.
Na jego stronie jest też wstępny materiał o wykorzystaniu współczesnych narzędzi developerskich przy programowaniu na Atari: https://bocianu.atari.pl/dokumenty