atarionline.pl Moja nowa gra na 8-bit ATARI Jet Fighter :D - 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.  
    Witam chialem sie podzielic z wami moim nowym projektem gry na ATARI 8-bit. Jest to gra Jet Fighter :D zaprogramowana w BASICU z wykorzystaniem trybu player missile graphics. Gra zmiescila sie w 90 liniach kodu :D. Mam nadzieje ze sie wam spodoba :D

    Pozdrawiam cale forum ATARI
    ->link<-

    Jet Fighter game for ATARI programmed in BASIC using player missile graphics. Game is only 90 lines of code :D Hope you enjoy it.

    To run game you need emulator Atari 800WinPlus or original ATARI computer :D.
    You can type code from program listing JET_FIGHTER.txt by yourself its only 90 lines of code.
    Or you can download zip file with BAS file and load it in emulator.
    To load file you need attach hard drive disk in emulator and type in BASIC

    ENTER "H1:JET_FIGHTER.BAS"

    After load program type RUN and press Return-Enter key.

    Controls: Left and Right Joystick and Up for shoot.
    • 2:
       
      CommentAuthorccwrc
    • CommentTime17 Feb 2024
     
    Ja się cieszę z każdej nowości :)

    Ale gdzie informacja o reszcie?
    ->link<-

    Będzie planowana rozbudowa ew. udoskonalenie? To byłoby ciekawe.
  2.  
    Jeżeli chodzi o Jet Fightera to projekt powstal w dwa dni :D na szybko chcialem przećwiczyć player missile graphics na ATARI czyli popularne rysowanie duszków ang. sprites za pomocą przesylania danych bezpośrednio do pamięci pod wskazany adres za pomocą POKE. Okazalo sie to calkiem nie trudne choc gdy pierwszy raz o tym czytalem w starych bajtkach jako dzieciak nie do konca rozumialem wczytywanie DATA oraz przesylanie danych w bajtach :D. Jedynie rysowanie PLOTem punkt po punkcie bylo proste i do ogarniecia. Wiec jezeli chodzi o zwyklego plota to tak sa rysowane czolgi w grze TANKS. Tutaj natomiast juz w pelni swiadomie pelna geba stworzylem gre na male ATARI korzystajaca z duszkow i zczytywania joysticka i to na tyle przyzwoicie ze nie zwalnia :D. Co do tego projektu na razie nie planuje rozbudowy ale moznaby sprobowac przyspieszyc rysowanie za pomoca wstawek assemblerowych (w internecie jest cala masa tzw subroutines do rysowania duszków wlasnie w kodzie maszynowym) i potem taka wstawke mozna w BASICU odpalac jak zwykle polecenie. Statki poruszaja sie jedynie poziomo ruch w pionie przy uzyciu POKE spowalnial gre wiec pozostalem przy tej wersji ale przy nowej najprawdopodobniej uzyl bym wstawki i mozliwosci latania gora dol. Co ciekawe drogi pocisk rysowany jest jako 3 gracz :D. W Player Missile Graphics z zalozenia bylo 4 graczy i 4 pociski. Dlatego tez dawne gry byly troche archaiczne i powielaly taki schemat.
    • 4:
       
      CommentAuthorccwrc
    • CommentTime17 Feb 2024
     
    Wiesz co?

    Twoje opisy to lipa.

    To znaczy, gdyby legenda przypominała post powyżej czytałoby się to z prawdziwą ciekawością. Odbiór byłby... Na pewno szerszy.

    Dlaczego ani na gicie, ani tutaj nie dajesz tak ciekawych szczegółów? To kompletnie zmienia podejście odbiorcy.

    Tekst "dwa statki strzelają do siebie" jest dla szczypiorków a detale co, jak, dlaczego, czemu to służyło, z czego jestem dumny, czego chciałem się nauczyć są MOCNE.
    Bo tekst, że Atari to stary komputer mocny nie jest :P
    • 5:
       
      CommentAuthorpirx
    • CommentTime17 Feb 2024
     
    mam bardzo ważną rzecz do zrobienia, więc prokrastynuję i w wyniku tego troszkę sktóciłem kod:
    P=100:VOL=8
    SCP=0:SCE=0
    dim a$(6):a$=["{del}|||||"]
    D=1:XE=120:POKE 752,1
    gosub 6000
    MIX=0:MIY=0
    POKE 752,1
    ? "}"
    SETCOLOR 2,8,0:X=120:Y=100
    ' ******************************
    ' *JETFIGHTER MATEUSZ PAWLOWSKI*
    ' ******************************
    A=PEEK(106)-8:POKE 54279,A:PMBASE=256*A
    POKE 559,46:POKE 53277,3
    POKE 53248,X
    FOR I=PMBASE+384 TO PMBASE+896:POKE I,0:NEXT I
    POKE 704,216
    POKE 705,24
    POKE 706,24
    YE=20
    FOR I=PMBASE+512+Y TO PMBASE+517+Y:READ A:POKE I,A:NEXT I
    FOR I=PMBASE+640+YE TO PMBASE+645+YE:READ A:POKE I,A:NEXT I
    DATA 24,60,102,255,255,165
    DATA 165,255,255,102,60,24
    109
    A=STICK(0):IF A=15 THEN GOTO 200
    IF A=11 THEN X=X-2:POKE 53248,X
    IF A=7 THEN X=X+2:POKE 53248,X
    IF S=0 THEN IF A=14 THEN S=1:P=100
    POKE 53249,XE
    IF X<50 THEN X=195
    IF X>195 THEN X=50
    POKE 53248,X
    200
    R=INT(4*RND(1))+1
    XE = XE+ (D<>1)*R*2 - (D<>1)*6*(R=4) - (D=1)*R*2 + (D=1)*6*(R=4)
    IF XE<50 THEN XE=195
    IF XE>195 THEN XE=50
    400
    POKE 53249,XE:POKE 705,130:POKE 705,140
    POSITION 1,1
    ?a$(1,scp+1)
    POKE PMBASE+384+MIY,0
    IF S=1 THEN MIY=Y-1:MIX=X+2:S=2
    IF S=2 THEN MIY=MIY-8:IF MIY<0 THEN MIY=128:S=0
    IF MIX>XE AND MIX<(XE+8) AND MIY<30 THEN SCP=SCP+1:MIY=128:S=0
    IF MIEX>X-8 AND MIEX<X AND MIEY>100 THEN GOTO 5000
    IF SCP>5 THEN GOTO 5010
    POKE 53252,MIX
    POKE PMBASE+384+MIY,1
    POKE PMBASE+768+MIEY,0
    MIEY=MIEY+8:IF MIEY>128 THEN MIEY=26:MIEX=XE
    POKE PMBASE+768+MIEY,1
    POKE 53250,MIEX
    R=INT(5*RND(1))+1
    IF R=1 THEN D=D+1
    IF D=3 THEN D=1
    GOTO 109
    5000
    POSITION 15,11:? "GAME OVER"
    5005
    Q=1^1^1^1^1
    GOSUB 6000:GOTO 400
    5010
    POSITION 15,11:? "YOU WIN!"
    goto 5005

    6000
    ? "}":POSITION 14,11:? "JET FIGHTER"
    Q=1^1^1^1^1
    ? "}"
    MIEX=0:MIEY=0:MIX=0:MIY=0:SCP=0
    RETURN


    już naprawdę muszę lecieć, ale to by się dało wcisnąć w 10 linijek i mógłbyś zawalczyć w tym konkursie: ->link<-
    !!!

    Byłoby dużo łatwiej, jakbyś się przesiadł na Turbo Basic XL.

    Ten kod powyżej jest napisany pod toola ->link<- tbxl-parser, który generuje ładne pliki .BAS o jak najmniejszym rozmiarze (w załączeniu)

    W TBXL łatwiej uniknąć goto i takich tam, bo są procedury i bardziej rozbudowany "IF".

    W ogólności jak chcesz minimalizować liczbę linii to trzeba unikać IFów i skoków do różnych linii. Dlatego poprzestawiałem trochę kodzik i usunąłem łatwe do usunięcia IFy. Można tak dalej, ale ja już nie mogię...
  3.  
    ccwrc Akurat jakos forma na forum bardziej odpowiada do szczegolowego opisywania a moze to sentyment do atari i sceny atarowcow i commodorowcow :D Na git hubie poprostu same konkrety zamiescilem. Ale tak naprawde kazdy projekt czegos uczy i szczerze mowiac moznaby o kazdym napisac artykul lub tutorial cos na ksztalt bloga a moze nawet i ksiazke :D Ostatnio duzo programuje i wrzucalem na szybko same konkrety ale moze w przyszlosci zaloze bloga technicznego poki co mam jeszcze troche nauki zwiazanej nie tylko z grami :D Co do konkursu kiedys widzialem kapitalna stronka i swietne projekty wogole temat malych gier i programowa do kilkunastu lub wlasnie 10 lini kodu :D na ATARI :D i C64 :D to ciekawy temat i masa ciekawych pomyslow bo te gry sa proste i bardzo grywalne. Kiedys wogole odkrylem zaleznosc im prostsza gra ale za to przemyslana tym bardziej grywalna. Mozg lubi prosta stymulacje zwiazana z wciskaniem przycisku fire :D. Wiekszosc starych gier z lat 70 i 80 bazowala na tym zjawisku chociaz glownym powodem ich prostoty byly ograniczenia sprzetowe - i to chyba glownie one zdeterminowaly wyglad tych gier w kazdym razie na dobre im to wyszlo :D Asteroids :D Pac Man :D Donkey Kong. Proste jak nie wiem co ale za to wciagajace i grywalne :D jeszcze tylko jeden level jeszcze tylko pare punktow i tym razem sie uda :D
  4.  
    pirx Odpalilem zeby zobaczyc :D i chyba smiga troche szybciej :D moze kiedys sproboje tego turbo basica xl Kiedys pisalem tetrisa w basicu i zabraklo mi pamieci pamietam jak znalazlem informacje wlasnie o tym ze turbo basic xl daje wieksze mozliwosci jezeli chodzi o pamiec rowniez. Na te chwile sie wstrzymam z turbo basiciem ale bardzo zastanawia mnie przyspieszenie Jet Fightera pod katem szybkiego rysowania za pomoca wstawek. Moze wtedy udaloby mi sie zrealizowac pierwszy pomysl zeby przeciwnik nadlatywal w kierunku gracza i przelatywal takimi falami jak w space invaders. :D Problem z poruszaniem sprajtow pionowo polega nie tyle na powolnym ich ruchu bo nawet wtedy graloby sie fajnie ale na tym ze sam fakt przemieszczania w pionie spowalnia caly kod i ruch pozostalych sprajtow. W kazdym razie to moja pierwsza gra na ATARI z prawdziwymi sprajtami :D musialem na to czekac 34 lata :D
    • 8:
       
      CommentAuthorccwrc
    • CommentTime17 Feb 2024
     
    "Kiedys wogole odkrylem zaleznosc im prostsza gra ale za to przemyslana tym bardziej grywalna."

    "Wiekszosc starych gier z lat 70 i 80 bazowala na tym zjawisku chociaz glownym powodem ich prostoty byly ograniczenia sprzetowe"

    Ograniczenia sprzętowe to jest to. Zgadzam się z każdym słowem całym sobą.
    Z tego co ja obserwuję od lat 90 to im więcej ramu, im więcej zasobów, im mniej ograniczeń tym mniej czystej, prostej zabawy.

    Zasoby blokują kreatywność ;)
    Na pierwszy rzut oka widać, że np. pirx za młodu bananami posypywanymi złotem karmiony nie był :D
    • 9:
       
      CommentAuthorpirx
    • CommentTime18 Feb 2024 zmieniony
     
    topra, to 15 wierszy
    P=100:VOL=8
    SCE=0
    dim a$(6):a$=["{del}|||||"]
    D=1:XE=120:POKE 752,1
    gosub 6000
    ? "}"
    SETCOLOR 2,8,0:X=120:Y=100
    ' ******************************
    ' *JETFIGHTER MATEUSZ PAWLOWSKI*
    ' ******************************
    A=PEEK(106)-8:POKE 54279,A:PMBASE=256*A
    POKE 559,46:POKE 53277,3
    FOR I=PMBASE+384 TO PMBASE+896:POKE I,0:NEXT I
    POKE 704,216
    POKE 705,140
    POKE 706,24
    YE=20
    FOR I=0 to 5:read a:poke pmbase+i+512+Y,A:poke pmbase-i+645+ye,a:next i
    DATA 24,60,102,255,255,165
    109
    A=STICK(0)
    X = X + 2*(A=7) - 2*(A=11)
    POKE 53248,X
    IF S=0 and A=14 THEN S=1:P=100
    x = x*(x>=50)*(x<=195) + 195*(X<50) + 50*(X>195)
    POKE 53248,X
    POKE 53249,XE
    R=INT(4*RND(1))+1
    XE = XE+ (D<>1)*R*2 - (D<>1)*6*(R=4) - (D=1)*R*2 + (D=1)*6*(R=4)
    xe = xe*(xe>=50)*(xe<=195) + 195*(Xe<50) + 50*(Xe>195)
    POSITION 1,1
    ?a$(1,scp+1)
    POKE PMBASE+384+MIY,0
    IF S=1 THEN MIY=Y-1:MIX=X+2:S=2
    IF S=2 THEN MIY=MIY-8:IF MIY<0 THEN MIY=128:S=0
    IF MIX>XE AND MIX<(XE+8) AND MIY<30 THEN SCP=SCP+1:MIY=128:S=0
    IF MIEX>X-8 AND MIEX<X AND MIEY>100 THEN GOTO 5000
    IF SCP>5 THEN GOTO 5010
    POKE 53252,MIX
    POKE PMBASE+384+MIY,1
    POKE PMBASE+768+MIEY,0
    MIEY=MIEY+8:IF MIEY>128 THEN MIEY=26:MIEX=XE
    POKE PMBASE+768+MIEY,1
    POKE 53250,MIEX
    R=INT(5*RND(1))+1
    d=d+(r=1)
    d=d*(d<>3) + 1*(d=3)
    GOTO 109
    5000
    POSITION 15,11:? "GAME OVER"
    5005
    Q=1^1^1^1^1
    GOSUB 6000:GOTO 109
    5010
    POSITION 15,11:? "YOU WIN!"
    goto 5005

    6000
    ? "}":POSITION 14,11:? "JET FIGHTER"
    Q=1^1^1^1^1
    ? "}"
    MIEX=0:MIEY=0:MIX=0:MIY=0:SCP=0
    RETURN


    teraz będzie wolniej, ale zbicie z 90 wierszy do 15 trochę poświęceń wymaga :))))))))