atarionline.pl game engine #1 - 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: CommentAuthortebe
    • CommentTime23 Sep 2019
     
    tak, teraz zobaczyłem :)
    • 2: CommentAuthorxxl
    • CommentTime23 Sep 2019
     
    silnik obsluguje sprity nawet dwa rodzaje ;-) na czarnym i na bialym tle :D a to wynika z procedur kolizji... trzebaby przejsc na kolizje liczone na wspolrzednych - moze nawet by bylo szybsze...
    • 3: CommentAuthorsolo/ng
    • CommentTime23 Sep 2019 zmieniony
     
    Kilka drobiazgow ode mnie, ktore uzywamy:

    - nigdy nie czekamy na ramke w klasycznym slowa tego znaczeniu

    - rysowanie danych zaczynamy zwykle gdzies od 3/4, gdy plamka jest nizej

    - pozniej w petli czekamy na odpowiednia linie vsynca (np. 90) i tutaj zawsze zaczynamy rendering; we Flimbo rysujemy ekran gry m/w gdy plamka ekranu jest na poziomie UI; dodatkowo czesc rzeczy robiona jest naprzemiennie (ramka parzysta/nieparzysta; np. streamowanie danych levelu w ramce nieparzystej) tak aby calosc zamykala sie w 1 ramce

    - wszystkie objekty zwiazane z gra sa na jednej liscie (ktora ew. jest podzielona na mniejsze listy w celu szybszego sprawdzania)
    - kazdy objekt posiada n-parametrow (typu pozycja,hp,przyspieszenie, typ itp)

    - przy przegladaniu listy sprawdzamy jest typ objektu i skok do procedury, ktora obsluguje ten objekt (przeciwnik, wybuch, cos do podnoszenia itp). skaczac do takiej procedury mamy od reki wszystkie parametry objektu, bo liste przegladamy po X (typu lda ol.tab.type,x), procedura/ai obslugujace ten objekt ma od reki ol.tab.posX,x , ol.tab.hp,x , ol.tab.frame,x itd)

    - kolizje gracz-enemies-strzaly sprawdzamy hitboxami (Axis-Aligned Bounding Box) - jest to relatywnie mega szybkie i daje wieksza grywalnosc i swobode na definiowaniu kolizji

    - kolizje tilesow w zaleznosci od projektu (aby bylo szybko)

    nawiasem fajnie to wyglada na silniku, dawaj giere;)
    • 4:
       
      CommentAuthormaly_swd
    • CommentTime23 Sep 2019
     
    Aż miło się czyta taki wątek, same rzeczowe wpisy.

    XXL - kiedy dasz kolejny filmik?
    • 5: CommentAuthorsis101
    • CommentTime23 Sep 2019 zmieniony
     
    szkoda, że Konop i inni takie cudowne rzeczy nie dają real. Czas leci i każdy z nas liczy 4,5,6... przed 0. Kiedy się doczekamy? My, też lamerzy?:);):D;p:!!>dupa
    • 6: CommentAuthorxxl
    • CommentTime24 Sep 2019
     
    @Solo: i tu wlasnie widac przewage z80 nad 6502 - w tabelach atrybutow obiektu rezerwujesz miejsce nawet wtedy gdy obiekt tego atrybutu nie ma. na z80 index do takiej listy obiektow jest 16bitowy, dostep do kazdego parametru jest dokladnie tak samo natychmiastowy - do rejestru indeksowego mozna dodac stala i dluosc rekordu dla kazdego typu obiektu moze byc rozna (zaleta).
    mozna to tez obejsc robiac przedzialy w ktorych index moze dotyczyc pewnych rodzajow obiektow - i chyba tak bym to zrobil (kilka tablic pod rozne typy obiektu) aby nie dopuscic do sytuacji w ktorej przykladowo mamy maksymala ilosc obiektow do ruszenia 10 przy czym gracz leci na autofire i mamy non stop 10 pociskow na ekranie a gra nie ma jak wykreowac przeciwnika :-) hehehe

    bardziej ciekawi mnie metoda scrolla ekranu w poziomie przy zalozeniu ze mamy linie szerokosci 42 bajtow.
    • 7: CommentAuthorsolo/ng
    • CommentTime24 Sep 2019 zmieniony
     
    no wiadomoe,ze nie bedziesz mial calej listy dla jednego typu tylko sobie podzielisz to pod logike/projekt (urok retro ale wykorzystywany i w obecnym gamedevie w nizszej warstwie). jak napisales - podzial - ale to dalej jedna lista, tylko trzymasz offsety gdzie sie zaczyna sublista.

    Typu mamy 64 objekty w liscie (dla atari8), dzielimy sobie:
    0-15 - strzaly gracza
    16-47 - enemies/wybuchy/smierci
    itd.

    w ten sposob przegladasz sublisty (osobno przegladasz 0-15, osobno 16-47). wszystko sparametryzowane (offset)

    SPAWN dzieki temu tez moze dzialac sprawniej.

    Zamiana przeciwnika w wybuch (bo zabilismy enemy) zajmuje kilka cykli (poza sprawdzeniem kolizji) - lda sta i juz:

    (...)
    jsr check
    beq @+
    lda #ol.type.explosion
    sta ol.tab.type,x
    (+ew. dodatkowe kilka parametrow jezeli potrzebne)

    itd.

    w miejscu przeciwnika jest teraz kolizja i w nastepnej iteracji gameloopa zostanie pokazany tutaj wybuch (pozycje wybuchu sa za darmo)

    dodatkowo robisz sobie granice, typu 'maxEnemySpawn' dostosowane pod wydajnosc (stad latwo moglismy skalowac TimePilota). na slabszej maszynie na danej subliscie bedziesz spawnowac przeciwnikow w elementy listy 8-16, na lepszym 8-48 itd
    spawner sprawdza najpierw czy ma juz maxEnemy/maxShots/maxCostam i wychodzi od razu jezeli jest limit.
    • 8:
       
      CommentAuthorRastan
    • CommentTime25 Sep 2019
     

    zbyti:

    Kurcze patrząc na tła tej gry to ja poproszę o Rastana na Atari :D


    No hej, jestem. :)
    • 9: CommentAuthorzbyti
    • CommentTime25 Sep 2019
     
    :D