kategoria: AMOS
[#181] Re: Tworzenie gier

@tukinem, post #178

Te dwa warunki się nie wykluczają. Drugi zadziała dopiero gdy pierwszy zostanie spełniony. Czyli najpierw dzoj musi być wycentrowany, żeby drugi warunek w ogóle zaczął działać.
Wpisz sobie na próbę coś takiego.

Repeat
IF joy(1)=0 THEN akt=false

IF joy(1)>0 AND akt=false
bell
akt=true
ENDIF
Until KeyState(69)


Ostatnia linia czeka na klawisz Esc.
Pomachaj dżojstikiem i zobaczysz, że dźwięk dzwonka słychać tylko po wcześniejszym wycentrowaniu dżoja.



Ostatnia aktualizacja: 03.08.2021 12:57:31 przez mastaszek
1
[#182] Re: Tworzenie gier

@mastaszek, post #181

Rozumiem o co chodzi. Sprawdzę jak siądę do Amosa. Ciekawi mnie dlaczego dajesz typy zmiennych logicznych jeśli dobrze to ująłem. Chodzi mi o to czy lepiej dawać true/false czy 1/0? Przyzwyczajony jestem do liczb ale jeśli logiczne wyrażenia są szybsze to będę tak stosować
[#183] Re: Tworzenie gier

@tukinem, post #182

Na jedno wychodzi. Dałem true/false dla przejrzystości.
[#184] Re: Tworzenie gier

@mastaszek, post #181

Brawo :) zaczynam rozumieć o co chodzi. Warunek IF joy(1)=0 THEN akt=false sprawdza tylko stan joysticka, ale tylko raz ustawia zmienną AKT na FALSE. Później obojętnie kiedy wciśniemy kierunek joya, to zawsze zaskoczy. Przy mojej pętli REPEAT UNTIL zawsze musiał być Joystick w pozycji 0, bo inaczej program stawał i czekał jeśli się wcisnęło akurat podczas pracy pętli lub przed samą pętlą. Ciekawe rozwiązanie tego problemu :) widać doświadczenie w programowaniu. Teraz przy 7MHz nawet bezpośrednio w Amosie da się grać na największych poziomach. Dziękuję ponownie. Będę teraz zmieniać boba z menu głównego, bo zapomniałem go pomniejszyć i przy niskim procku mruga. Swoją drogą dziwne, że z Dosboxa rippując grafikę musiałem wszystko pomniejszać o połowę w PPaincie. Chyba w Dosbox mam włączone podwójne piksele, chociaż nie zauważyłem tam takiej opcji.
1
[#185] Re: Tworzenie gier

@mastaszek, post #183

Teraz pytanie identyczne, lecz do sterowania klawiaturą. Wpisałem:

IF KEY STATE(79) THEN "ruch w lewo itd...".

W menu działa bez problemu. W samej grze zasuwa bez zatrzymania. Dałem warunek:

IF RESETKLAWIATURY=TRUE AND KEY STATE(79) THEN RESETKLAWIATURY=FALSE:"ruch w lewo itd..."
IF KEY STATE(0) THEN RESETKLAWIATURY=TRUE

noi raz się ruszy zawodnikiem i koniec, wiesza się. Podglądałem SCANCODE i pisze "0" więc powinno być OK a nie jest...

Próbowałem nawet
IF SCANCODE=0
CLEAR KEY

Nic nie pomaga
[#186] Re: Tworzenie gier

@tukinem, post #185

Zrobiłem inny programik, który zmienia kolory przy klawiszach, lecz przy puszczonym klawiszu ma być kolor czarny:

SCREEN OPEN 0,320,256,16,LOWRES
CLS 1
REPEAT
IF KEY STATE(77) THEN CLS 3
IF KEY STATE(76) THEN CLS 4
IF KEY STATE(0) THEN CLS 0
CLEAR KEY
UNTIL KEY STATE(69)

Czy to nie powinno pokazywać czarnego ekranu (kolor 0) bez wciśniętego żadnego kursora?
[#187] Re: Tworzenie gier

@tukinem, post #186

No nie, będzie czarny jak wciśniesz tyldę.
1
[#188] Re: Tworzenie gier

@tukinem, post #186

Tu masz analogicznie do dżojstika. Klawisze to STRZAŁKI (góra,lewo,prawo,dół)


Repeat

'-------------------

If Key State(76)=False and Key State(77)=False and Key State(78)=False and Key State(79)=False
KLAWISZE=False
End If

'--------------------

If Key State(76)=True and KLAWISZE=False
Print "gorna"
KLAWISZE=True
End If

If Key State(77)=True and KLAWISZE=False
Print "dolna"
KLAWISZE=True
End If

If Key State(78)=True and KLAWISZE=False
Print "prawa"
KLAWISZE=True
End If

If Key State(79)=True and KLAWISZE=False
Print "lewa"
KLAWISZE=True
End If

Until Key State(69)

Ostatnia aktualizacja: 04.08.2021 19:53:13 przez mastaszek
1
[#189] Re: Tworzenie gier

@mastaszek, post #188

Nie wiedziałem, że do komendy KEYSTATE można dodać"="... noi nie wiedziałem, że tylda ma nr "0" ;] ale wstyd... zaraz spróbuję to zrobić


No działa. Dzięki jeszcze raz. Obsługa klawiatury już gotowa. Dźwięki dodane jako takie. Co do muzyki w tle to nie wiem czy dodawać. W oryginale nie było, a sam też raczej prędko nie ogarnę ProTrackera :/

Ostatnia aktualizacja: 04.08.2021 20:02:43 przez tukinem
2
[#190] Re: Tworzenie gier

@tukinem, post #189

link

Na ten deszczowy dzień wrzucam poprawioną wersję siatkówki.
- nowa grafika dzięki Don Rafito
- jeszcze bardziej zmniejszona grawitacjia
- dodana gra na dwóch joystickach
- dźwięk odbicia piłki

Co jeszcze można dodać



Ostatnia aktualizacja: 05.08.2021 16:20:00 przez tukinem
[#191] Re: Tworzenie gier

@tukinem, post #190

Co jeszcze można dodać


- lista highscore
- ekran tytułowy
[#192] Re: Tworzenie gier

@forge, post #191

Jaka lista highscore? :) 15 punktów max i wygrana lub przegrana
Próbowałem dodać max 3 razy odbicie na jednej połowie, ale niestety BOB COL przy wyskoku łapie kilka na raz więc to odpada, a po drugie niekiedy ciężko przebić piłkę w 3 odbiciach

Ekran tytułowy się doda, jeszcze jak ogarnę ProTracker to będzie muzyka w tle. No i gwizdek przy każdym rozpoczętym serwie.
[#193] Re: Tworzenie gier

@tukinem, post #190

Spróbowałem i w pewnym momencie wystąpił błąd. Piłka zatrzymała się na siatce , trzęsła się jak szalona a ja nie mogłem nic zrobić . Po wielu próbach udało mi się ją ruszyć i dalej było ok.
[#194] Re: Tworzenie gier

@djpiotrs, post #193

Czasem wiesza się na górze siatki. Jest tak, że gdy piłka spada i odbija się od górnej części, to ma lecieć dalej w tym samym kierunku X, ale ma się odbić do góry. Gdy niżej piłka się odbije od siatki, to wtedy zmienia się X, a dalej piłka ma spadać, Często jednak łapie ten punkt krytyczny i się wiesza. Wydaje mi się że to też problem Bob Col, bo piłka zmienia kierunek, jednak dalej występuje kolizja z siatką. Jeszcze tego całkiem nie opanowałem tak jak odbijania piłki przez zawodnika gdy się podskakuje. Wtedy piłka leci do góry, ale zawodnik również i Bob Col cały czas występuje, dopóki zawodnik nie zacznie opadać na dół.
[#195] Re: Tworzenie gier

@tukinem, post #194

Do tego problemu Trzeba podejść tak: być może tak zrobiłeś , nie wiem
siatka=1
if siatka=1
if bob col()
xpiłka=1:siatka=0
end if
end if
zmienna siatka kontroluje wykrywanie kolizji , w którejś tam innej pętli zainicjuj zmienną siatka na 1 by ponownie wykryć zdarzenie kolizji z siatką przez komendę bob col() np. po odbiciu przez któryś z graczy.
[#196] Re: Tworzenie gier

@djpiotrs, post #195

Tak będzie to samo?
SIATKA=1
IF SIATKA=1 AND BOB COL(10,11to11)=-1 '10 to umnie pilka a 11 to siatka
XPILKA=1 : SIATKA=0
END IF

dobrze rozumuję?

A zamiast SIATKA=1 można napisać:
IF BOB COL(10,11 TO 11)=0 THEN SIATKA=1

Wtedy powinno gdy już piłka nie będzie dotykać siatki to zmienna wróci do pozycji wyjściowej i będzie przygotowana do kolejnej kolizji tak?

Ostatnia aktualizacja: 05.08.2021 21:55:35 przez tukinem

Ostatnia aktualizacja: 05.08.2021 21:56:08 przez tukinem
[#197] Re: Tworzenie gier

@tukinem, post #192

Próbowałem dodać max 3 razy odbicie na jednej połowie, ale niestety BOB COL przy wyskoku łapie kilka na raz więc to odpada, a po drugie niekiedy ciężko przebić piłkę w 3 odbiciach


No to zrób może tak, że jak skaczesz to ustawiasz SKOK=1 i resetujesz licznik odbić.
Jak wykryjesz kolizję z piłką i SKOK wciąż jest równy 1 to SKOK=0 i zwiększasz licznik odbić.
Jak doliczysz do 3 to punkt dla przeciwnika i reset piłki.

Zmienna SKOK i liczniki osobno dla każdego gracza. Gdy resetujesz piłkę to resetujesz liczniki. Gdy licznik u jednego gracza przechodzi z 0 na 1, resetujesz licznik drugiemu graczowi.

Ostatnia aktualizacja: 06.08.2021 07:44:41 przez teh_KaiN
[#198] Re: Tworzenie gier

@teh_KaiN, post #197

link
Poprawiłem odbijanie od siatki i jest lepiej. Co do 3 odbić przez zawodnika to niezbyt fajnie to wychodzi w praniu. Działać działa, ale źle się tak gra. W kodzie to mam zawarte, ale wyremowałem to. Dodałem gwizdek przy "serwowaniu", ale wszystkie dźwięki w Amosie odgrywają się zbyt nisko tak jakby obniżało częstotliwość próbki dźwięku. Próbowałem GoldWave i Adobe Audition (dawny Cool Edit 2000). Zawsze w windows działa dobrze, a Amos odgrywa obniżony dźwięk. Mniejsza z tym. Mam pomysł na kolejny projekt, lecz bez Waszej pomocy nie obejdzie się.
[url=]link[/url]
Pozgrywałem grafikę, sterowanie chłopkiem jest już zrobione, boby z grafiki starałem się robić jak najmniejszych rozmiarów (tzn. jak już widziałem że grafika się powtarza to przycinałem). Problem w tym, że nie wiem jak się za to zabrać.
Samej "trawy" będzie sporo i tyle bobów naraz tworzyć to mija się z celem a może nawet braknąć numeracji.
Komenda PASTE BOB odpada, bo to wkleja jedynie w bitmapę. Chyba że połączyć to z jakimiś funkcjami.
Więc teraz tak:
1) Poprzez tablicę dwuwymiarową można by tak zrobić, ale to nie Sokoban i tu niekiedy każdy piksel to osobne dane więc tablica byłaby wielka, zczytywanie jej może być długie
2) Użycie ZONE. I myślę, że to będzie chyba najlepsze rozwiązanie

Teraz tylko jak rysować poziomy na podstawie ZONE?
Co do fizyki gry, to zamiast BOB COL trzeba będzie sprawdzać, czy chłopek znajduje się w ZONE? Dobrze rozumuję?

A i jeśli to jedyne wyjście, to ile takich ZONów można stworzyć? Bo np. myślałem że drabinka to będzie jeden Zone, druga drabinka to ZONE2, każda "trawka" to osobny ZONE itd itd. Niby prosta gierka, ale szczerze to te plansze są rozbudowane jak się je rozkłada na czynniki pierwsze.
[#199] Re: Tworzenie gier

@tukinem, post #198

A sprawdzenie jaki kolor jest poniżej? Zielony to coś a niebieski + joyUp to drabina...?

Dawno Amosa nie dotykałem, ale...
[#200] Re: Tworzenie gier

@Paul, post #199

a da się tak?
Zacząłem tworzyć planszę i zony, ale coś mi tu nie gra.
Stworzyłem pierwszego zona. Wszedłem w niego postacią i wykryło go. Stworzyłem później drugiego. Drugiego wykrywa, ale już pierwszego nie :/
Zrobiłem to tak:
RESERVE ZONE 1
SET ZONE 1,wymiary
RESERVE ZONE 2
SET ZONE 2,wymiary
BOB 1,X,Y,1
PRINT AT(wspolrzedne);ZONE(X,Y)

Albo wyskakuje zone 2 albo wcale, a gdy usunę zone 2, to wtedy zaskakuje zone 1
[#201] Re: Tworzenie gier

@Paul, post #199

Próbuję to ugryźć lecz mi nic nie wychodzi. Jak mam wczytać nr koloru w miejscu konkretnych współrzędnych? Siedzę z książką z Amosa i mi nic nie przychodzi do głowy. COLOUR(1) wyświetli nr koloru z rejestru, ale jak wyświetlić nr koloru w miejscu (X,Y)? XSCREEN i XHARD raczej nie.
[#202] Re: Tworzenie gier

@tukinem, post #198

Nie wiem jak to AMOS ma zorganizowane, ale boby na Amidze mi się kojarzą z ruchomymi obiektami - są z reguły co klatkę zamazywane tłem na starej pozycji i rysowane na nowej.

To co chcesz tu zrobić to narysować tło raz i mieć tylko to co się rusza jako boby (ludek i pociski). Wszystko inne rysowane raz na bitmapie tła i zamazywane wg potrzeby (np jak znajdziesz znajdźkę to ją zamazujesz).



Ta gra mimo "płynnych" wysokościowo platform jest oparta o kafle, tutaj na skrinie jest to 16x16 bo jest to wyskalowane w górę. Trzymasz sobie na boku numer rodzaju kafla w dwuwymiarowej tablicy. Jak spojrzysz na dół mojego skrina, to idąc z płaskiej ziemi pod górkę sprawdzasz na którym rodzaju kafla jesteś. Jak na takim co jest w 1/4 do góry to ustawiasz wysokość gracza na y-4px, w 2/4 drogi y-8px, w 3/4 y-12px a na samej górce y-16px, itd.

Rozbij problem na mniejsze problemy. Najpierw zrób chodzenie po nierównym terenie. Potem dorób do tego skok. Potem dopiero drabiny a potem skakanie po platformach.

Może takie coś będzie łatwiej skumać: jak ludek idzie to sprawdzasz rodzaj kafla na który wchodzisz. Potem, na boku wiążesz rodzaj kafla z wysokością terenu (taki co ma teren równo z górną krawędzią ma wysokość 0, taki co trochę wystaje ma 4, itd.). Jeśli delta między obecnym kaflem z którego wchodzisz a nowym jest mniejsza od jakiegoś progu (np. 16px) to zezwalasz na ruch i aktualizujesz pozycję x. Jak nie to nie zmieniasz x.

Ostatnia aktualizacja: 07.08.2021 22:27:40 przez teh_KaiN
[#203] Re: Tworzenie gier

@teh_KaiN, post #202

To mogę zrobić w tablicy kafle w których ziemia jest prosta, idzie w górę lub w dół oraz takie w których jest ziemia z początkiem drabinki tak? To wtedy bym pozmieniał trochę grafikę ale miałoby to jakiś sens. Z drugiej strony jak wszedłem w edytor poziomów w tej grze to tam można naprawdę niekiedy co piksel wkleić grafikę. To wczytywanie kolorów byłoby prostsze ale w Amosie jest chyba nierealne.
[#204] Re: Tworzenie gier

@tukinem, post #203

A dokładnie które elementy się będą poruszać/ruszać na ekranie?
[#205] Re: Tworzenie gier

@mastaszek, post #204

W pierwszym levelu tylko chlopek i jeden piksel który się przemieszcza ruchem jednostajnym. Gdy wpada w x bob lub y bob to leci w jego stronę i trzeba uciekać. Czyli 2 boby na ekran. Reszta jest nieruchoma. Ale ta podłoga jest bardziej złożona niż myślałem. Od lewe na dole licząc: raz się podnosi co 5 pikseli, a co 10 pikseli opada. A potem odwrotnie.
[#206] Re: Tworzenie gier

@teh_KaiN, post #202

Policzyłem te kratki na Twoim screenie i myślę dało mi to do myślenia. Tablica 40x23 (liczyłem na ekranie telefonu) do tego kilka opcji wysokości trawy + trawa z drabinką, sama drabinka, liana do wspinania oraz lina do zjeżdżania. Myślę że to już jest do zrobienia. Martwi mnie czy potem nie trafię na jakiś poziom do zrobienia w którym mi braknie pomysłów bo w edytorze w tej grze można naprawdę wiele. Po Sokobanie też się przeliczyłem bo w niektórych poziomach były paczki od razu ustawione w polach docelowych ale już odpuściłem sobie gmatwanie tego.
[#207] Re: Tworzenie gier

@tukinem, post #206

Nigdy nie używałem Zone. Poniżej jak ja bym to zrobił. Podobnie jak Kain zasugerował, tylko że kafle wielkości 1x1 pix :)

- ustawiasz Dual Playfield: ekran drugoplanowy 8 kolorów, ekran pierwszoplanowy 4 kolory (3+przezroczysty), ekran pierwszoplanowy w trybie Double Buffer i Autoback 0 (<ważne!). Ekran drugoplanowy może być bez buforowania.
- wczytujesz obrazek IFF z tłem (tym co się nie rusza, czyli podłogi, drabinki, liny) na drugi plan
- robisz wielką tablicę na piksele (taką jaka na kafelki). Nie robisz tablicy DIM, tylko rezerwujesz BANK o rozmiarze 320x200, czyli 64000 bajtów: Reserve as Work 8, 64000 : POCZATEKBANKU=Start(8)
- kopiujesz zawartość ekranu (aktualnie iff z tłem) do BANKU (POINT (x,y) po obrazku i POKE do banku)

GłównaPętla: (samo rysowanie)
- rysuje głównego bohatera jako sprite

OD TERAZ DZIAŁASZ TYLKO NA EKRANIE PIERWSZOPLANOWYM

- odczytujesz z BANKU za pomocą PEEK 4 'piksele', te narożne, wokół spritea
- w zależności jakie kolory odczytasz, wiesz z czym sprajt się styka
- rysujesz obiekty RUCHOME na pierwszym planie (w buforze), ale NIE jako boby, tylko PASTE BOB w dowolnych pozycjach na ekranie. Pamiętaj, żeby boby wcześniej powycinać z ekranu 4 kolorowego.
- przy PASTE BOB sprawdzasz czy pozycje boba nie nachodzą na współrzędne sprajta (jeśli tak to kolizja)
- po narysowaniu wszystkich PASTE BOBów kopiujesz ekran logiczny do fizycznego ekranu pierwszoplanowego: Screen Copy logic(ekran) to physic(ekran) <<< to zamiast Screen Swap. Użyj Wait Vbl, żeby nie migało
- czyścisz ekran logiczny pierwszego planu

... i tak w kółko..

.... goto GłównaPętla


- na końcu programu Erase All, żeby zwolnić banki z pamięci

Ostatnia aktualizacja: 07.08.2021 23:30:32 przez mastaszek
[#208] Re: Tworzenie gier

@mastaszek, post #207

Czarna magia :) spróbuję jutro to jakoś zacząć ale widzę mnóstwo komend których nigdy nie używałem i będę musiał o nich poczytać. Swoją drogą na ekranie drugoplanowym (8-kolorowym) będę coś wykonywać? Bo tu z opisu widzę, że wszystko dzieje się na ekranie pierwszoplanowym.
[#209] Re: Tworzenie gier

@tukinem, post #208

Zgadza się. Ekran drugoplanowy ładujesz tylko raz obrazkiem IFF z tłem.

Masz książkę "Amos Pro w praktyce"? Tam poczytasz o tym co pisałem wyżej. Na końcu książki jest alfabetyczny spis rozkazów amosa. Poszukaj wymienione wyżej rozkazy i poczytaj o nich.
[#210] Re: Tworzenie gier

@mastaszek, post #209


Takie krzaczki mi wychodzą. Coś robię chyba nie tak.

Screen Open 1,320,256,8,Lowres
Hide On
Curs Off : Flash Off
Load Iff "level1"
Screen Open 0,320,256,4,Lowres
Curs Off : Flash Off
Dual Playfield 1,0
Double Buffer
Autoback 0

Do
Loop

Ostatnia aktualizacja: 08.08.2021 11:01:06 przez tukinem

Ostatnia aktualizacja: 08.08.2021 11:01:13 przez tukinem
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem