atarionline.pl cc65 - jak napisać prostą grę. - 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: CommentAuthorasman
    • CommentTime30 Oct 2009
     
    Witam,

    Chciałbym napisać bardzo prostą grę na Atari 8bit. Moja wiedza na temat bebechów jest znikoma. Dla mnie najprościej będzie pisać w cc65 ( chociaż asm 6502 znam ).
    Od czego zacząć ? Czy są jakieś tutki ( tylko nie HelloWorld - to sobie daruje ) w cc65 do Atari 8bit ?

    Pozdrawiam
    • 2:
       
      CommentAuthorKaz
    • CommentTime30 Oct 2009
     
    Ja nie w kwestii tutkow, ale w kwestii watkow, ktore traktowaly o CC65, moze sie cos z tego przyda:

    ->link<-

    ->link<-

    ->link<-
    • 3: CommentAuthorasman
    • CommentTime30 Oct 2009
     
    dzięki. Najbardziej pomocna byłaby jakaś prosta gierka napisana w cc65 dla atari 8bit. Pokręcę się w tym temacie na googlach.
    • 4:
       
      CommentAuthorKaz
    • CommentTime30 Oct 2009 zmieniony
     
    Ilmenit pisze gre w CC65, ale chyba jej nie mozna nazwac prosta :)

    Na pewno kilka gier w CC65 powstalo, pytanie, czy sa dostepne zrodla. Proponuje rzucic okiem na Atarimania.com i przeczesac baze gier pod tym katem. Jak znajdziesz jakies napisane w C i bedzie, kto jest autorem to moge zawsze popytac u autorow, czy udostepnia zrodla.
    • 5: CommentAuthorasman
    • CommentTime30 Oct 2009
     
    znalazłem tylko jedną grę: Caverns of the Lost Miner jak wybrałem zaawansowane szukanie i programming language: compiled C.
    • 6:
       
      CommentAuthorKaz
    • CommentTime30 Oct 2009
     
    O tej grze pisalem tutaj w 2007 roku:

    ->link<-

    Tam tez znajdziesz link do informacji od autora, zrodla tez powinny byc o ile mnie pamiec nie myli.
    • 7: CommentAuthorilmenit
    • CommentTime30 Oct 2009
     
    Załączam projekt prostej gry, którą możesz użyć jako template. Projekt jest dla Visual Studio 2005 i cc65 V2.12.0
    Musisz mieć ustawione ścieżki do binarek CC65.
    Gierka pisana do "unity" Sikora.
    • 8:
       
      CommentAuthorjhusak
    • CommentTime22 Aug 2010 zmieniony
     
    Poniższa "komenda" pozwala na przetworzenie pliku atari.inc na postać zjadliwą dla C. Zamieszczam tutaj, bo tu ma się poprawnie wstawić
    sed <asminc/atari.inc 's%^;%//% ; s%;\(.*\)$%% ; s%\(^[A-Za-z][A-Za-z_0-9]*\)\(.*\)$%#ifndef \1\%#define \1\2\%#endif%; s%=%%; s%\ \$%\ 0x%' | tr "%" "\n" >include/atari_defs.h

    Potem trzeba plik atari_defs.h skopiować do katalogu include widzianego przez cc65.
    Wkurzające jest to każdowe deklarowanie systemowych lokacji Atari; teraz #include <atari_defs.h> i po kłopocie.

    Dla leniwych (i tych co nie mają systemu z ixem w nazwie) załącznik.
    • 9:
       
      CommentAuthorKaz
    • CommentTime22 Aug 2010
     
    [ code ] [ /code ] pozwala wstawić listing dowolnego programu. Program wyświetlony w ramce, z użyciem odpowiedniej czcionki jest oczywiście czytelniejszy niż gdyby był wstawiony jako zwykły tekst. Nie ma podkolorowania słów kluczowych.

    [ code basic ] [ /code ] również przeznaczone do wstawiania listingów, ale tym razem dla programów w Atari Basic i Turbo Basic XL. Wszystkie słowa kluczowe obu tych języków oraz użyte cyfry są wyróżniane kolorem, co ogromnie zwiększa czytelność listingu.

    [ code php ] [ /code ] podobnie jak powyższe pary znaczników, do wstawiania listingów, ale w językach „pecetowskich“. Kolorami wyróżnione są poszczególne elementy listingu.
    • 10:
       
      CommentAuthorjhusak
    • CommentTime22 Aug 2010 zmieniony
     
    niestety, znacznik [ code ] dodaje backslash przed apostrofem, więc mój kod wstawia się błędnie :(
    Proszę:
    '


    oraz bez [ code ]:
    '

    A zapisz jako ATASCII generuje 3 backslashe! Z niczego!

    gpc_magic_quotes?
    • 11: CommentAuthorw1k
    • CommentTime22 Aug 2010
     
    i cant compile..

    error: stdio.h missing or what.. but stdio.h exists.. lol
    • 12: CommentAuthorw1k
    • CommentTime22 Aug 2010
     
    ERROR: INCLUDE FILE STDIO.H NOT FOUND
    CALL TO UNDEFINED FUNCTION PUTS

    #include < stdio.h >

    int main(void)
    {
    for(;;)
    puts("Hello Atari!");
    return 0;
    }
    • 13:
       
      CommentAuthorjhusak
    • CommentTime22 Aug 2010
     
    @w1k, isn't it the solution for you?
    From cc65 FAQ:

    The compiler and the linker must know how to find the include files and libraries. A standard path is compiled into the binaries, but this path works only for Unix machines (provided that the include files and libraries are installed in this path, which is true if you're using one of the precompiled packages).

    When running the tools under Windows or DOS, you have to tell them where the support files are installed. This is done by setting one or more of the environment variables:

    * CA65_INC (points to directory with assembler include files)
    * CC65_INC (points to directory with compiler include files)
    * LD65_CFG (points to directory with linker config files)
    * LD65_LIB (points to directory with libraries)
    * LD65_OBJ (points to directory with object files)
    *
    * CC65_HOME (points to the cc65 file tree. If you have this one, you usually won't need the others).

    As an DOS/Windows example, if you have installed cc65 in c:\cc65, you should use

    set CC65_HOME=c:\cc65


    Note: The Windows .exe installer package will set all necessary variables for you, so Windows users are encouraged to use it instead of the .ZIP file distribution.

    Unix people usually don't have a problem setting environment variables, so I don't explain the Unix syntax here:-)
    • 14: CommentAuthorilmenit
    • CommentTime24 Aug 2010 zmieniony
     
    Ok, przenoszę z wątku ATALANa kurs CC65 tutaj. Jednocześnie wrzuciłem drugą część kursu, czyli opis jak używać duszków i zestawów znaków. W kolejnym - najbardziej skomplikowanym - będzie jak odtwarzać muzykę z RMT. Potem może coś o obsłudze DLI i pozostanie złożenie wszystkiego w działającą grę.
    • 15:
       
      CommentAuthorinsert
    • CommentTime24 Aug 2010
     
    dzieki :)
    • 16:
       
      CommentAuthorxeen
    • CommentTime25 Aug 2010 zmieniony
     
    dzięki
    naprawdę fajna sprawa z tym kursem wychodzi.
    czekam z niecierpliwośćią na 3 część.
    • 17: CommentAuthorw1k
    • CommentTime25 Aug 2010
     
    i have cc65 in program files on disc C:..
    not working.. i download install package and install everything
    • 18: CommentAuthorilmenit
    • CommentTime25 Aug 2010 zmieniony
     
    What do you mean by "not working"?
    Try some different location like C:\CC65 - maybe it has problem with space in "Program Files".
    • 19: CommentAuthorw1k
    • CommentTime25 Aug 2010
     
    here is the screenshot..
    :(
    • 20: CommentAuthorilmenit
    • CommentTime25 Aug 2010 zmieniony
     
    If you install the CC65 from the installer it should add to your environment variables: CA65_INC, CC65_INC, CC65_LIB, LD65_CFG, LD65_LIB, LD65_OBJ.
    Use the "set" command to list all of them or "echo %CC65_INC%" to show a single one, which should give you "c:\cc65\include".
    Run the installer again and use the checkbox to set the variables. Restart your computer. If it still does not work, set them manually:
    ->link<-
    or
    SET PATH=%PATH%;C:\CC65\BIN
    SET CC65_INC=C:\CC65\INCLUDE
    SET CC65_LIB=C:\CC65\LIB
    SET LD65_CFG=C:\CC65\DOC
    • 21: CommentAuthorw1k
    • CommentTime25 Aug 2010
     
    now works fine, thanks!
    • 22: CommentAuthorilmenit
    • CommentTime26 Aug 2010 zmieniony
     
    Trzecia część kursu - używamy muzyki i dźwięków.
    • 23:
       
      CommentAuthorxeen
    • CommentTime26 Aug 2010
     
    po raz kolejny dzięki:)
    • 24: CommentAuthorilmenit
    • CommentTime1 Sep 2010 zmieniony
     
    Kilka znalezionych w sieci kodów dla CC65, które mogą być użyteczne jako przykłady - link oraz załączniki
    AtariWiki - C ->link<-
    • 25:
       
      CommentAuthorinsert
    • CommentTime1 Sep 2010
     
    dzieki za linki, przejrzalem zrodl, jest bibliotaka w asm do grafiki, pewnie sie przyda ;) ja co prawda raczkuje jeszcze w samym c ale powoli chcialbym sie zebrac do napisania czegos prostego, czy trudno jest podpiac player z cmc do programu w c?
    • 26:
       
      CommentAuthorKaz
    • CommentTime4 Sep 2010 zmieniony
     
    Dodam jeszcze, ze toczy sie dyskusja w komentarzach do pierwszej czesci kursu C, chociaz zapraszalem kolegow do wymiany zdan na forum, bo tutaj aktualny watek i nowe wpisy sa latwiej widoczne, a dodatkowo przejrzysciej podaje sie wszelkie listingi:

    ->link<-
    • 27: CommentAuthorilmenit
    • CommentTime9 Sep 2010 zmieniony
     
    Biblioteka TGI dla CC65
    ->link<-






    btw, znalazłem właśnie ciekawą właściwość forum - po dodaniu do linka do obrazka ".png" został wyświetlony w poście, a nie jako link :)
    • 28: CommentAuthorilmenit
    • CommentTime9 Sep 2010
     
    Gierka Viper z dźwiękami.
    • 29:
       
      CommentAuthorinsert
    • CommentTime10 Sep 2010
     
    dzieki! :) btw. z ta biblioteka tgi, da sie ja umiescic w zrodle programu zeby nie doczytywal jej z osobnego pliku?
    • 30:
       
      CommentAuthorKaz
    • CommentTime10 Sep 2010
     

    Ilmenit:

    btw, znalazłem właśnie ciekawą właściwość forum - po dodaniu do linka do obrazka ".png" został wyświetlony w poście, a nie jako link :)


    To dotyczy wszystkich popularnych formatow - takze jpg czy gif. Jezeli podasz link do samych plikow obrazkow to sie wyswietla jako obrazek, a nie link. Tak samo z podaniem linku bezposredniego do filmu na YT czy Vimeo - wyswietli sie jako filmik, a nie link.
    • 31: CommentAuthorilmenit
    • CommentTime10 Sep 2010 zmieniony
     
    @insert - Zmień plik na tablicę za pomocą bin2c.
    @Kaz - to wiem, ale zawsze umieszczałem obrazki na zewnętrznym serwerze. Teraz zobaczyłem, że da radę pokazywać obrazki dołączone do posta.
    Tak dołączone obrazki są dostępne jako:
    hxxp://atarionline.pl/forum/?PostBackAction=Download&AttachmentID=817
    Taki link wrzucony do posta wygląda tak:
    ->link<-

    Jeżeli jednak na końcu dopiszemy ".png":
    hxxp://atarionline.pl/forum/?PostBackAction=Download&AttachmentID=817.png

    To obrazek się ładnie wyświetla:
    • 32:
       
      CommentAuthorjhusak
    • CommentTime10 Sep 2010
     
    A to ciekawe. Jak to odkryłem z półtora miesiąca temu i napisałem o tym, mój post automagicznie zniknął po kilku godzinach...
    • 33:
       
      CommentAuthorKaz
    • CommentTime10 Sep 2010
     
    Ilmenit - a to co innego, to tez nie wiedzialem :D

    jhusak - ???? Posty nie znikaja tak sobie, pamietasz moze w jakim to watku? Sprawa wymaga wyjasnienia.
    • 34: CommentAuthorilmenit
    • CommentTime13 Sep 2010
     
    Gra w CC65 pisana w roku 2005. Ale to raczej przykład jak NIE pisać gry w CC65 :)
    Przerobiłem troszkę kody, aby kompilowały się współczesną wersją kompilatora.
    • 35: CommentAuthorFosfor
    • CommentTime6 Dec 2010 zmieniony
     
    Witam,
    To ja odgrzeję trochę ten temat, ponieważ próbuję swoich sił w C dla Atarki (asm to dla mnie trochę za niskopoziomowo, a C jest akurat).

    Opanowałem już z poziomu C pewne podstawowe zagadnienia związane z Atari, np. rysowanie grafiki, podmianę DL-sty, grafikę P/M. Chciałbym teraz popróbować swoich sił z przerwaniami. Oczywiście najbardziej napalony jestem na DLI (nawet kosztem pisania podprocedur obsługi w asemblerze).

    I tutaj prośba do osób bardziej zapoznanych z tematem: mógłby ktoś krok po kroku wyjaśnić jak podpiąć własną procedurę obsługi przerwania pod CC65? Jakie zmiany należy wprowadzić w pliku konfiguracyjnym? Najlepiej prosty przykład, nie musi być DLI, może być np. przerwanie zegarowe - przez analogię zrobię wtedy DLI. Idealnie byłoby gdyby powstałą kolejna część kursu...

    Z góry dziękuję za pomoc,
    Fosfor.
    • 36: CommentAuthorilmenit
    • CommentTime7 Dec 2010
     
    Do obsługi przerwań potrzebny jest już ASM. Ale wystarczy bardzo prosty kod - spójrz na źródła gry Calomin:
    ->link<-
    • 37: CommentAuthorFosfor
    • CommentTime13 Dec 2010 zmieniony
     
    Dzięki za szybką odpowiedź. Źródła Colomin okazały się bardzo pomocne. Napotkałem kolejne problemy i liczę, że pomożecie mi rozkminić tą zagwostkę.

    Otóż próbuję włączyć DLI dla każdej linii ekranu w trybie E (gr. 15) oraz wyświetlić grafikę PMG. Osobno działa mi to świetnie, ale razem już nie za bardzo. Wygląda to tak, że w linii, w której kończy się rysowanie sprite'a, wywala się procedura obsługi DLI. Oto ekrany:

    Ekran 1 - tylko PMG:


    Ekran 2 - tylko DLI


    Ekran 3 - PMG i DLI (ustawiony bit 7 dla linii ekranu, ale przerwanie DLI nie uaktywnione)


    Ekran 4 - PMG i DLI


    Na ekranach 3 i 4 są widoczne pewne "śmieci" pod grafiką PMG, ktoś zna powód dlaczego tak się dzieje?

    Załączam też kody dla lepszej analizy:
    ->link<-
    • 38: CommentAuthorFosfor
    • CommentTime13 Dec 2010 zmieniony
     
    Co ciekawe, jak DLI ustawione jest co drugą linię ( ->link<- ) to działa ładnie. Jak w każdej linii ( ->link<- ) to pojawiają się śmieci na ekranie.





    Kody wersji z przerwaniem DLI co 2-gą linię:
    ->link<-
    • 39: CommentAuthormarok
    • CommentTime13 Dec 2010
     
    Wtrące od siebie że wydaje mi się (w zasadzie to sprawdziłem to na emulatorze pod monitorem) że śmiecie biorą się stąd że dlista jest źle modyfikowana.
    Tzn. bajty $42,$00,$b0 są zamieniane na $c2,$80,$30 (dolna połówka ekranu wyświetla dane poczynając nie od adresu $b000 a od $3080).

    Chodzi mi w tym wpisie o jedną z kompilacji z poprzedniego postu.
    • 40: CommentAuthorFosfor
    • CommentTime13 Dec 2010 zmieniony
     
    To ciekawe, zaraz sprawdzę.

    No i rzeczywiście - czeski błąd w pętlach modyfikujących DL.
    Pierwsza pętla powinna modyfikować 94 bajty, a druga 97. Tymczasem było: 97 bajtów w pierwszej i 93 bajty w drugiej pętli. Coś zle sobie wyliczyłem te indeksy. Przy braku PMG akurat miałem szczęście itrafiałem w wyzerowany obszar pamięci i wyglądało wszystko ok, wraz z włączeniem PMG pojawiały się "śmieci".

    Dzięki marok :)



    Problem uważam za rozwiązany.
    Dla chętnych kody: ->link<-
    • 41: CommentAuthorilmenit
    • CommentTime21 Apr 2011 zmieniony
     
    Moja implementacja gry Reversi wraz ze źródłami w CC65 (najnowsza i na razie ostateczna wersja).



    Gra jest obsługiwana joystickiem i ma 3 poziomy trudności. Im poziom gry komputera wyższy, tym dłużej AI "myśli" nad ruchem. Na najwyższym poziomie gra już całkiem nieźle, ale nie testowałem jak ma się do najlepszych grających programów na Atari czyli QS Reversi i Odin (które brały udział kiedyś w turniejach ->link<- ). Mój program potrafi jednak wygrać większość partii z programem WZebra ->link<- ustawionym na 2 ruchy naprzód.

    Gra powstała głównie do GUI, które robi Flashjazzcat ->link<- ale upubliczniam, bo źródła mogą się komuś przydać...
    Dlaczego Reversi? Bo lubię grać w tę grę, bo zawsze chciałem ją zaimplementować i chciałem w praktyce sprawdzić alpha-beta pruning, co przyda się w innych projektach.
    • 42:
       
      CommentAuthorjhusak
    • CommentTime21 Apr 2011
     
    @ilmenit, attract mode :)

    A poza tym na trzecim poziomie komp tak długo myśli, że trzeba grać na full speed (a nie limited), ale wtedy nie daje się precyzyjnie joyem ustawić kursora. Możesz dać jeszcze opcję "cursor - fast/slow? Slow byłby z 7-10 razy wolniejszy :)
    • 43:
       
      CommentAuthorxeen
    • CommentTime22 Apr 2011
     
    Dzięki. Zaiste LB może się przydać w innych gierkach, bo - jeżeli dobrze rozumiem - można wykorzystać szkielet rozwiązania do innych gier z "AI" i jest na to Twoje przyzwolenie, po odpowiedniej wzmiance oczywiśćie:). Jest to zresztą ciekawy temat na artykuł, mimo że opis LB pruning można znaleźć po paru sekundach w sieci - tak samo genetyczne, to warto wiedzieć co w Twoim kodzie za to odpowiada i jak tego by użyć - tak na przykładzie. Oczywiście nie piję do Ciebie, tylko np. do siebie - żeby to tak przeanalizować i opisać dla potomnych:) Ale jakbyś nieco rozjaśnił to by była bajka. To są bardzo ciekawe klimaty. C zresztą nadaje się do tego idealnie, język funkcyjny i rekurencję robi się o tak.
    Dzięki Ilmenit, właśnie coś staram się skrobnąć w C na
    Atari i Twój przykłądowy kurs prowadzi mnie za rękę, heh
    • 44: CommentAuthorilmenit
    • CommentTime22 Apr 2011
     
    @jhusak - można by zmienić, że joy reaguje na wychylenia bez powtarzania ruchu, albo dodać obsługę klawiaturą... Z drugiej strony inne silne programy na Atari też myślą tyle, że można spokojnie iść na spacer ;) W reversi jest dużo pozycji do przeanalizowania a najwięcej czasu zajmuje sprawdzenie jak będzie wyglądała plansza po potencjalnym ruchu (to nie szachy, gdzie zmieniają się po ruchu 2 pola).

    @xeen - opisów algorytmu alpha-beta jest na sieci rzeczywiście masa, wraz z przykładami. Mnie podoba się ten ->link<- opis.
    Algorytm genetyczny był wykorzystany do ustalenia wag oceny przez AI. W skrócie - w zależności od tury gry czasem bardziej opłaca się walczyć o rogi, czasem bardziej o mobilność, czasem bardziej o liczbę własnych pionków na planszy itd. To jak bardzo jest coś opłacalne można było wziąć z sufitu albo dobrać eksperymentalnie. Algorytm genetyczny właśnie służył eksperymentalnemu doborowi. Było tworzonych 100 komputerowych graczy o różnych wagach dla AI, którzy grali między sobą, następnie 10 najlepszych było powielanych na pozostałe 90 pozycji, krzyżowanych ze sobą i losowo modyfikowanych. Po rozegraniu kilku milionów takich gier pozostali gracze grający całkiem nieźle, bez problemu pokonujący gracza, któremu wagi dobrałem "ręcznie".
    Dla gry typu His Dark Majesty też miałoby to zastosowanie - tam ręcznie dobrałem parametry oceny np. zysk z zabicia maga a zysk z zabicia medyka, to jak bardzo opłaca się wycofać lub atakować itp.
    • 45: CommentAuthorstreak
    • CommentTime22 Dec 2011
     
    Panie i Panowie, jesli bedziecie kiedys chceli pisac programy tzw. "w drodze" - w pociągu, podczas nudnego zebrania w pracy czy chowajac się w ubikacji przed tesciową podczas "rodzinnego zjazdu", oglaszam ze przeportowalem dzis kompilator CC65 dla OpenPandory. Tak wiec mozna juz pisac programy / gry dla atari nawet 100m nad ziemią czy nurkując w oceanie.

    W zaloaczniku skompilowany testowy apek "hello world" [biniarka]. Byloby milo gdyby ktos z Was sprawdzil go czy dziala na prawdziwym atari

    ->link<-
    • 46:
       
      CommentAuthorKaz
    • CommentTime23 Dec 2011
     

    streak:

    gry dla atari nawet 100m nad ziemią czy nurkując w oceanie.


    A jakie urzadzenia to umozliwiaja?
    • 47: CommentAuthorstreak
    • CommentTime23 Dec 2011
     
    samolot / batyskaf :)
    • 48:
       
      CommentAuthorKaz
    • CommentTime23 Dec 2011
     
    batyskaf pozwala programowac Atari pod woda? myslalem, ze pozwala sie tylko zanurzyc :)
    • 49: CommentAuthorstreak
    • CommentTime23 Dec 2011 zmieniony
     
    "Tak wiec mozna juz pisac programy / gry dla atari nawet 100m nad ziemią czy nurkując w oceanie." -> To zdanie implikuje "gdzie". Zadales pytanie "A jakie urzadzenia to umozliwiaja?" zawierajac ww cytat. Zakladam ze urzadzenia/maszyny pozwalajace na pywanie w oceanie czy latanie.

    Oczywiscie urzadzenie ktore pozwala na "produkcje" gier dla atari to OpenPandora wraz z kompilatorem CC65

    Anyway.. zaraz ruszam do tutora Ilmenita.
    • 50: CommentAuthorilmenit
    • CommentTime13 Aug 2015 zmieniony
     
    W załączniku kod źródłowy gry "The Hunt" z Abbuc 2013, napisanej z użyciem CC65. Jest to zrzut katalogu tak, jak pracowałem nad grą, więc bez większych wyjaśnień czy opisów.