atarionline.pl 5 dots czyli od zera do assemblera - 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:
         
        CommentAuthorbocianu
      • CommentTime1 Jun 2016 23:06 zmieniony
       
      Zaczęło się od maila xeena. Napisał do mnie tuż po publikacji Turbo Snaila na łamach AOL. Jego maila streściłbym do czterech słów: "Nie idź tą drogą" :) Chodziło oczywiście o programowanie w C65. Zaczął mnie namawiać abym pouczył się ASMa i podrzucił linki do kilku pozycji wartych uwagi. No to zakasałem rękawy i zacząłem się uczyć. Najpierw jakieś tęcze w dli, potem pmg i ogólnie poznawanie środowiska, niuansów sprzętu i madsa.

      W międzyczasie, mój kolega Sławek zapytał czy potrafiłbym napisać taką grę "w kreski" w którą ciupał na kartkach w kratkę całe dzieciństwo. Pokazał mi o co chodzi i pomysł mi się spodobał. Najpierw wykonałem sobie "proof of concept" w javascripcie, żeby sprawdzić, czy ogólnie pomysł ma potencjał. Napisanie tego w JS zajęło mi jakieś dwa dni, a następne dwa tygodnie spędziłem na biciu rekordów na prototypie :D Potencjał stwierdzono.

      Moja prototypowa wersja w JS nadal wisi pod adresem: ->link<-
      Przydała mi się jeszcze później jako edytor nowych plansz :)

      No i gdzieś w okolicy grudnia przyszedł moment, że postanowiłem zacząć to przenosić na atari. Zabawa była przednia, wszystko szło w miarę sprawnie, do momentu, w którym musiałem obliczyć ile możliwych ruchów pozostało na planszy, żeby wiedzieć kiedy wyświetlić GAME OVER. Funkcja, która w JS wykonywała się 2ms, na naszym leciwym atari wykonywała się około 96 ramek, czyli prawie 2 sekundy. A musiałem ją wywoływać po KAŻDYM ruchu. Dwu sekundowe opóźnienie co ruch było niedopuszczalne... No to zakasałem rękawy i zacząłem ciąć cykle.

      Pamiętam, że optymalizacja tej części gry zajęła mi kilka dni, ale ostatecznie zszedłem z 96 do 6-8 ramek (w zależności od stopnia wypełnienia planszy). Triki i sztuczki jakie tam poczyniłem zasługiwałyby na osobny wpis, ale pewnie dla większości koderów 6502 nie byłoby to żadne odkrycie :D Ja natomiast odkrywałem amerykę. Ale nie ukrywam, że byłem z siebie szalenie dumny.

      Po optymalizacji postanowiłem dorobić kilka różnych plansz startowych, aby urozmaicić rozgrywkę. Po dodaniu plansz, napisałem maila na AOL, że poszukuję testerów, aby "zbalansować" kolejność leveli. Zgłosili się marok7 i rj1307, którym jeszcze raz dziękuję, za nieoceniony wkład i pomoc. Marok7 dodatkowo podrzucił mi wiele ciekawych pomysłów, z których kilka wykorzystałem. Szczególnie ucieszyło mnie, że z dosyć sceptycznej oceny gry na początku ("nie lubię logicznych") po kilku dniach dostawałem niemal codziennie maile z coraz lepszymi wynikami i pomysłami na usprawnienia. Czyli wciąga! :)
      Xeen również dorzucił swoje uwagi na etapie produkcji i to dzięki niemu powstał tryb ARCADE, w którym odblokowujemy kolejne plansze i sumujemy punkty z poszczególnych poziomów w jeden arcade highscore.

      Potem zaczęła się kosmetyka, "uładnianie", ekran pomocy, kolorowe timery, bomby z płonącym lontem, szmery bajery i ostatecznie operacje IO. Bo postanowiłem zapisywać HIGH SCORE na dysku. Zaczęło się moje kolejne odkrywanie ameryki, bo nie miałem żadnego pojęcia o operacjach IO. Ale parę dni pracy, kilka nowych siwych włosów i opanowałem temat na tyle, że zapisuję na dysku (jak jest dysk), a jak na starcie gry go nie wykryję, to blokuję wszystkie przyszłe operacje IO. Do tego momentu cała produkcja trwała jakieś 40 dni. Potem zawiesiłem projekt na prawie 3 miesiące, bo trochę nie miałem czasu, a trochę zacząłem pisać coś innego.

      Na sam koniec zostawiłem sobie ostateczne balansowanie (kolejność plansz) i udźwiękowienie, za które zabrałem się dopiero w maju - na 2 tygodnie przed wapniakiem. Udźwiękowienie, jak się okazało jest chyba nawet łatwiejsze w asm niż w C65. Ostatnie szlify do SFX'ów robiłem jeszcze na samym party.
      W międzyczasie dorobiłem jeszcze kilka dodatkowych poziomów, które już nie weszły do "wapniakowej" (0.96) wersji gry, bo nie miałem czasu na dokładne ich zbalansowanie. Ale niewykluczone, że oficjalny release (1.0), który mam zamiar wypuścić niebawem będzie zawierał dodatkowe 8 plansz.

      Garść statystyk i ciekawostek:
      - najwięcej kodu produkowałem we wtorki, a najmniej w sobotę
      - najczęściej commitowałem kod między 3 a 4 w nocy (11 razy)
      - łączna długość kodu to ponad 4900 linii (prawie 120kB)
      - nie korzystałem z nielegali (bo nie umiem)
      - gra jest "Pin-Ready", od strzału poszła na pinowym atari

      Dla wszystkich zainteresowanych udostępniam kod źródłowy, można hejtować :)
      ->link<-


      A na koniec tego przydługiego wpisu jeszcze raz dziękuję wszystkim, którzy przyczynili się do powstania tej gry, a tym samym pomogli mi zmobilizować się do nauki assemblera. Gra może nie jest jakimś wybitnym dziełem, ale jestem dumny, że udało mi się ją skończyć i mam już rozgrzebane dwie następne ;) Tym samym chciałem zachęcić wszystkich niezdecydowanych, albo niepewnych - warto się uczyć assemblera, szczególnie gdy mamy tak wygodne narzędzia jak mads ;) Dzięki Tebe za świetną dokumentacje i przykłady, bez tego trwałoby to wszystko pewnie ze 3 razy dłużej.

      BTW. mniej więcej rok temu - też w czerwcu - przywitałem się z Wami pierwszy raz na tym forum, pisząc, że chcę pisać gry. Pewnie niewielu z Was wierzyło, że coś z tego będzie, ale życzyliście mi powodzenia i wytrwałości. Daliście mi sporo motywacji i wsparcia – dzięki!
      • 2: CommentAuthorAdam
      • CommentTime1 Jun 2016 23:06
       
      Gratuluję dopracowanych gier, życzę wytrwałości i ciągłego rozwijania się w kolejnych produkcjach! :)
      • 3: CommentAuthoruser removed
      • CommentTime1 Jun 2016 23:06 zmieniony
       
      Gra w kropki super :-) ale o co w niej chodzi :-)?
      • 4:
         
        CommentAuthorbocianu
      • CommentTime2 Jun 2016 00:06
       
      @kosa0 - Na zdobywaniu punktów :D Dostawiasz piątą kropkę, tak aby z innymi czterema tworzyła linię i za to masz punkt. I robisz to tak, aby za szybko nie zablokować sobie całej planszy. I tyle.
      • 5:
         
        CommentAuthorxeen
      • CommentTime2 Jun 2016 00:06
       
      Również gratuluję i cieszę się, że "zaczęło się" od mojego maila :)
      Nie mogę odżałować tylko tego, źe w trybie Arcade nie ma extension time aby jeszcze bardziej śrubować rekordy :) Ale wiadomo jak to jest z koncertami życzeń userów :)
      Ogólnie gierka relaksująca mocno - fajnie się pyka.
      • 6:
         
        CommentAuthortdc
      • CommentTime2 Jun 2016 04:06 zmieniony
       

      bocianu:

      jestem dumny, że udało mi się ją skończyć i mam już rozgrzebane dwie następne ;)

      Dopiero rok, a już zachorowałeś na wirusa twórcy gier??

      Pamiętaj że te dwie zamienią się w kolejne 4, a te cztery w 16 następnych...

      ...witaj w naszym gronie :D :P
      • 7: CommentAuthortebe
      • CommentTime2 Jun 2016 06:06
       
      gratuluję, nie taki straszny asm jak go malują ;)
    1.  
      Fajnie ze udostępniłeś źródła :-)
    2.  
      Znalazłem poważny błąd w linii 630 pliku 5dots.asm
      @           lda game_mode       ; if ARCADE MODE check if goar reached


      Winno być:
      @           lda game_mode       ; if ARCADE MODE check if goal reached


      Świetnie dopracowana gierka. Mam słabość do hiresu :) Gratuluję super roboty i życzę, aby zapału starczyło na jak najdłużej!

      Dzięki za źródełko :)
      • 10:
         
        CommentAuthorpirx
      • CommentTime2 Jun 2016 10:06
       
      sweet :)
      • 11:
         
        CommentAuthorbocianu
      • CommentTime2 Jun 2016 10:06
       
      Dzięki!
      Błąd poprawiony.

      Jak ktoś jeszcze będzie miał czas i ochotę zaglądnąć do tego kodu, to chętnie przyjmę na klatę wszystkie uwagi. Uczyłem się głównie sam, więc mogę mieć jakieś złe nawyki... zawsze coś się da poprawić :)
      • 12: CommentAuthorxxl
      • CommentTime2 Jun 2016 12:06
       
      szkoda ze ten kod nie jest w asm tylko w mads

      ;-)
      • 13: CommentAuthormarok
      • CommentTime2 Jun 2016 12:06
       
      @bocianu: Dziękuję za pamięć, choć jak Ci doskonale wiadomo, zrejterowałem po krótkim czasie swojego, mało w sumie wnoszącego do sprawy, uczestniczenia w testowaniu gry.
      Mając wgląd w rozwijany kod próbowałem wcześniej coś od siebie dodać, ale niestety nie zdołałem swojego pomysłu zrealizować i zniechęcony tym (oraz mając inne swoje zajęcia (poza atarowe) ) porzuciłem projekt bez uprzedzenia (za co należą się swoją drogą moje przeprosiny dla Ciebie, że w takim stylu się to stało).

      Co do gry, to jak się słusznie podkreśla, jest bardzo dopracowana (koncepcyjnie, stylistycznie) i na pewno grywalna. Produkt w pełni kompletny w mojej opinii.

      Za zaangażowanie i poświęcenie przy tworzeniu gry należą się osobne wyrazy uznania i słowa docenienia, co niniejszym czynię, korzystając ze sposoboności - "to było coś" Bocianu (i reszto ekipy). :)

      Pozdrówka.
      • 14:
         
        CommentAuthoranonymus
      • CommentTime2 Jun 2016 13:06
       
      Gratuluju bocianu
      • 15:
         
        CommentAuthorkris3d
      • CommentTime2 Jun 2016 13:06
       
      Dobrze żeś wytrwał zaczynając od TruboSnaila;) To jeszcze nie cały rok od Ślimaka:)
      • 16:
         
        CommentAuthorbocianu
      • CommentTime3 Jun 2016 12:06
       
      Dorzucam jeszcze na nudne zimowe wieczory filmik z przejścia trybu arcade (wszystkie 16 plansz) :)

      • 17: CommentAuthornosty
      • CommentTime3 Jun 2016 14:06
       
      Grałem w tę grę godzinami w podstawówce na kartce. Ale u nas zawsze zaczynało się rozgrywkę od kropek w kształcie "krzyża pogotowia" ;)

      Jako uczestnikowi compo trochę nie wypada mi komentować, ale co tam, w końcu to jak w rodzinie ;) Gra jest naprawdę ładnie dopracowana. Szczególnie spodobały mi się kolorowe wskaźniki słupkowe (choć lepiej pasują do plansz zielonych niż szarych). Bocianu, szczerze, to jedyne co mnie w tej grze odrzuca to muzyka.
      • 18:
         
        CommentAuthorbocianu
      • CommentTime3 Jun 2016 15:06
       
      Złamałeś mi serce tą muzyką ;)
      A tak się starałem...

      No nic, poćwiczę jeszcze.
      (Zawsze można ją wyłączyć klawiszem M)
      • 19: CommentAuthorwieczor
      • CommentTime3 Jun 2016 16:06
       
      Eee, tytułowa jest nawet całkiem. Jest jakiś motyw, popracuj tylko nad instrumentami - a na serio, to poprzeglądaj cudze, bo tworzenie fajnych instrumentów nie jest takie intuicyjne. Zwłaszcza popracuj nad perkusją, bo zanim nie zajrzałem w źródło to miałem zapytać czemu używałeś CMC (to przez niego wszyscy myślą że pokeyowa perkusja jest do chrzanu ;) :)

      Na stronie tytułowej też wrzucaj muzę na VBLANK bo przy operacjach się niepotrzebnie przycina - po prostu wywal z lini 378 a ten z 210 przenieś na początek - np do 134. I będzie grać.

      A muzyka ingame, hm... Jest oryginalna... Zapada w pamięć... Wywiera hm... niezatarte wrażenie... O :) Może w czasie gry nie powinna być taka monotonna i powtarzalna, bo w założeniu spędzamy przy niej długie minuty i przy takim stylu można faktycznie do głowy dostać :) Dobrą metodą po zrobieniu muzyki jest wrzucenie tego na telefon - jak masz pod Androidem, jest ASAP - i chodzenie z tym na uszach przez cały dzień. Jak do wieczora dotrwasz - to dobrze, w każdym razie będziesz wiedział co poprawić ;)
      • 20:
         
        CommentAuthorbocianu
      • CommentTime3 Jun 2016 17:06
       
      @wieczor - dzięki za konstruktywną krytykę :)

      Co do muzy na vblank, niestety na tytułowej jak dawałem w VBLANK, to rozjeżdżał mi się trochę obraz bo nie nadążał z animacją. Poziome kropki są na znakach, pionowe na misslach, do tego jeszcze scroll i brakowało cykli na odtwarzanie muzy. Ale nie wykluczam, że coś robię nie tak :D

      A co do muzy ingame, to się przyznam, że robiłem ją już na samym party, na szybko i na kolanie... Wyszło szydło z worka :) no i dlatego dodałem opcję wyłączenia.

      Z instrumentami faktycznie mam problem. niby rozumiem co robię, ale nie gada to tak jak bym chciał. Nie do końca kumam filtry jeszcze i łączenie kanałów. Ale poćwiczę.
      • 21:
         
        CommentAuthorshanti77
      • CommentTime3 Jun 2016 18:06
       
      Zamiast Vblank możesz skorzystać z Vcount i zacząć rysowac zaraz po zakończeniu rysowania ekranu przez Antic.
      • 22: CommentAuthorwieczor
      • CommentTime3 Jun 2016 18:06
       
      Scroll plus animacja kropek to naprawdę niedużo, na pewno możesz coś poprawić :) (nie przyglądałem się) i na vblanku wszystko powinno się zmieścić ;) Kwestia wprawy. A dlaczego nie uprościsz sobie i pionowych kropek też nie zrobisz na znakach?
      • 23:
         
        CommentAuthorbocianu
      • CommentTime3 Jun 2016 22:06
       
      @wieczor: bo gdyby były na znakach zmieniałyby kolor wraz z napisem "5dots", a chciałem żeby miały ten sam kolor na całej wysokości.

      Pewnie dało by sie to tam jakoś zoptymalizować, ale jak już pisałem, muzykę dokładałem w naprędce na sam koniec :D Będę na dniach robił wersje z 24 planszami, to postaram się to poprawić.
      • 24:
         
        CommentAuthorshanti77
      • CommentTime4 Jun 2016 11:06
       
      Powinieneś użyć gotowych tablic do wpisywania ksztaltu , w pętli powinno być najlepiej pojedyńcz lda i sta.
      • 25: CommentAuthorwieczor
      • CommentTime6 Jun 2016 16:06
       
      Jeśli jest na pociskach to sprawa jest jeszcze prostsza, bo kształ wszystkich pocisków kontroluje jeden bajt na każdy wiersz. Acha, moment, idą w przeciwnych kierunkach... :) No tak, ztablicowanie po 8 bajtów powinno załatwić sprawę.
      • 26:
         
        CommentAuthorkoala
      • CommentTime6 Jun 2016 20:06
       
      Fajnie sie czyta Twoją opowieść Bocian:) Oby takich więcej koderów ASM na A8:) [Troll mode]A może i w końcu TDC by się przerzucił na ASM i zaczął normalne gry robić?:D[/Troll mode]
      • 27:
         
        CommentAuthorjhusak
      • CommentTime6 Jun 2016 20:06
       
      Ta muzyka podczas gry wcale niejest taka zła, przypominają mi się muzyczki Kemala Ezcana.
      • 28:
         
        CommentAuthorbocianu
      • CommentTime6 Jun 2016 21:06
       
      @wieczor: pewnie da się to zrobić szybciej. szczególnie te poziome kropy, bo teraz rotuje je rorami i rolami, a pewnie jakbym zatablicował 8 znaków (jak radzi shanti77) i podmieniał byłoby szybciej. A pionowe chyba nie najgorzej robię, bo oba kierunki ogarniam w pojedynczym przebiegu pętli, tyle, że do przepisania jest prawie cała wysokość missla, więc trochę to potrwać musi.

      @koala: jak widać, opowieści mi wychodzą lepiej niż gry :D

      @jhusak: miło, że jednak nie jest tak najgorzej. kris też mnie pociesza, że jemu się podoba ;) obiecuję poćwiczyć pokeya.
      • 29:
         
        CommentAuthorTheFender
      • CommentTime6 Jun 2016 21:06
       
      Bocianu podziwiam zapał i umiejętności.
      Co do muzyki, najlepiej nie jest ale jest niebanalna i ma swój klimat. A to się liczy :)
      • 30:
         
        CommentAuthorshanti77
      • CommentTime6 Jun 2016 21:06
       
      Pętle generują najwięcej cykli, każdy rozkaz w pętli trzeba przemnożyć przez liczbę jej wywołania, czyli np. naszybszy rozkaz który trwa tylko 2 takty w pętli wywoływanej 200 razy zabierze aż 400 cykli, dlatego jak przepisujesz pociski to powinieneś wszystkie obliczenia wykonać przed pętlą, a w samej pętli powinno być tylko przepisywanie z tablicy.
      • 31:
         
        CommentAuthormaly_swd
      • CommentTime12 Oct 2016 10:10
       
      Ładne to:)
      Kiedy następna gra?
      • 32:
         
        CommentAuthorbocianu
      • CommentTime12 Oct 2016 17:10
       
      Się robi już. Ale na SV nie zdążę...
      • 33:
         
        CommentAuthorgolem14
      • CommentTime13 Oct 2016 18:10
       
      Che, che! To jest gra, którą sam napisałem na małe Atari jakieś 20 lat temu w Basicu! Klon gry kartkowej, który miał zautomatyzować liczenie narysowanych linii. Niestety w zawierusze dziejów przepadła... Parę lat temu próbowałem ją odtworzyć w Turbo Basicu ale z braku czasu... Zrobiłem tylko rysowanie interface'u i chyba ruch krzyżykiem. DO zrobienia zostało rysowanie grubych linii, i cała logika gry (sprawdzanie stanu punktów, zliczanie czy są 4 wolne i można dodać 5., liczenie narysowanych). Jakby kogoś interesowały moje pliki i źródła, mogę udostępnić. Ja już chyba nie podołam zadaniu.