kategoria: AMOS
[#1] Gra w Amosie
Witam.

Znalazlem troche wolnego czasu wczoraj i postanowilem pobawic sie troche Amosem.
Z gory chcialbym zaznaczyc ze nie jestem zadnym programista i wszelkie sugestie typu: `czemu Amos?`, `odpal C++`, `Amos jest tragiczny itp` beda niepotrzebne w tym watku. Amos to jedyna i niepodwarzalna opcja dla mnie. I wszystko co w nim robie jest tylko i wylacznie dla zabawy.

Ale do rzeczy: wczoraj zrobilem sobie taka prosta gierke, a raczej 20% gry, wyglada nastepujaco:
Filmik

Do animacji bohatera uzylem AMALa, potwory sa sprite`ami, a diamenty, mur itp sa bobami. Mam problem z kolizja sprite`a (bohatera) z bobem (murem). Usuwac boby przy kolizji dodajac na przyklad do tego kolejne opcje mam opanowane jak widac na filmiku - diamenty sie zbieraja, usuwaja z ekranu itp. Ale mam problem z bobem ktory ma zostac na planszy i ma mnie z niego wybijac, czyli na takiego na ktorego nie mozna najechac. Na dole sa dwa boby, dwa mury. Jak zrobic zeby najezdzajac na ten mur bohaterem wybijalo mnie z niego tak jak zrobilem to przy krawedziach ekranu, ze bohater nie wychodzi za niego tylko go odrzuca z powrotem? Poki co to przez ten mur normalnie przechodzi :)
[#2] Re: Gra w Amosie

@sordan, post #1

By wybijać bohatera w kontakcie z bobem, musiałbyś wiedzieć jaki ruch (dół, góra, lewo, prawo) był wykonany prze bohatera, gdy doszło do kolizji z bobem. Załóżmy, że masz bohatera w i idziesz nim w dół i zachodzi kolizja z murem-bobem. wtedy musisz zmniejszyć pozycję y by uzyskać wybicie. Oczywiście gdy idziesz w innym kierunku musisz podjąć odpowiednio stosowne kroki, które to są zależne właśnie od kierunku. Trzeba by też uwzględnić sytuację gdy idziesz na ukos.

Warto się zastanowić czy boby jako mur są w tym przypadku konieczne. Zamiast nich można użyć tilesów, czyli kostek na przykład 16x16, które pozwolą tworzyć bardziej skomplikowane plansze. Wtedy to trzeba obliczać pozycje bohatera na planszy (która jest tablicą dwuwymiarową) i podejmować odpowiednie działanie - ale to w kilku zdaniach nie da się tak łatwo wytłumaczyć. Daj znak czy jesteś zainteresowany takim podejściem, to wtedy więcej napiszę.
[#3] Re: Gra w Amosie

@sordan, post #1

No całkiem zgrabnie jak na początek- powodzenia OK
[#4] Re: Gra w Amosie

@asman, post #2

Dzieki wielkie za odpowiedz. Zainteresowany bylbym jak najbardziej tylko, ze jak juz wczesniej wspominalem programista nie jestem i wszystko nawet w Amosie idzie mi bardzo opornie wiec istnieje niestety potencjalna szansa, ze tlumaczac mi jak uzyc tilesow zmarnujesz swoj cenny czas bo nie zrozumiem dokladnie o co biega i nie bede w stanie tego wykorzystac w programie. Jesli masz troche wiecej czasu to byloby super, ale jesli masz go malo to lepiej nie ryzykowac, sprobuje cos poszukac w ksiazkach do Amosa, ktore mam.
[#5] Re: Gra w Amosie

@sordan, post #1

Początek imponujący, trzymam kciuki by wytrwałości starczyło. OK
[#6] Re: Gra w Amosie

@sordan, post #1

"Jak zrobic zeby najezdzajac na ten mur bohaterem wybijalo mnie z niego tak jak zrobilem to przy krawedziach ekranu..."

No a jak zrobiles to przy krawedziach ekranu...?

Ogolnie raczej mury itp. rzeczy powinny byc zwykla grafika a nie bobem czy spritem. Nie ma mozliwosci wykrycia kolizji boba i grafiki wiec wtedy trzeba kombinowac.
Wklej czesc kodu odpowiedzialnego za wykrywanie kolizji bobow, moze sie cos wykombinuje.
[#7] Re: Gra w Amosie

@selur, post #6

Jako, ze bohater jest animowany AMALem przy poruszaniu nim to tam zrobilem kolizje jesli chodzi o krawedzie ekranu, wyglada to tak:
(labele M,N,O,P sa odpowiedzialne za wybijanie z krawedzi ekranu, reszta to kod do sterowania bohatera z joysticka).


BEGIN:
A$="Begin:"
   A$=A$+"If X<8 Jump M"
   A$=A$+"If X>307 Jump N"
   A$=A$+"If Y<38 Jump O"
   A$=A$+"If Y>237 Jump P"
   A$=A$+"If J1=8 Jump Right;"
   A$=A$+"If J1=1 Jump Up;"
   A$=A$+"If J1=2 Jump Down;"
   A$=A$+"If J1=4 Jump Left;"
   A$=A$+"Jump Begin ;"
   A$=A$+"Up: Anim 1,(4,4)(5,4) ; Move 0,-4,7 ; Jump Begin"
   A$=A$+"Down: Anim 1,(4,4)(5,4) ; Move 0,4,7 ; Jump Begin"
   A$=A$+"Left: Anim 1,(6,4)(7,4)(8,4) ; Move -4,0,7 ; Jump Begin"
   A$=A$+"Right: Anim 1,(1,4)(2,4)(3,4) ; Move 4,0,7 ; Jump Begin"
   A$=A$+"M:Let X=8 ; Jump Begin"
   A$=A$+"N:Let X=307 ; Jump Begin"
   A$=A$+"O:Let Y=38 ; Jump Begin"
   A$=A$+"P:Let Y=237 ; Jump Begin"
   A$=A$+"Jump Begin ;"


Kolizja z diamentami wyglada tak: (narazie tak tylko zrobilem, pozniej dodam jeszcze punktacje za diamenty):

If Bob Col(13) Then Bell : Bob Off 13 : Bell



A kolizja z potworami tak: (oczywiscie to tez sie zmieni w pozniejszym etapie, na to ze bohater zniknie i straci zycie a nie potwor :)).

If Spritebob Col(2) Then Boom : Sprite Off 2



Teoretycznie mozna byloby kolizje z murami podobnie zrobic jak wyzej zrobilem to w AMALu z krawedziami ekranu, jesli oczywiscie dalej mury mialy by byc bobami, ale bedzie to troche zmudna robota. Jak wspominal asman trzeba byloby z kazdej mozliwej strony z joysticka ustawic kolizje na kazdym jednym murze. Na krawedziach bylo prosto dlatego ze na przyklad wyjsc po za prawa krawedz ekranu bohaterem mozna tylko i wylacznie idac w prawo. Stad tez moje pytanie tutaj bo mialem nadzieje, ze istnieje jakis szybszy i prostszy sposob na kolizje z murem.



Ostatnia aktualizacja: 10.04.2015 20:16:49 przez sordan
[#8] Re: Gra w Amosie

@sordan, post #7

Dobrze rozwiazales kolizje z krancami ekranu w amalu, ale niestety na tym raczej koniec. W taki sposob da sie tylko oznaczyc obszar jednego prostokata, a w tym wypadku rysujesz juz drugi prostokat (znaczy te nowe murki) w srodku pierwszego, wiec musialo by byc zbyt duzo warunkow dotyczacych tego nowego murku.


Sprobuj uzyc do tego funkcji Zone i zamien sprajta ludzika na boba, czyli tak:
najpierw rysujesz ten dodatkowy murek na ekran funkcja Paste Bob a pozniej stawiasz dokladnie w tym miejscu "strefe"
Paste Bob 140,160, 10 (np. 10 to obraz tego murka w banku bobow)
reserve zone [1] rezerwujesz jedna strefe
set zone 1, 140,160 to 156, 237 stawiasz aktywna strefe nr 1 na ekranie o wspolrzednych np. 140,160

teraz petla glowna
PETLA:
odczytujesz wspolrzedne twojego ludzika (np. bedzie to bob numer 3)
wspl_x= x bob(3)
wspl_y= y bob(3)

i teraz kolizja boba ze strefa

strefa=zone (wspl_x,wspl_y) odczytanie strefy


if strefa=1 then Bob 3,150,100,obraz ludzika po wejsciu w strefe np. teleportuje ludzika do punktu 150,100

a tu umieszczasz kolejne kolizje
If Bob Col(13) Then Bell : Bob Off 13 : Bell
If Bob Col(13) Then Bell : Bob Off 13 : Bell
itd...
Goto PETLA
[#9] Re: Gra w Amosie

@selur, post #8

Dzieki za odpowiedz. Nie wpadlem na to z tymi zonami, a to faktycznie moze byc bardzo dobry pomysl. Jak bedzie 10 murow kolo siebie, to mozna ustawic jedna zone-prostokat i za jednym zamachem zrobic kolizje dla calego obszaru. Po za tym mury moge juz malowac w PPaincie i wczytac jako normalna grafike zamiast wstawiac bob za bobem.

Tylko nie do konca jeszcze rozumiem tego `teleportu`. Przykladowo mam set zone ustawione na 150,100 i jak wjade na ta zone bohaterem to wybije mnie do punktu 150,100, ale co jak najade na mur z innej strony? To wtedy tez mnie przeniesie do punkty 150,100? Czy cos zle zrozumialem? Tak czy owak zone mam jako tako opanowane to jutro sie tym pobawie i metoda prob i bledow troche podzialam. Dzisiaj niestety juz nie znajde czasu. Jak bede mial jakies problemy to dam znac.

Ostatnia aktualizacja: 10.04.2015 21:47:20 przez sordan
[#10] Re: Gra w Amosie

@sordan, post #9

Może zapamiętuj ostatnia pozycje ludzika przed ruchem i przywracaj ją przy wystąpieniu kolizji?

Ostatnia aktualizacja: 10.04.2015 21:53:33 przez sanjyuubi
[#11] Re: Gra w Amosie

@sordan, post #9

Ten teleport to ja sobie tak wydumalem, zeby pokazac jak to w ogole dziala (jak ludzik wejdzie do strefy 1 z obojetnie jakiego kierunku to przeniesie go do punktu 150,100).
Tak naprawde strefa to prostokat na ekranie, ktory wykrywa czy jakies wspolrzedne X i Y (np. w tym wypadku obiektu) naleza do niego czy nie. Czyli mozesz sprawdzic czy np. Bob wszedl do jakiejs "strefy" czy nie. Nie ma znaczenia skad obiekt wszedl liczy sie tylko fakt ze te wspolrzedne X,Y sa juz w strefie N badz nie sa.

Problem polega na tym, ze musisz "wejsc" do strefy wspolrzednymi tego obiektu zeby to zostalo wykryte, czyli w sumie odwrotnie do tego co chcesz zrobic (bo obiekt nie ma wchodzc na murek), ale wlasnie na tym polega sztuka, zeby to tak zaprogramowac aby "nie wpuszczac" obiektu do strefy.
Np. mozna zrobic to tak, zapamietujesz gdzies w zmiennej w jakim kierunku idziesz.

Jesli idziesz w prawo a strefa jest przed toba, to zeby sprawdzic czy ludzik za chwile uderzy w strefe robisz np. tak:

strefa=zone (wspl_x+10 ,wspl_y)

If kierunek_ruchu=PRAWO and strefa=1 then ZATRZYMAJ BOBA

Czyli sprawdzasz kierunek czy obiekt idzie w prawo i aktualne wspolrzedne obiektu plus 10 pikseli na prawo (moze byc mniej w zaleznosci od szerokosci ludzika)
Analogicznie: jesli idziesz w lewo to sprawdzasz czy przed soba z lewej strony nie masz strefy (murku) wspl_x-10 , jesli w gore to wspl_y-10 a w dol wspl_y+10.
[#12] Re: Gra w Amosie

@sordan, post #7

A mógłbyś udostępnić cały kod gry. Z chęcią bym się z niego pouczył AMOSA. Pozdrawiam
Piotr
[#13] Re: Gra w Amosie

@sordan, post #1

Wygląda ciekawie, jeszcze pewnie dużo jest do zrobienia, ale mam nadzieję i będę trzymał kciuki żeby się udało :)
[#14] Re: Gra w Amosie

@chicago, post #12

Ja to bym nie nazwal tego nawet kodem. Panuje tam totalny bajzel (material srednio nadajacy sie do nauki) poki co i raczej ta gre traktuje jako cwiczenia i przede wszystkim jako zabawe. Nie mam nawet zadnej koncepcji jakby ta gra miala finalnie wygladac. Poki co sprawdzam w niej co potrafie, a z czym mam jeszcze problemy. Teraz priorytetem jest ogarniecie kolizji z murami. Zastosowalem sie do wskazowek selura i ustawilem zony i cos tam ruszylo w tej kwestii, ale musze jeszcze to dopracowac. Mialem troche malo czasu w weekend, ale jutro postaram sie znowu tym pobawic.
[#15] Re: Gra w Amosie

@selur, post #11

Dzieki wielkie selur. Skorzystalem z twojej cennej rady z zonami i w koncu opanowalem kolizje z murami, ciesze sie jak dziecko :) Dodalem jeszcze otwieranie drzwi kluczami. Grafika nie powala, ale niestety lepszej stworzyc nie potrafie. Poki co wyglada to tak:
Filmik
[#16] Re: Gra w Amosie

@sordan, post #15

Good Job OK
[#17] Re: Gra w Amosie

@sordan, post #15

Puki co już wygląda i działa, to sporo, a nawet bardzo dużo. OK
[#18] Re: Gra w Amosie

@sordan, post #15

Dla mnie rewelacja :) też bym się cieszył jak bym coś takiego stworzył
[#19] Re: Gra w Amosie

@sordan, post #1

Musisz miec zmienna dx i dy czyli x=x+dx,y=y+dx zaleznie gdzie masz kolizje to dajesz dx=0 albo dy=0 zeby to dzialalo musisz jeszcze sprawdzic w ktora strone masz joya.

Ostatnia aktualizacja: 13.04.2015 15:03:01 przez SzaryWilk
[#20] Re: Gra w Amosie

@sordan, post #15

Fajnie, że pokazałeś niedowiarkom, że Amos potrafi mile zaskoczyć jeśli chodzi o rezultaty i długość kodu. BTW dobra robota. Mając tę wiedzę, której wykorzystanie pokazałeś możesz zrobić klony 70% gier z C64, małego Atari, NESa i innych sprzętów 8bit na Amigę :D
[#21] Re: Gra w Amosie

@pong777, post #20

O to świetny pomysł!
Fajny był by klon "Misji", "Hansa Klosa" czy "Mieczy Valgira"
[#22] Re: Gra w Amosie

@Kamikadze, post #21

Sam o Hansie kiedyś myślałem ale z prawdziwym Gestapo, SS-Manami a nie jakimiś robocikami ;) dodatkowo fajnie by było połączyć elementy przygodowe, zagadki (na wysokim poziomie i pełną gębą) z platformówką zręcznościową.

Co prawda mamy już Wolda 3D ale nie mamy 2D.

Do bunkra może jak najbardziej schodzić w głąb na coraz niższe poziomy aż do samego pana, którego imię zaczyna się na "A".

Można wrzucić jeszcze wątek historyczny tak aby gracz mógł co nieco dowiedzieć się o realiach tamtego czasu, poznać kto był kim - elitę III Rzeszy itd.

Ostatnia aktualizacja: 13.04.2015 17:29:14 przez pong777
[#23] Re: Gra w Amosie

@pong777, post #22

O ho ho, Widzę, że tym Klosem trafiłem w punkt zainteresowań. :D
[#24] Re: Gra w Amosie

@Kamikadze, post #23

To róbmy wspólnie klona Hansa. Może ktoś zrobi pikselowe szkice koncepcyjne? Postać, bunkier, hitlerowiec, windy, pułapki itd? Jak będzie aprobata społeczności założę nowy wątek w odpowiednim dziale.
[#25] Re: Gra w Amosie

@pong777, post #24

To mi sie podoba :) Czym wiecej projektow tym lepiej. Trzymam kciuki.
[#26] Re: Gra w Amosie

@sordan, post #25

Już chwilę po głowie chodził mi pomysł aby zrobić wspólnymi siłami remake czegoś, co istniało już wcześniej, co znamy mniej więcej wszyscy (a jak nie to Youtube) bo tak będzie łatwiej. Chętni dodadzą cegiełkę od siebie i może coś z tego wyjdzie...
[#27] Re: Gra w Amosie

@pong777, post #26

Brzmi nie źle, Chętnie w to wejdę gdy skończę z tą A600.
[#28] Re: Gra w Amosie

@sordan, post #15

Niezła robota. OK Ja nie mam tyle cierpliwości.
Powodzenia
[#29] Re: Gra w Amosie

@sordan, post #15

OK
[#30] Re: Gra w Amosie

@Kamikadze, post #27

Zatem do dziela OK

Ja mam nawet koncept ekranu tytulowego do gry:
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