Jack the Nipper na małe Atari by Adam Wachowski 2017-12-31 14:32:18
Miłą niespodziankę na Nowy Rok przygotowali nam Terrence „Tezz”
Derby i Mariusz „mariuszw” Wojcieszek, publikując
konwersję klasycznej gry przygodowo-zręcznościowej Jack the
Nipper. Kod powstał na podstawie wersji na ZX Spectrum wydanej
w 1986 roku przez Gremlin Graphics, a efekty dźwiękowe przeniesiono
z wersji na Amstrada.
O co chodzi w grze? Można zauważyć pewien wspólny rys rozgrywki z
opublikowaną niedawno przez Mariusza konwersją Skool Daze –
w tamtej grze naparzaliśmy z procy do nauczycieli i aplikowaliśmy
szkolnym kolegom fangi w nos, a tutaj realizujemy jeszcze szerszą
gamę marzeń o łobuzowaniu: psocimy na potęgę i robimy to, czego
zwykle nie można robić bez konsekwencji w prawdziwym świecie.
Możemy np. niszczyć przedmioty zrzucając z odpowiedniej wysokości
(uważajmy, aby w ten sposób przypadkowo nie utracić bezpowrotnie
tych przydatnych później), strzelać ziarnami grochu (po zebraniu
odpowiedniej rurki), czyścić kartę kredytową naszej mamy czy
straszyć koty.
Wszystko to robimy tak długo, aż widoczny u dołu
„niegrzecznościomierz” (NAUGHTY-O-METER) osiągnie 100%.
Trzeba jednak bardzo uważać podczas poruszania się między
pomieszczeniami. Zetknięcie się z dorosłymi kończy się klapsem w
tyłek – a po każdym laniu widzimy efekt na dolnym panelu: rosnący
wskaźnik zaczerwienienia skóry (RASH) i jeśli dojdzie on do
100%, Jack traci jedno życie. Również kontakt z wieloma innymi
stworzeniami zwiększa zaczerwienienie.
Przedmioty występujące w grze: rurka do strzelania grochem (aby
zlikwidować duszki), karta kredytowa (oznaczona literą A), kawałek
gliny, buteleczka z klejem, bateria, odważnik (z cyfrą 8), środek
chwastobójczy do niszczenia kwiatów (wygląda jak dwie buteleczki z
trupimi czaszkami), klucze, nocnik, dyskietka, paczka nawozu, mydło
w proszku, klakson (do straszenia kotów), bomba, walkman,
słuchawki, talerze, wazy, pluszowe misie.
Całość jest graficznie bardzo dopracowana, co w swoim czasie było
znakiem firmowym produkcji Gremlin Graphics.
Jak opowiada Tezz na Atari Age, chłopaki poświęcili
dużo czasu na przepisanie silnika sprajtów, aby zwiększyć jego
wydajność w porównaniu do wydań na inne platformy (w efekcie
szybkość jest lepsza niż na ZX Spectrum). Wkrótce ma się też
pojawić wersja na Atari ze 128KB pamięci, w której to wersji
dodatkowa przestrzeń będzie wykorzystana na przechowanie
prekalkulowanych faz ruchu (przesuniętych/ odbitych lustrzanie), co
jeszcze bardziej przyspieszy rozgrywkę.
Na koniec ciekawostka: główna postać jest luźno oparta na bohaterze
brytyjskiego komiksu Sweeny Toddler, publikowanego od 1973
roku. Autorzy gry zastosowali nawet podobny pomysł na nazwę
postaci: Sweeny Toddler (co można przetłumaczyć jako brzdąc Sweeny)
był aluzją do popularnej na Wyspach postaci Sweeneya Todda,
fikcyjnego golibrody-mordercy z XVIII wieku. Z kolei nazwa Jack
the Nipper (mały chłopiec Jack) odwołuje się oczywiście do
seryjnego mordercy z XIX wieku, Kuby Rozpruwacza (Jack the
Ripper).
Sterowanie:
• postacią sterujemy we wszystkich kierunkach za pomocą
dżojstika
• FIRE pozwala na skok (zwłaszcza gdy kierujemy dżojstik do góry),
ale umożliwia też strzelanie
• klawisze 1 i 2 służą do podnoszenia i upuszczania przedmiotów
(kieszeń widzimy po prawej stronie panelu),
• RETURN – przejście przez drzwi
• H – włączenie/ wyłączenie pauzy
• M – włączenie/ wyłączenie muzyki podczas gry
• Q – wyjście z gry
Twórcy gry:
• wersja oryginalna: Greg A. Holmes (drobna pomoc: John
Holmes)
• obrazek tytułowy: Peter M. Harrap
• muzyka i efekty dźwiękowe: Ben Daglish
• wersja na małe Atari: Terrence „Tezz” Derby, Mariusz
„mariuszw” Wojcieszek
Czaderskie, jak to zapiernicza :) xxl 2018-01-01 11:15:29
i jeszcze chca przyspieszac w wersji 130xe. po kilka duzych spritow animowanych na raz, bez migania... softsprity daja rade :-) grozny byk DVD 2018-01-01 13:16:49
wyslijcie mi instalke na mejla :) Kaz 2018-01-01 13:41:20
Jest moc without the price :D Gratsy Tezz & Mariusz! mariuszw 2018-01-01 17:16:06
Dzięki za pozytywny feedback ;) xxl 2018-01-01 21:41:46
w procedurze spritow moznaby zaoszczedzic 1 cykl na bajt wysokosci sprita.
chodzi mi po glowie od dluzszego czasu kolekcja procedurek softspritow... mariuszw 2018-01-02 12:47:03
@xxl: tak, wiem, tam można jeszcze trochę więcej zaoszczędzić wykonując tylko jeden przebieg - teraz są dwa, pierwszy na maskę, drugi na dane. Ale skupiłem się na wersji 128K i tego nie poprawiałem.
Gra chodzi w dwóch ramkach (25FPS), ale jak jest dużo sprajtów na ekranie (np. ekran "Pralni", gdzie są cztery duże sprajty plus Jack) to animacja nie wyrabia i spada do trzech ramek (16FPS). Wersja 128K na tych ekranach trzyma 25FPS.
Co do softasprajtów, to najszybsze jakie widziałem są w grach na Spectrum są w Pentagramie i Gunfright. Tam jest użyta 3,5K tabela z przesuniętymi bajtami w Pentagramie lub 3K tabela z przesuniętymi oraz z odbitmi bajtami w Gunfright (tutaj jednak sprajty są renderowane z dokładnoscią do dwóch pikseli).
W Jacku 128K jest ogólna procedura "cache'u" do softsprajtów, która na żądanie generuje przesuniętą (i ew. odbitą) wersję sprajta, a później udostępnia ją silnikowi sprajtów. Powinno być możliwe łatwe przystosowanie tej procedury do innych gier. Źródła udostępnie z Jackiem 128K. tebe 2018-01-02 14:54:09
taka kolekcja procedurek do softspritów dołączona jest do mads-a xxl 2018-01-02 15:13:43
masz racje ale mi chodzi raczej o optymalizowane na szybkosc wersje z nielegalami ... ta naj najszybsza z madsa przykladowo moze byc szybsza o 4 cykle na bajt wysokosci sprita, poza tym silnik to dla mnie nie tylko procedury stawiania spritow ale caly schemat postepowania xxl 2018-01-02 15:20:33
a wlasnie na tym schemacie postepowania, organizacji tablic i ich obslugi mozna sporo ugrac moim zdaniem Tezz 2018-01-02 17:06:20
Thanks also for the comments about the conversion.
Happy new year to everyone.
It was on my to-do list to merge all of the two passes of the multiple sprite procedures into single pass after rewriting them but I only did some of them in the end to meet the deadline :) With Mariusz further shift table optimisations and the sprite cache for the 128K version the performance of the game overall turned out well. STC 2018-01-02 18:11:07
To ja poproszę o taką kolekcje z turbo instrukcjami na 62k ramu.W trybach 2 i 4, może 4+ też ;). To się bardzo przyda. Biblioteki są niepotrzebne,kolekcja jak najbardziej. Dobra gra ma za zadanie używać wszystkich możliwych trików do uzyskania płynnego wyświetlania i jak najkrótszego czasu reakcji na akcję, bo bez tego nie ma dobrej rozgywki.Może ktoś w końcu zrobi orginalny dubble dragon na atari , albo inną bijatykę :D Dobrze przekonwertowany ten Jack , ale marzy mi się , że kiedyś powstanie orginalny zaprojektowany pod Atari projekt taki jak "cudowny" "alley cat",itp. Bo porty to tylko gacie, a nie garnitur szyty na "miarę" :D mariuszw 2018-01-02 20:24:43
Schemat działania Jacka jest taki:
1. Ekran jest (jak to w Spectrum) pod adresem $4000. 2. Gra używa bufora ekranu pod adresem $6000. Do tego bufora są renderowane sprajty a następnie z niego są przerzucane na ekran. 3. Tło ekranu jest zbudowane na znakach, to znaczy pod adresem bodajże $7200 jest 512-bajtowy bufor zawierający kody znaków tła. 4. Gra używa również dodatkowego bufora do przechowywania informacji dla każdego znaku ekranu o tym, że wymaga on kopiowania na ekran. Każde narysowanie sprajta wpisuje w odpowiednie miejsce w buforze informację o tym, że dany znak wymaga odświeżenia. 5. Po narysowaniu wszystkich sprajtów, gra sprawdza bufor z punktu 4 i dla każdego znaku wykonuje kopiowanie z bufora ekranu ($6000) na ekran ($4000) oraz przywraca tło w buforze ekranu ($6000) używając bufora z punktu 3. 6. Bufor z punktu 4 przechowuje bajt. Na początku jest tam wpisywana wartość 2 jeśli znak wymaga odświeżenia. Procedura z punktu 5 zmniejsza wartość w buforze o jeden. Dzięki temu jeśli sprajt zniknie z ekranu, to w następnym obiegu (punkt 5) zostanie przywrócone tło.
Całkiem to sprytne. W wersji na Atari trochę usprawniłem, i dodatkowo przechowuje adres pierwszego znaku w buforze (4) który wymaga odświeżenia. Dzięki temu oszczędzam na niepotrzebnym skanowaniu np. 200 bajtów w buforze, jeśli na górze ekranu nie było zmian. pavros 2018-01-02 20:49:12
Pięknie to wygląda! Kiedyś czytałem o tej grze w Bajtku - z wiadomym uczuciem, gdyż na liście wspierających platform nie było małego Atari. Jak miło życie potrafi zaskoczyć. :) Dracon 2018-01-03 14:09:43
"Saboteur", "Skool Daze" a teraz "Jack the Nipper" - wygląda jakby autor czytał w moich myślach. :O Prawdziwe spełnienie życzeń!!! :) PROgramista MariuszW do ozłocenia!!! Adam 2018-01-03 17:47:52
@xxl: a propos Twojej propozycji użycia nieoficjalnych rozkazów. Oto fragment wypowiedzi autora oryginalnej wersji na Spectrum (Grega Holmesa) dla Retro Gamera:
"Because of the big sprites I had to use illegal Z80 instructions because I ran out of registers. I had read an article in Personal Computer Weekly on this and then applied it to the sprite routine and that took some getting your head around." https://www.retrogamer.net/retro_games80/the-making-of-jack-the-nipper/ raphis 2018-01-03 19:43:55
Moja nowa ulubiona gra na Atari. Thanx!!!!!!!!!!!!!!!!!!!! Tomasz 2018-01-08 22:30:04
druga część też jest w planach ? ;) Lukaso 2018-01-09 09:31:29
Mapa jak przejść grę jest na naszej stronie Atari.panprase.cz, sekcja mapy. mariuszw 2018-01-09 20:20:20
Wypuściliśmy zapowiadaną wersję 128K na AtariAge.
@Tomasz: Nie, drugiej części nie mamy w planach. jack 2018-01-12 12:44:47
Jack the nippler? marek 2018-01-29 02:01:15
W porownaniu do c64 wyglada biednie. Kolejny dowod na wyzszosc komody atarINTRUDER 2019-02-05 20:31:17
W grze jest błąd : po wciśnięciu klawisza 'Q' (zakończenie gry) i odpowiedzi przeczącej 'N' i tak wyjdziemy z gry :-(