atarionline.pl DDD - gra tekstowa - 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:
         
        CommentAuthoradiblol
      • CommentTime15 Mar 2009 15:03
       
      Piszę sobie tekstówkę, do tej pory zamieszczałem informacje o przebiegu prac w wątku "Już połowa lutego, a gier nie ma", ale na prośbę Kaza zakładam nowy wątek.

      --- Historia: ---

      w trakcie tworzenia, działa tylko chodzenie :)


      kolejna wersja, działa chodzenie, branie, odkładanie i dodatkowe komendy


      najnowsza wersja, menu :). W przyszłości gracz będzie mógł wybrać czy chce menu, czy wpisywać polecenia. Jeszcze wiele komend nie działa w menu.

      --- Fabuła: ---
      Trzeba wrócić z planety (nazwy jeszcze nie wymyśliłem), która jest zamieszkała przez Ziemskich kolonistów, na Ziemię. Koloniści są do "normalnych" Ziemian wrogo nastawieni. Nie chcą, aby wieść o kolonii dostała się na Ziemię. Na planecie jest bardzo restrykcyjna polityka emigracji (wizy itp.) więc trzeba będzie kombinować. Ponadto trzeba zdobyć kopię twardego dysku z ich komputerów rządowych, aby naukowcy z Ziemii mogli rozszyfrować tajemnicę, jak koloniści dostali się na tę planetę bez wiedzy Ziemian. Gra zaczyna się w więzieniu, gdzie gracza zamykają koloniści, w obawie przed szpiegostwem i sabotażem.

      --- Szczegóły techniczne: ---
      Grę piszę w CC65. Ma działać na Atari 8-bit. Na razie testowałem tylko na emulatorze. Jak dotąd, plik ma 16,4 KB.

      --- Chcesz pomóc? ---
      Poszukuję doświadczonych programistów do pomocy z wykorzystaniem Display List do wyświetlania grafiki, i ewentualnie przerwań (DLI?) do muzyki.
      • 2:
         
        CommentAuthorKaz
      • CommentTime15 Mar 2009 23:03
       
      Przewidziana jest jakas grafika - ekrany gry, elementy ozdobne, ekran tytulowy, koncowy, etc?
      • 3: CommentAuthormarok
      • CommentTime16 Mar 2009 12:03 zmieniony
       
      @adiblol: rzuć może okiem na ten tekst

      ->link<-
      • 4:
         
        CommentAuthoradiblol
      • CommentTime16 Mar 2009 15:03
       
      marok: Na Atarikach jest lepiej wyjaśnione moim zdaniem ...

      Potrzebuje wiedzieć jak - korzystając z Display Lists - mieć możliwość używania komend printf, puts i gets (pod CC65). Wydaje mi się że wystarczy zmienić komórki pamięci, gdzie zapisany jest adres trybu graficznego i liczba linii na takie same, jakie robię przy pomocy Display List.

      A zresztą, pochwalę się modułem do Display Lists: ->link<-

      Co do muzyki to może użyć SYSVBL...? Tylko musiałbym rozgryźć wektory przerwań i ich zastępowanie (zaraz zerknę na Atariki, mam nadzieję że to tam jest).
      • 5:
         
        CommentAuthoradiblol
      • CommentTime16 Mar 2009 17:03 zmieniony
       
      Z przerwaniami pod CC65 jest sprawa bardziej skomplikowana niż myślałem.

      "(...) so I do usually suggest to think about writing the interrupt handler completely in assembler (provided it is rather short). If you don't want to do this for some reason or another, you may want to have a look at the break handler functions in libsrc/dbg/dbgsupp.s. They do contain all code that would also be needed for an interrupt handler (saving registers and zero page locations, calling a C function)."
      (źródło: oficjalna strona CC65)

      Nie wiem, jak mogę kod z funkcji DbgBreak wykorzystać do wywołania przerwania... czy ktoś, kto zna asembler mógłby pomóc?
      Daję linka do pliku dbgsupp.s (dla tych którym nie chce się ściągać źródeł): ->link<-



      Wyobrażam to sobie tak: napisana w asmie bardzo prosta funkcja obsługi przerwania:

      ldx #(młodszy_bajt_adresu_mojej_funkcji_napisanej_w_C)
      ldy #(starszy_bajt_adresu_mojej_funkcji_napisanej_w_C)
      jsr (uniwersalna_procedura_która_wywoła_moją_funkcję_napisaną_w_C)
      jsr (oryginalna_procedura_obsługi_przerwania)
      rts

      A tą "uniwersalną_procedurą_która_wywoła_moją_funkcję_napisaną_w_C" będzie procedura bazująca na wspomnianym fragmencie dbgsupp.c.

      Czy ktoś ma pomysł na realizację tego czegoś?
      • 6:
         
        CommentAuthorKaz
      • CommentTime16 Mar 2009 17:03
       
      Ta gra byla napisana w C (ze wstawkami w asemblerze), chociaz nie wiem w ktorej implementacji:
      ->link<-
      Tam masz wykorzystana modyfikacje DLI oraz uzycie muzyki RMT.
      • 7:
         
        CommentAuthoradiblol
      • CommentTime16 Mar 2009 18:03
       
      Niestety... jeśli dobrze patrzę to DLI w tej grze jest robione wyłącznie za pomocą asemblera :(
      • 8: CommentAuthormarok
      • CommentTime16 Mar 2009 21:03
       
      adiblol: byłeś tu ?
      ->link<-

      to apropo wywoływania własnej procedury przerwania

      zwykło się robić tak, że po podmianie adresu przerwania na własny w odpowiednim wektorze, następuje na końcu tej własnej procedury obsługującej przerwanie skok pod adres jaki znajdował się wcześniej w tym wektorze (taki można powiedzieć append od przodu)

      "Wydaje mi się że wystarczy zmienić komórki pamięci, gdzie zapisany jest adres trybu graficznego i liczba linii na takie same, jakie robię przy pomocy Display List."
      Zupełnie nie wiem jak to wygląda w CC65 (i byłoby raczej mi trudno to zmienić z racji braku jakiegokolwiek doświadczenia w programowaniu w języku C w ogóle). Ale spodziewałbym się raczej, że zamiast szukać komórek od adresu trybu graficznego powinieneś skupić się na adresie pamięci ekranu (co może znaczy z resztą to samo) i ten należy wg mnie tylko skorelować z poszczególnymi procedurami. Moim zdaniem również nie należy się spodziewać znalezienia komórek od adresów do poszczególnych linii ekranu czy w ogóle jakiś odzwierciedleń dlist w komórkach pamięci. To powinno być zupełnie bez znaczenia dla procedur o które pytasz. Można tylko oczekiwać komórki (a prędzej słowa) gdzie zawarta jest informacja o buforze przeznaczonym dla pamięci ekranu lub adres pierwszego bajtu poza tym buforem (warto tą wartość dostosować do zaprojektowanej dlist).

      W sumie jednak nie czuję się kompetenty odpowiadać na postawione problemy (nie do końca mogę nawet stwierdzić czy je właściwie odczytuję). Mogę więc pisać od rzeczy i zaciemniać sprawę miast czynić odwrotnie. Stąd sugestia by nie traktować tych moich podpowiedzi jako na pewno właściwych wskazań.

      Szkoda że bardziej kompetentne osoby (których pewnie zbyt wiele nie ma, swoją drogą) nie odpowiedziały na stawiane pytania.
      • 9:
         
        CommentAuthoradiblol
      • CommentTime16 Mar 2009 23:03
       
      wygląda na to, że będę musiał się asemblera nauczyć...
      • 10:
         
        CommentAuthoradiblol
      • CommentTime17 Mar 2009 20:03
       
      Udało mi się coś wykombinować z Display Listami!


      Jutro wezmę się za podkolorowanie tego w asemblerze za pomocą DLI (LDA, LDX, LDY, STA, STX, STY to umiem, poza tym tylko JMP, JSR i RTS. Reszty będę musiał się douczyć).

      I mam pytanie: Co to jest "przesuw pionowy" i "przesuw poziomy"? Są to bity instrukcji DL. Do czego to służy?
      • 11: CommentAuthormarok
      • CommentTime17 Mar 2009 21:03
       
      Z tego co się orientuję (bo w praktyce nigdy z tego nie korzystałem) stosuje się je przy pomocy specjalnych rejestrów antica, które określają stosowne przesunięcie w pikselach, do płynnego przesuwu zawartości ekranu (np. tekstu).

      Przesunięcie w pikselach obejmuje zawartość tylko tych linii, które mają ustawione właśnie te bity w odpowiadających nim instrukcjach dlist.

      tutaj apropo znajdziesz dokładniejszy opis:
      ->link<-
      • 12:
         
        CommentAuthorKaz
      • CommentTime17 Mar 2009 22:03
       
      Marok - a Ty nie zamierzasz czasem sam sprobowac sil z jakas gra? :)
      • 13:
         
        CommentAuthoradiblol
      • CommentTime18 Mar 2009 19:03 zmieniony
       
      Próbuję zrobić zmianę kolorów pod DLI, nie działa :( .
      Zmienia tylko na żółte, a na niebieskie nie raczy.

      ->link<-

      (wiem że te zmienne sav_a, sav_x, sav_y to prowizorka, ale nie sądzą, żeby w czasie wykonywania procedury obsługi DLI zaszło to samo pzzerwanie)

      dodane:
      Już działa, pisałem do cieni zamiast do rejestrów (nawet nie wiedziałem, że te adresy to cienie).
      • 14: CommentAuthortebe
      • CommentTime19 Mar 2009 01:03
       
      zapisujesz wartości kolorów do cieni rejestrów ($2c5, $2c6) zamiast do rejestrów ($d016, $d017), VBL systemowe przepisuje cienie do rejestrów raz na ramkę, tak że psuje Ci działanie twojego DLI

      pozatym nie używaj rozkazów JSR na przerwaniu DLI, to strata 12 cykli CPU, w tym czasie możesz dokonać dwóch zmian rejestrów koloru lda #$.. sta $d0..

      dodatkowo powinieneś zatrzymać CPU do końca linii poprzez rozkaz STA WSYNC (sta $d40a) przed wpisaniem wartości do rejestrów koloru, jeśli tego nie zrobisz zmiany koloru mogą być nie dokładne

      lda #$..
      ldx #$..
      ldy #$..
      sta wsync
      sta $d016
      stx $d017
      sty $d018

      DLI powinno w jak najszybszy sposób dokonać zapisu do odpowiednich rejestrów, jeśli przesadzisz używając np. JSR zmiany kolorów trafią do linii poniżej, albo jeśli nie będziesz używał WSYNC-a to nieświadomie napiszesz program zmian rastra
      • 15:
         
        CommentAuthoradiblol
      • CommentTime21 Mar 2009 11:03
       
      Używam WSYNC-a ale i tak się zmieniają kolory nie tam gdzie trzeba :(

      • 16:
         
        CommentAuthoradiblol
      • CommentTime21 Mar 2009 17:03
       
      Co do duszków, to mimo to że w rejestrze PMBASE jest zapisana poprawna wartość, nie działa :(

      ->link<- - tu jest save z emulatora.
      • 17: CommentAuthormarok
      • CommentTime21 Mar 2009 20:03
       
      Być może ostatnio zapisana wartości w $d400 (DMACTL) nie zezwala na ich wyświetlanie (jak czytam z poniższego źródła trzeba zapalić bit nr.3, +$10).
      ->link<-
      • 18:
         
        CommentAuthoradiblol
      • CommentTime21 Mar 2009 20:03
       
      Właśnie są wyświetlane, tylko że niepoprawnie. Latają różne przypadkowe wzory, gdy w teorii powinna być linia pozioma na samej górze a reszta nic.
      • 19:
         
        CommentAuthoradiblol
      • CommentTime22 Mar 2009 10:03
       
      Aha. Co to są rejestry GRAFP0, GRAFP1 itp.? Bo na Atariki nie ma ich wyjaśnionych, a może to one o czymś decydują?
      • 20:
         
        CommentAuthorYosh
      • CommentTime22 Mar 2009 16:03
       
      Przejrzy mapę pamięci:
      ->link<-

      (powinna otworzyć się na komórce 53261 czyli GRAFP0)

      Raczej ich nie będziesz używał, służą do ręcznego zapychania grafiki duszków

      Jeżeli masz różne wzory to znaczy, że PMBASE wskazuje na jakieś bzdury.

      ->link<- (PMBASE)

      Your P/M graphics must always begin on a 1K boundary
      (PEEK(RAMTOP)-4 for double line resolution players) or 2K
      boundary (PEEK(RAMTOP)-5 for single line resolution), so the
      LSB is always zero.

      Czy twój adres PMBASE spełnia te warunki ?
      • 21:
         
        CommentAuthoradiblol
      • CommentTime22 Mar 2009 17:03
       
      Już naprawiłem. Była wyłączona DMA dla PM. marok miał rację.
      • 22:
         
        CommentAuthoradiblol
      • CommentTime22 Mar 2009 20:03
       
      Pobawiłem się duszkami i dzięki temu jest podświetlane menu :) i szybciej działa.


      Poza tym: co sądzicie o tym dźwiękowym intro?
      ->link<-
      • 23:
         
        CommentAuthorKaz
      • CommentTime22 Mar 2009 23:03
       
      Sadze, ze nie wiem czy dobry plik podpiales do linku, bo u mnie sciaga sie starsza wersja...
      • 24: CommentAuthormarok
      • CommentTime23 Mar 2009 00:03
       
      Nie tyle rację, co najwyżej intuicję. Zgadywałem.
      • 25:
         
        CommentAuthoradiblol
      • CommentTime23 Mar 2009 10:03
       
      Rzeczywiście, wrzuciłem starszą wersję, bo miałem pliki:
      Moje dokumenty\atari\ddd_main.xex
      (kopię, starą)
      oraz
      Moje dokumenty\atari\ddd\ddd_main.xex
      (najnowszą wersję)

      Tu jest link do tej nowszej: ->link<-
      • 26:
         
        CommentAuthorKaz
      • CommentTime23 Mar 2009 10:03
       
      Teraz moge sie wypowiedziec, co sadze o dzwiekowym intro. Jako efekt do gry to jest dobre, ale jako intro srednie. Na Twoim miejscu po prostu skontaktowalbym sie z jakims muzykiem (byl ostatnio konkurs, wiec wiadomo, kto dziala) i poprosil o jakas klimatyczna muzyke.
      • 27:
         
        CommentAuthoradiblol
      • CommentTime23 Mar 2009 10:03
       
      Gdyby dało się plików XM, IT użyć to bym sam wystrugał coś w Modplugu pod Winzgrozą. Muszę poszukać, może jakiś konwerter wala się po necie...?
      • 28:
         
        CommentAuthorKaz
      • CommentTime23 Mar 2009 16:03
       
      Dobrze, ze nie chcesz od razu MP3, a tylko zmodyfikowane MOD-y :)

      Jezeli to ma byc muzyka trackerowa z samplami to na Atari najlepiej chyba uzyc NeoTrackera. Z tym, ze albo muzyka albo obraz.

      Innych formatow/programow tego typu na Atari nie znam, moze jacys muzycy sie wypowiedza.
      • 29:
         
        CommentAuthoradiblol
      • CommentTime23 Mar 2009 21:03
       
      zacząłem pracę nad konwerterem z XM na mój uproszczony format melodii. Nie będzie sampli tylko generatory POKEYa. :)
      • 30: CommentAuthormarok
      • CommentTime23 Mar 2009 22:03
       
      adibol: skopiowane z readme RMT

      RASTER Music Tracker (RMT) is a cross-platform tool for making Atari XE/XL music on PC (OS Win9x).
      * Import formats: ProTracker modules (*.mod), Atari XE/XL Theta Music Composer songs (*.tmc)
      • 31:
         
        CommentAuthoradiblol
      • CommentTime24 Mar 2009 09:03
       
      Ciekawe... nawet bardzo... mam nadzieję że zadziała na Win2k... i tym ciekawsze że OpenMPT eksportuje do MOD.
      • 32:
         
        CommentAuthorKaz
      • CommentTime30 Mar 2009 11:03
       
      Wracam do tematu - i jak ida prace?
      • 33:
         
        CommentAuthoradiblol
      • CommentTime30 Mar 2009 18:03
       
      No od jutra kontynuuję!

      PCtowski konwerter XMów na mój własny format, prototyp odtwarzacza już gotowe, zostaje doszlifować (dlaczego fseek nie działa? ;) ) no i przepisać na asemblera żeby dało radę wykorzystać w przerwaniu VBL.

      Zastanawiam się w jakim trybie zrobić grafikę...? O ile w ogóle zmieści się na ekranie ;) chyba że zrezygnuję z menu.

      Wyobrażam to sobie tak: gracz decyduje o trybie gry (grafika od góry do dołu):
      nagłówek (nazwa miejsca), menu, opis miejsca
      -lub-
      obrazek, linia komend
      • 34:
         
        CommentAuthorKaz
      • CommentTime30 Mar 2009 19:03
       
      Wybor trybu graficznego chyba najlepiej zostawic osobie, ktora bedzie rysowac :). A jezeli nikt nie bedzie rysowal, tylko chcesz konwertowac jakies gotowce (zdjecia, etc) to polecam albo gr.9 (16 odcieni) albo gr8 (hi-res).

      Jezeli grafika Ci sie nie miesci na ekranie to mozesz:
      a) zrobic przelaczanie ekran graficzny/tekstowy (sporo tekstowek tak ma)
      b) zmniejszyc niektore pola, na przyklad opisu. Nie ma sily, zeby przy dobrej kompozycji ekranu nie zmiescila sie grafika. Tylko trzeba troche popracowac nad interfejsem.

      Konwerter XM brzmi dobrze, zamierzasz upublicznic?
      • 35:
         
        CommentAuthoradiblol
      • CommentTime30 Mar 2009 23:03 zmieniony
       
      to jest prowizorka, w ogóle sampli nie konwertuje tylko same nuty! mogę wrzucić jak chcesz... a co do gr9 to będę musiał coś o trybach GTIA się nauczyć bo przy DL raczej nie idzie korzystać z OSu.
      • 36:
         
        CommentAuthorKaz
      • CommentTime30 Mar 2009 23:03
       
      Nuty nie nuty, ale zawsze jakies pomocnicze narzedzie do formatu, nietknietego przez stope atarowca, jest! :) Jak mozesz to publikuj (z krotka instrukcja jak uzywac).
      • 37:
         
        CommentAuthorKaz
      • CommentTime1 Jul 2009 23:07
       
      Jak ida prace adiblol?
      • 38:
         
        CommentAuthorKaz
      • CommentTime19 Sep 2009 12:09
       
      Adiblol - zyjesz chlopie? :(