atarionline.pl
atarionline.pl Atari
Login:
Hasło:
Zapamiętaj mnie
Translate to RSS RSS
Sizecoding cz.2 - Gwiazda Śmierci z 2023-07-02 18:22 (23)
Środo-wisko książkowe #5 z 2023-06-28 06:23 (5)
Sizecoding cz.1 z 2023-06-25 16:25 (27)
Urodziny Atari Poland z 2023-06-24 01:16 (7)
Planeta Targ po raz trzeci z 2023-06-20 15:59 (2)
Wkrótce Decrunch we Wrocławiu z 2023-06-20 09:15 (2)
Niedzielne spotkania z 2023-06-17 21:06 (8)
KWAS #29 za nami z 2023-06-13 12:40 (10)
Starglider 2 na Atari ST/STE z 2023-06-12 23:31 (12)
Drugie "Środo-wisko książkowe" z 2023-06-06 13:49 (6)
Niedzielne spotkania z 2023-06-02 14:11 (1)
K.W.A.S. #29 w Katowicach z 2023-05-30 04:24 (14)
Nowy kontroler do A2600 z 2023-05-24 17:19 (15)
Środo-wisko książkowe cz.1 z 2023-05-22 09:06 (8)
Dzisiaj na zoomie - Mercenary cz.3, Stare książki cz.2 z 2023-05-21 17:17 (3)
Nowa gra "Twin Snakes Run" z 2023-05-18 15:41 (20)
Dziś "Środo-wisko książkowe" z 2023-05-17 15:04 (3)
Spotkania kosmicznych najemników z 2023-05-08 07:55 (12)
Ograliśmy gry z Grawitacji! z 2023-04-28 01:41 (15)
Najbliższe spotkania AOL z 2023-04-27 12:54 (2)
«« nowszestarsze »»

Pomocnik/Helper
Gry/Games

Katalog gier (konwencja TOSEC)

Opisy gier
"Old Towers" (Atari ST) opisał Misza (19)
Submarine Commander opisał Kaz (11)
Frogs opisał Xeen (0)
Choplifter! opisał Urborg (0)
Joust opisał Urborg (16)
Commando opisał Urborg (35)
Mario Bros opisał Urborg (13)
Xenophobe opisał Urborg (36)
Robbo Forever opisał tbxx (16)
Kolony 2106 opisał tbxx (2)
Archon II: Adept opisał Urborg/TDC (9)
Spitfire Ace/Hellcat Ace opisał Farscape (8)
Wyspa opisał Kaz (9)
Archon opisał Urborg/TDC (16)
The Last Starfighter opisał TDC (30)
Dwie Wieże opisał Muffy (19)
Basil The Great Mouse Detective opisał Charlie Cherry (125)
Inny Świat opisał Charlie Cherry (17)
Inspektor opisał Charlie Cherry (19)
Grand Prix Simulator opisał Charlie Cherry (16)
«« nowszestarsze »»

Katalog gier (konwencja Kaz)
Aktualizacja: 2024-03-16
Liczba katalogów: 8377, liczba plików: 36679
Zmian katalogów: 0, zmian plików: 0

0-9 A B C D
E F G H I
J K L M N
O P Q R S
T U V W X
Y Z inne
zipCałość 2817 MB


Wewnętrzne/Internals



   Nowinki tworzone dzięki CuteNews
Premiera "Amaurote+"
Jakub Husak napisał:

Amaurote to była jedna z gier, które śniły mi się po nocach. Uważałem ją za majstersztyk programistyczno-graficzny. Jednak w wyniku zbytniego spowolnienia, w przypadku dużej ilości owadów goniących Arachnusa, zniechęciłem się do niej zbyt (być może) szybko. Czas minął, rany dzieciństwa się zabliźniły, wspomnienia przyszarzały. Odżyły dopiero w wyniku dyskusji i tezy at0mica, że na Atari nie da się przyspieszyć tej gry!

Ta. No jasne!
Nie da się!
No ale no jak to?
Ja nie zrobię?


Wziąłem w dłonie stare, dobre "dis6502" i zacząłem analizować grę. Od razu rzucił mi się w oczy ogrom kodu, jaki w tej grze jest upchnięty. W trakcie analiz okazało się, że autorom szybciej było kod skopiować, niż napisać go w sposób uniwersalny. Dało to przyczynek do Wielkiego Skracania Kodu.



Kuriozum to procedury czyszczenia ekranu i swapowania (przepisywania) offscreenu na ekran główny. Zajmowały kilka kilobajtów i były to serie lda adr,x, sta adr2,x. I tak 32 razy w pętli, i tak 8 razy, aby przypadkiem nie spowolnił tego, chociaż troszkę, niepotrzebny skok. Te zoptymalizowane, długie kawałki kodu wykonywane były:
  • podczas chodzenia Arachnusa na ekranie wyboru miasta,
  • podczas animacji wzorków podczas czołówki oraz game over,
  • na początku gry oraz po wejściu do radio menu.

Powiem tyle: zastąpienie ich normalnymi pętlami nie spowolniło ani na jotę wizualnie gry, a uzyskałem tym ruchem kilka kB wolnego. W wyniku tych i jeszcze innych skracań udało mi się zmniejszyć kod i dane o około 8 kB, które następnie wypełniłem nowym kodem i nowymi danymi.

Zostało wolne jakieś 300 bajtów. Pamięć na początku (poniżej $1000) jest wykorzystywana na bufory sprajtów (a dokładnie tego, co pod nimi), a na końcu na mapę miasta (4 kB pod $C000). Gra w ogóle przewiduje mnóstwo miejsca na bufory. Około 2 kB na początku pamięci na sprajty, a właściwie ich tło, 4 kB na miasto, 4 kB na offscreen, 6 kb na pamięć ekranu. Pamięć ekranu i offscreen są umiejętnie wykorzystane i efektownie przepisywane (efekt mozaiki). Ten efekt jednak na Atari jest znacznie wolniejszy niż na ZX Spectrum, z którego gra pierwotnie pochodzi. Mimo chęci nie za bardzo udało mi się przyspieszyć tej części, ale udało mi się ją skrócić o jakiś kilobajt. Na moje szczęście nie jest ona dla gry kluczowa.



W wyniku wprowadzenia poniższych poprawek gra przyspieszyła od 50% (gdy sam Arachnus chodzi po ekranie) do ponad dwukrotnie albo i lepiej - w przypadku nawału pszczółek. Teraz, gdy jest ich 5-6 na ekranie, spokojnie można grać, poprzednio gra stawała. Z ciekawostek należy jeszcze wspomnieć, że gra zajmuje całą dostępną pamięć i wyłącza system operacyjny.

Rzeczy, które zostały zmienione (wielkie i małe):

  • zmiana organizacji offscreenu na 32 bajty/linię z 28 bajtów/linię (to było chore: co prawda kilobajt zaoszczędzony, ale prędkość gry sporo niższa). Próbowałem też zamiany na tryb tekstowy. To nawet działało i to znacznie szybciej. Jednak przerosło mnie rysowanie Arachnusa i innych sprajtów z pionową rozdzielczością 1 linii w trybie tekstowym. Ponieważ nie znałem dobrze kodu, mógłbym się nieźle wpuścić w ślepą uliczkę, więc wykonałem nawrót. Analizując procki przepisywania sprajtów na ekran stwierdziłem, że działałyby szybciej, jeśli offscreen będzie miał 32 bajty szerokości. Aby tak się stało, trzeba było przeorganizować (zmienić adres) ekranu, offscreenu i bufora na deskę rozdzielczą, czyli zmienione położenie pamięci ekranu, offscreenu i tablicy rozdzielczej oraz związane z tym optymalizacje rysowania sprajtów i transfery danych offscreen - screen;
  • zmieniony kod generowania napisów - teraz mają położenie co do 0.5 znaku (jednego bajta) w poziomie i można je opuścić o 1-7 linii w dół, znacznie profesjonalniej to wygląda. Na to wpadłem analizując kod, że łatwo jest to wprowadzić, a te napisy niewycentrowane strasznie mnie denerwowały;
  • dodanych kilka znaków, :+-';
    zoptymalizowana procedura rysowania sześciokątnej ramki, zarówno pod względem szybkości jak i zajętości pamięci. Jest to podzielone na dwa etapy: nie rysuj nic, gdzie nie trzeba; kopiuj, gdzie trzeba, a w pozostałych przypadkach standard lda and ora sta. Działa 1/3 czasu, a zajmowała 1/3 czasu jednego obrotu pętli animacji;
  • dodane pionowe (no, zygzakowate) krawędzie 1-punktowe, oddzielające pole gry od ramki - to spowodowane było niekonsekwencją - na ZX tak jest, a na Atari nie było...;
  • wyrzucony cały kod odwracania sprajtów (wszystkie pszczółki i Arachnus były odbijane symetrycznie w locie)- teraz siedzą odwrócone w pamięci (przegięcie, gdy odwracało się kulkę :)).




Po tych optymalizacjach niestety sporo wrosły wymagania pamięciowe. Niemniej optymalizacje w kodzie zwolniły trochę miejsca oraz umożliwiły:

  • wprowadzenie klatek animacji pszczółek latających, których wbrew pozorom wcześniej nie było! - na prośbę Kaza;
  • zoptymalizowane rozmieszczenie sprajtów w pamięci (uzyskany 1 kB miejsca). To było ciekawe. Większość sprajtów nie zajmuje całej wysokości. W związku z tym zorganizowałem sprajty tak, że się "nakładają" na siebie - jeśli mają wspólne marginesy na górze i na dole - to te linijki są wycięte...;
  • zoptymalizowana tablica rozdzielcza, widać to w detalu "uszkodzenie Arachnusa %", oraz w długości kodu powstałego przy pomocy copy-paste, który został wyrzucony: kod 0.5 kb krótszy;
  • zoptymalizowane na długość (czy krótkość) operacje przepisywania ekranu. Znowu przy zmianie organizacji ofscreenu na 32 bajty odpadło jedno dwubajtowe dodawanie na każdą linijkę ekranu;
  • usunięty bug: pierwsza linia ekranu nie jest uaktualniana grafiką (jest jednolinijkową kratką od góry). To mi spać nie dawało, od kiedy to zauważyłem;
  • usunięty bug: ostatnia kolumna ekranu nie jest uaktualniana w animacji. Tego sporo czasu szukałem - ale znalazło się!
  • usunięty bug/ficzer, gdy muchy mrygają, gdy stoją. Kaz sugerował, że tak może też jest w porządku, bo je lepiej widać, ale teraz mogą się przyczaić :). W każdym razie na ZX nie mrugają i u nas już też nie;
  • gdzieś po drodze wkradł się bug: miasta były nieco inne - różniły się drobiazgami :) Tutaj wprzągłem TRACE do roboty i odkryłem, że przyczyną było NIECZYSZCZENIE PAMIĘCI po moich tymczasowych operacjach.
  • wyzwaniem też było dokładanie nowych faz animacji. Niby wszystko w listach, tablicach, a Arachnus po poprawkach rzucał płytami chodnikowymi :D
    Okazało się, że nie wszystko można wyedytować tablicami, część jest w ifach w głównej procce rysowania sprajta.
  • niespodzianka: Arachnus na naprawę, teleport oraz na początku rozgrywki jest opuszczany na pole gry, a nie pojawia się na dole od razu jak to było dotychczas;
  • zoptymalizowane strzałki kompasu - teraz ich jasność jest proporcjonalna do odległości (w znacznym przybliżeniu) oraz są znacznie przyspieszone i lżejsze pamięciowo. Aby wszystko było tak, jak sobie wymyśliłem, musiałem je opuścić o linię w dół, wtedy wystarczy skopiować 22 bajty na strzałkę (czyli 44 razem). A przedtem było hoho: lda and ora sta!
  • rozszerzone napisy początkowe o creditsy + dodany tytuł, którego w oryginale nie ma :P
  • podkolorowane sprajtami wskaźniki bomb i supabomb, a także strzałki;
  • zlikwidowany bug przeskakiwania toru Arachnusa na "o połowę pola". Okazało się, że ten błąd był znany piszącym kod, bo w jednym miejscu go poprawili, ale w pozostałych nie. W związku z tym poprawiam współrzędne Arachnusa i obiektów co przejście przez pełne pole.
  • and last but not least - super intro z grafiką Kaza, stylizowane na stary telewizor. Długo miałem zagwozdkę, co zrobić w ramach intra. Pierwotnie miała być umieszczona grafika Kaza 32 bajty szerokości. Potem wpadłem na efekt "interlace" (jak ze starego TV). Jednak Kazowi się to nie podobało (wcale mu się nie dziwię), bo wygląd rysunku bardzo ucierpiał, szczegóły hi-resu były ledwo widoczne. Potem pomyślałem sobie - przecież te telewizory często zrywały synchronizację, a na A8 takie coś jest trywialne. Napisałem prockę zrywania synchronizacji, ALE nie zmieściła się w jednej linii o kilka cykli. A musi być wywołana w każdej linii ekranu... No to jest w dwóch. Za to działa 50 Hz. Ale obrazek 32 bajty szerokości - dobry na grę - dziwnie wyglądał przy zrywaniu synchronizacji. W związku z tym poprosiłem Kaza o szerszy obrazek. Marudził :), że szerokość jest dopasowana do pola gry, ale dorysował. Ja go jeszcze poszerzyłem (do pełnych 48 bajtów, a właściwie wraz z impulsem synchronizacji poziomej do 64 bajtów). Tak więc obrazek zajmuje 16 kB (256 linii x 64 bajty). Potem jeszcze dopisałem tak zwany scenariusz, włączenie TV oraz wyłączenie - i efekt jest chyba całkiem fajny.
    A na pewno oryginalny :);
  • a! - i jeszcze planowałem samplowane dźwięki, a są syntetyczne :), to znaczy generowane w locie sterowaniem bitu 4 w AUDC.
  • na koniec spakowałem wszystko exomizerem. Intro rozpakowuje się 2 sekundy, a gra po intrze 4 sekundy.


Plik "Amautore+" można sobie ściągnąć tutaj. Owocnego debugowania!



Kaz napisał:

Ode mnie tylko kilka słów komentarza: obrazek tytułowy to przetworzona grafika z gry na ZX Spectrum, w klimatach czarno-białych, moim zdaniem bardziej pasujących do gry. Prace nad wersją plus można było śledzić w tym wątku i tym na forum. Jak ktos nie wie, jak grać, tutaj jest mój opis wersji oryginalnej na Atari. Wersja Kuby dla gracza różni się tym, że:
  • Arachnus i pszczoły żwawiej się ruszają,
  • strzałki pokazują nam przybliżoną odległość do wybranego celu,
  • mamy podświetlane wskaźniki bomb, co ułatwia orientację,
  • nie ma błędu chodzenia po połówkach, co czasami bardzo utrudniało poruszanie się.


Dodam jeszcze, że czas premiery jest podwójnie nieprzypadkowy. Po pierwsze wszyscy będą mogli pobawić się przyspieszonym Arachnusem w czasie Świąt, a do tego jest to niespodzianka urodzinowa - dzisiaj urodziny Kuby Husaka! Sto lat, sto lat... :)

2012-04-06 20:39 by Jakub Husak
komentarzy: 0
nickname
e-mail / website (opcjonalnie)
Aktualne tematy
Atari 400 mini (1)
ostatni: 28-03-2024 12:53, bandolier
Time Wizard - gra na ABBUC Softwa... (196)
ostatni: 28-03-2024 12:23, xbx
TSFX Turbo Blizzard (55)
ostatni: 28-03-2024 11:08, baktra
RMT hacking (171)
ostatni: 26-03-2024 20:59, emkay
Awaria SIO2SD? (22)
ostatni: 26-03-2024 19:47, pustak
Ciekawostki (5543)
ostatni: 25-03-2024 22:13, bruno_j
Niedokładność Fujinet (47)
ostatni: 25-03-2024 17:59, Alex
Rick Dangerous (322)
ostatni: 25-03-2024 17:35, tebe
Murmulator i A800 ;) (5)
ostatni: 25-03-2024 17:12, zaxon
Turbo ROM Plus - problem z wczyty... (2)
ostatni: 25-03-2024 11:36, lexx
SF 314 przerobiony na XF 351 ;) (2)
ostatni: 25-03-2024 10:43, Peri Noid
Moje materiały wideo z grami na A... (192)
ostatni: 24-03-2024 15:53, nowy80
Nowe okładki gier - LAURA (270)
ostatni: 24-03-2024 00:38, Peri Noid
Jaki napęd 5.25 do XF551 (40)
ostatni: 23-03-2024 20:49, zaxon
ZIARENKO KURKI (26)
ostatni: 23-03-2024 18:40, gizmomagic

Kategorie Forum Atarum

Użytkowników: 2771
Ostatnio zarejestrowany: crawlergo@gmail.com
Postów ostatniej doby: 13

Spotkania i zloty / Meetings & Parties

Najbliższe imprezy
link do naszych spotkań online, zapraszamy do odwiedzenia kanału zoom również przez kod QR:

KWAS

Kalendarz AOL


Społeczność/Community


Rozmawiali
Wywiad z Mariuszem Jaroszem i Kaz (12)
Wywiad Dracona z Mr. Bacardim i Kaz (12)
Tomasz Dajczak i Kaz (21)
Lech Bąk i "Świat Młodych" i Kaz (26)
Michał "Mike" Jaskuła i Kaz (6)
F#READY i Dracon (22)
Daniel „Arctus” Kowalski i Dracon (25)
KATOD i TDC (15)
Mariusz Wojcieszek i "Adam" (17)
Romuald Bacza i Ramos (16)
Śledzenie Amentesa i Larek (9)
Leszek Łuciów i Charlie Cherry (17)
TO JUŻ ZA TOBĄ: rozmowa z Bobem Pape i cpt. Misumaru Tenchi (39)
Rob Jaeger i Emu (53)
Jacek "Tabu" Grad i Dracon (0)
Alexander "Koma" Schön i Kaz (0)
Maciej Ślifirczyk i Charlie Cherry (0)
Jarek "Odyniec1" Wyszyński i Kaz (0)
Marek Bojarski i Kaz (0)
Olgierd Niemyjski i Ramos (0)
«« nowszestarsze »»

Stragan
Nowe, pojemniejsze RAM-Carty oferuje Kaz (21)
"mouSTer" czyli myszka ST oferuje Kaz (30)
Atari USBJoy Adapter oferuje Jakub Husak (0)
Programy: Kolony 2106 oferuje Kaz (7)
Sprzęt: rozszerzenia oferuje Lotharek (25)
Gadżety: naklejki, pocztówki oferuje Sikor (11)
Sprzęt: cartridge RAM-CART oferuje Zenon (7)
Miejsce na drobne ogłoszenia kupna/sprzedaży oferuje Kaz (58)
Sprzęt: interfejs SIO2IDE oferuje Piguła (0)
Sprzęt: interfejs SIO2SD oferuje Piguła (34)

Użytki/Utils
Sprzęt/Hardware

Wynalazki
Atari i Bluetooth napisał Kaz (34)
SIO2PC-USB napisał Larek (45)
Nowe SIO2SD napisał Larek (0)
SIO2SD w CA12 napisał Urborg (12)
Ratowanie ATMEL-ów napisał Yoohaas (12)
Projektowanie cartów napisał Zenon (12)
Joystick do Atari napisał Larek (54)
Tygrys Turbo napisał Kaz (11)
Testowałem "Simple Stereo" napisał Zaxon (5)
Rozszerzenie 1MB napisał Asal (20)
Joystick trzyprzyciskowy napisał Sikor (18)
Moje MyIDE oraz SIO2PC na USB napisał Zaxon (16)
Jak wykonać płytkę drukowaną? napisał Zaxon (26)
Rozszerzenie 576kB napisał Asal (36)
Soczyste kolory napisał scalak (29)
XEGS Box napisał Zaxon (13)
Atari w różnych rolach napisał Różyk (9)
SIO2IDE w pudełku napisał Kaz (5)
Atari steruje tokarką napisał Kaz (15)
DarkMouse napisał Kaz (7)
«« nowszestarsze »»