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
     
    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
     
    Przewidziana jest jakas grafika - ekrany gry, elementy ozdobne, ekran tytulowy, koncowy, etc?
    • 3: CommentAuthormarok
    • CommentTime16 Mar 2009 zmieniony
     
    @adiblol: rzuć może okiem na ten tekst

    ->link<-
    • 4:
       
      CommentAuthoradiblol
    • CommentTime16 Mar 2009
     
    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 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
     
    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
     
    Niestety... jeśli dobrze patrzę to DLI w tej grze jest robione wyłącznie za pomocą asemblera :(
    • 8: CommentAuthormarok
    • CommentTime16 Mar 2009
     
    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
     
    wygląda na to, że będę musiał się asemblera nauczyć...
    • 10:
       
      CommentAuthoradiblol
    • CommentTime17 Mar 2009
     
    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
     
    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
     
    Marok - a Ty nie zamierzasz czasem sam sprobowac sil z jakas gra? :)
    • 13:
       
      CommentAuthoradiblol
    • CommentTime18 Mar 2009 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
     
    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
     
    Używam WSYNC-a ale i tak się zmieniają kolory nie tam gdzie trzeba :(

    • 16:
       
      CommentAuthoradiblol
    • CommentTime21 Mar 2009
     
    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
     
    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
     
    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
     
    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
     
    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
     
    Już naprawiłem. Była wyłączona DMA dla PM. marok miał rację.
    • 22:
       
      CommentAuthoradiblol
    • CommentTime22 Mar 2009
     
    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
     
    Sadze, ze nie wiem czy dobry plik podpiales do linku, bo u mnie sciaga sie starsza wersja...
    • 24: CommentAuthormarok
    • CommentTime23 Mar 2009
     
    Nie tyle rację, co najwyżej intuicję. Zgadywałem.
    • 25:
       
      CommentAuthoradiblol
    • CommentTime23 Mar 2009
     
    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
     
    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
     
    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
     
    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
     
    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
     
    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
     
    Ciekawe... nawet bardzo... mam nadzieję że zadziała na Win2k... i tym ciekawsze że OpenMPT eksportuje do MOD.
    • 32:
       
      CommentAuthorKaz
    • CommentTime30 Mar 2009
     
    Wracam do tematu - i jak ida prace?
    • 33:
       
      CommentAuthoradiblol
    • CommentTime30 Mar 2009
     
    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
     
    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 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
     
    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
     
    Jak ida prace adiblol?
    • 38:
       
      CommentAuthorKaz
    • CommentTime19 Sep 2009
     
    Adiblol - zyjesz chlopie? :(