atarionline.pl Moon Quest - powstaje nowa gra - 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:
       
      CommentAuthorstring
    • CommentTime10 Jan 2022 zmieniony
     
    Na wstępie chciałem jeszcze podziękować za rady Mono i Kuby Husaka, którzy podczas ostatniego spotkania na zoomie
    wytłumaczyli kilka istotnych rzeczy i otworzyli mi oczy na parę spraw. Wasze cenne uwagi biorę do siebie i będę je chciał uwzględnić przy następnej grze nad którą właśnie pracuję. Zaznaczam, że wszystko to dla mnie nowości, a dla niektórych pewnie banał i oczywista oczywistość. Chodzi tu m.in o wykorzystanie zegara systemowego zamiast pętli for...to (bo chociaż gra nie wykorzystuje Rapidusa to nie będzie on stanowił problemu, gdy pozostanie włączony), nie wygaszanie antica na czas podmiany grafiki, czy odpowiednie rozmieszczanie danych w pamięci itd.

    Na zachętę wrzucam kilka istotnych informacji-założeń i parę grafik. Obecnie ulepszam "silnik", poprawiam scenariusz, rysuję grafiki itd. Gra nosi tytuł Moon Quest i tak mniej więcej się przedstawia:

    - gra tekstowo-przygodowa
    - klimaty kosmiczne (rakiety, naukowcy, podróże kosmiczne itd.)
    - doczytywane grafiki lokacji
    - niecustomowy zestaw fontów
    - 2 wersje językowe PL/EN
    - sterowanie joystickiem i zestaw stałych poleceń
    - zapis/odczyt postępu
    - ekwipunek
    - obsługa NTSC/PAL (kolory)

    I wszystko w Basicu (a jakże inaczej), kompilowane.
    • 2:
       
      CommentAuthorKaz
    • CommentTime10 Jan 2022
     
    Wow! Dobry news, że z marszu atakujesz kolejną grą. Trzymam kciuki i zamawiam egzemplarz, jeśli będzie wydana :D :D :D
    • 3: CommentAuthorpirx
    • CommentTime10 Jan 2022
     
    weź daj zobacz!
    • 4: CommentAuthorVidol
    • CommentTime10 Jan 2022
     
    Jak da rade to zmień tryb tekstowy na antic3, bo polskie literki się 'wywyższają' :)
    Tu jest opis:
    ->link<-
    • 5:
       
      CommentAuthorstring
    • CommentTime10 Jan 2022 zmieniony
     
    @ pirx ;) będzie jednak inaczej, czyli napierw patrz jak na kolejnym obrazku.
    @Vidol tak na szybko - to chyba możliwe, ale czy w NTSC nie wywali się to poza ekran? Bo de facto to prawie 2 linie tekstu (14 linii 1 bitowch) więcej.
    @Kaz najpierw niech powstanie gra. Poza tym przy Trollu było naprawdę sporo roboty z wydaniem, tym razem chyba lepiej przez jakiegoś wydawcę.
    • 6:
       
      CommentAuthorjhusak
    • CommentTime10 Jan 2022 zmieniony
     
    @string - poczytaj o optymalizacji atari - basica. Podstawowe rzeczy (z pamięci):
    - szybkie podprocedury na początku programu
    - często używane stałe idą do zmiennych, unikać używania stałych
    - okresowe czyszczenie tablicy zmiennych poprzez "List" i "Enter"
    - długie linijki
    - dane trzymane binarnie w zmiennych tekstowych, nie używać dużo linii "data"
    - nie komentować (ew. komentować, ale jak pamięci nie styka to pozbywać się linijek z komentarzami)
    - stosować sprytne techniki typu metaprogramowanie, a nie np. każdą lokację kodować jako oddzielny kod.

    Jak chcesz, to mogę pomóc w optymalizacjach :)
    • 7: CommentAuthorpirx
    • CommentTime10 Jan 2022
     
    może już za późno, ale bardzo bym Cię namawiał na użycie tbxl-parser:
    ->link<-
    Dzięki niemu możesz programować prawie jak w nowoczesnym języku, a wynik jest ładnie zmniejszony, itp. tbxl-parser też działa ze zwykłym basicem.
    • 8:
       
      CommentAuthorstring
    • CommentTime10 Jan 2022 zmieniony
     
    Dzięki Kuba. Jak rozmawialiśmy nie wszystko łyknie kompilator a ta numeracja chyba nie do końca ma rację bytu skoro i tak generujemy p-code.
    Co do procedur, zmiennych, stałych itd. to oczywiście masz rację i będę optymalizował. Z metaprogramowaniem troche gorzej bo w każdej lokacji różne sa efekty tych samych działań. Uzywam za to tego np. w obsłudze ekwipunku czy doczytywaniu grafik.
    Obecnie pracuję nad 2 rzeczami które sprawiają mi kłopot.
    1. Niby banalne ale nie wiem za bardzo jak wyłączyć procedurę na przerwaniach zmiany koloru ramki co ileś tam jednostek czasu. Działa dalej nawet po zmianie trybu.
    2. Jak podmienić 10 razy dane (bajty) w pamięci. Bajtów jest ok 20-30 i to w roznych komórkach wiec odpada for.. to. Data zajmuje dużo a pokei jeszcze więcej. Doczytywanie w tym momencie odpada z pewnych względów.

    @pirx ok przyjrzę się temu
    • 9:
       
      CommentAuthorjhusak
    • CommentTime10 Jan 2022
     
    @pirx, zajekurdebiste narzędzie!
    • 10: CommentAuthorpin
    • CommentTime11 Jan 2022 zmieniony
     
    @string - dlaczego nie TBXL?
    • 11:
       
      CommentAuthorpabloz1974
    • CommentTime11 Jan 2022 zmieniony
     
    @pin bo basic jest cool
    • 12: CommentAuthorpirx
    • CommentTime11 Jan 2022
     
    @string turbobej by pomógł w pkt 2.
    Co do pkt. 1 to musiałbyś się podzielić procką, którą odpalasz, żeby mrygać profecjonalnie kolorami. Albo można dodać jakiś znacznik, który wyłączy mryganie, albo drugą prockę, która wyłącza przerwania.

    Mam dla Ciebie propozal - mógłbym Twój kod z bejzika przepisać na tbxl-parser - zrobiłem to z całymi Panowie i Poddani, to była rzeźba w płynnych exxxtrementach, ale się dało, przypuszczam, że gorzej z Twoim kodem nie będzie, bo za dużo tricków typu ON X GOTO X*100+1000 nie używasz :)
    Po przepisaniu zyskujesz kod, który daje się rozwijać - np. procki zamiast GOSUB, ładne ify, itp. Potem to możesz skomplikować turbo basic kompilerem, @pin na pewno pomoże.
    Masz trochę więcej memorii, itp.
    Skomplikowany TBXL nie jest taki szybki, jak MMG Compiler w trybie int, ABC to nie wiem, nie macałem. Za to masz flołty.

    tbxl-parser ma np. taki myk, że można inkludować binarki - np. ta procka do mrygania mogłaby być w źródłach asemblerowych, asemblujesz ją madsem i do Twojego źródła inkludujesz bezp. dane z offsetem 6, żeby pominąć nagłówek (albo asemblujesz bez nagłówka).
    Wszystkie sprajty, fonty czy inne obrazki/muzyczki też można inkludować, nie musisz potem z DATA czytać i przerzucać. (inkluduje się do zmiennej tekstowej, którą MOVE można przerzucić gdzie się chce w okamžiku).
    Jakbyś był zainteresowan, ping me pawel.kalinowski to małpa gmaila.
    • 13:
       
      CommentAuthorstring
    • CommentTime11 Jan 2022 zmieniony
     
    @pin
    TBXL może przy następnej produkcji. Póki co pewniej czuję się w podstawowym Basicu. Chcę mniej czasu poświęcić na naukę języka a więcej na samą grę i poznanie podstaw systemu operacyjnego, co przychodzi mi czasami z trudem. Jeśli chodzi o szybkość to po skompilowaniu jest dla mnie zadowalająca. Zmiennych też nie mam więcej niż pozwala na to Atari Basic. Pamięci mam 37kB (goły system, bez dosa i zapis do H:) - mogę skorzystać z UBI jak zabraknie, ale i tak doczytuję, potem kompilacja 30 sekund i mogę testować. Nabrałem już w tym wprawy :)

    @pirx
    Procka-strona 112(129 od Retronics) Poradnika Programisty.

    Jeśli chodzi o przepisanie pod tbxl, to zobaczymy. Jeśli będą z tego jakieś realne korzyści to czemu nie. Póki co ABC radzi sobie nieźle.
    Tricków nie mam, ale gra sporo będzie doczytywać z dyskietki, mam też GOSUB+zmienna, doczytuję binarki USR'em i reszta to raczej standard.
    • 14: CommentAuthorilmenit
    • CommentTime11 Jan 2022
     
    Jak byś chciał w przyszłości zmieniać na inny Basic, to polecam zamiast TBXL spróbować ->link<- Ma chyba wszystko to, co TBXL, a też znacznie więcej.
    • 15: CommentAuthorpirx
    • CommentTime11 Jan 2022 zmieniony
     
    @ilmenit - to nie do końca prawda, bo np. obsługa stringów (hehe) do tekstówki się nie bardzo nadaje:
    `String variables always use 256 bytes, the first byte stores the string length and the following bytes store up to 255 characters.`
    ale trzeba przyznać, że dmsc zmontował niesamowity interpreter, teraz żeby tylko mu się udało to komplikować :)

    Odpowiedź na pytanie poniżej - większość basiców dynamiczną alokację pamięci w najprostszy możliwy sposób - jak zaallokujesz, to już z tą pamięcią siedzisz. Tylko (z tego co wiem) Microsoft Basic ma rudymentarny garbage collector.
    • 16: CommentAuthorilmenit
    • CommentTime12 Jan 2022
     
    @pirx, rzeczywiście, tego nie widziałem. W tym przypadku takie stringi do tekstówki mało się nadają. Ciekawe jak mają implementowane stringi inne Basici, bo dynamiczna alokacja pamięci na małym Atari to trudna rzecz do zrobienia efektywnie (nie tylko wielkość ale też fragmentacja).
    • 17:
       
      CommentAuthorstring
    • CommentTime12 Jan 2022
     
    Pytanie:
    Mam własną DL (GR.0 + GR.5) opartą na GR.0 na stronie 6 - stale zafiksowaną. Grafika zawsze się ładuje wg niej gdzie ja chcę. Niestety OS atari przenosi sobie adres wyświetlanego tekstu obrazu w różne miejsca. Co istotne wyświetlanie tekstu robię instrukcją position. Dane są przenoszone raz pod BC40, a raz pod AC40, przy wyłączonym Basicu.

    Dzieje się tak po wywołaniu USR, które otwiera-ładuje nowy plik (kolejną część gry) do pamięci i wymazuje stary plik.

    Póki co ja znajduję sobie sam ten adres monitorem w pamięci i podmieniam jego pozycję w programie, ale to uciążliwe. Czy da się (przy działającym OS) ustanowić stały adres wyświetlania tego tekstu? Wymusić go np. zawsze pod BC40?

    Obniżam też sobie RAMTOP, ale za każdym razem (na każdym podpliku) o tyle samo - 16 stron pamięci.
    • 18:
       
      CommentAuthorjhusak
    • CommentTime12 Jan 2022
     
    No to masz poszlakę.
    Obniżasz ramtop, robisz Graphics 0 i masz pod $88 adres $AC40 (a z tego korzysta position)
    A chcesz sztywno - to musisz zrobić jakiś trik, aby przywrócić starą wartość do $88, czyli zapamiętać, obniżyć ramtop, graphics cośtam, przywrócić starą wartość do $88.

    Należy też pamiętać, że sama DL ma adres ekranu wszyty co najmniej raz, i można go stamtąd wziąć.
    • 19: CommentAuthorpirx
    • CommentTime13 Jan 2022
     
    @string - psierobiłem nieco ten program do mrygania:
    org $0600
    icl "lib/atari.hea"
    interrupt
    dec 203
    bne end
    lda COLBAKS
    clc
    adc #2
    sta COLBAKS
    lda PAL
    and #%00001110
    BEQ it_is_pal
    mva #60 203
    bne end
    it_is_pal
    mva #50 203
    end
    jmp XITVBV
    init
    PLA
    mva #1 203
    ldy #<interrupt
    ldx #>interrupt
    lda #7
    JMP SETVBV
    deinit
    PLA
    ldy #<XITVBV
    ldx #>XITVBV
    lda #7
    JMP SETVBV


    w załączeniu bejzyk. pierwszy USR włącza mryganie, drugi wyłącza. Można to znacznie ładniej rozwiązać, ale zobacz, czy w ogóle CI jakować pomoc się przydaje :)
    • 20: CommentAuthorpirx
    • CommentTime13 Jan 2022
     
    • 21: CommentAuthorilmenit
    • CommentTime13 Jan 2022
     
    @string - większość systemowych operacji graficznych korzysta z dwóch adresów: SAVMSC i ADRESS. SAVMSC to początek ekranu, ADRESS to tymczasowy wskaźnik dla operacji graficznych. Być może wystarczy po wczytaniu kolejnego kawałka ustawić tylko SAVMSC na poprawną wartość.
    • 22:
       
      CommentAuthorstring
    • CommentTime13 Jan 2022
     
    @pirx Dzięki, chociaż udało mi się to też zatrzymać na kilka innych (może mniej fachowych sposobów) to sprawdzę jak działa w moim programie Twoja procka.
    @ilmenit super! Sprawdzę to.
    • 23: CommentAuthorpirx
    • CommentTime14 Jan 2022
     
    @string spox, jakbyś miał potrzebę, to dawaj znać - takie pchełki to akurat coś, co daję radę obkodować...
    a najszybciej to pewnie zamienić
    adc #2
    na
    adc #0
    pokiem, żeby mrygac przestało. Moja procka rozpoznaje, czy pal czy ntsc i mryga odpowiednio ;]