kategoria: AMOS
[#301] Re: Tworzenie gier

@selur, post #296

Działa :) Nie zmieniałem nazw swoich zmiennych oraz nie zmieniałem sposobu przeliczania.
for i=1 to kroki
Bob 10,xp,yp,nr
Bob Update
wait vbl
xp=xp+ksx
yp=yp+ksy
next i

Tej pętli również nie zastosowałem, bo nie wiem, czy for...next nie spowalniałoby gry, lub nie zatrzymywało na czaso przeliczania pętli... chociaż dużo tu liczenia nie ma, ale chyba zablokowałoby na chwilę ruch czołgiem. Brakowało mi tej opcji właśnie BOB OFF. Zamiast tego używałem komendy BOB CLEAR, co robiło mi dziadostwo. Teraz znika murek bez żadnych cudów na ekranie.
Zastanawiam się, czy dodawać opcję ukrywania pod "trawą" czołgu, czy po prostu zabrać się za sztuczną inteligencję komputera :) z tym już nie mam żadnego pomysłu jak zrobić komputerowy czołg. Czy jechać na komendach RND, żeby były różne ruchy komputera? No i chyba te wszystkie warunki jazdy i strzelania będę musiał przekopiować ze zmiennymi dla drugiego czołgu.
[#302] Re: Tworzenie gier

@mastaszek, post #282

Dzięki za podanie tej komendy CLS ze współrzędnymi. Użyłem jej do Jumpmana do zmazywania bonusów z planszy. Zrobiłem to w podwójnej pętli FOR...NEXT, które sprawdzają kolor we współrzędnych przy Sprite'cie chłopka. Pod sprawdzeniem jest właśnie komenda CLS wraz ze współrzędnymi do zmazywania. No i oczywiście aktualizacja banku pamięci komendą POKE, żeby 2 razy nie naliczał punktów przy wejściu w dany obszar. Tu jest link do ADFa.
link
Szczerze, to szybciej działa zamazywanie bonusu, niż samo chodzenie chłopkiem. Do płynności trzeba procesor 68000 z taktowaniem 28MHz minimum.
1
[#303] Re: Tworzenie gier

@tukinem, post #302

Ilu kolorowy masz ekran w Jumpie? Podeślij kod
[#304] Re: Tworzenie gier

@mastaszek, post #303

Popołudniu Ci wyślę. Ty mi go pisałeś bo tam jest Double Buffer i Dual Playfield. Jest też Dual Priority ale i bez niej działa dobrze. Trzeba dawać szybszy procesor. Jeden ekran ma 4 kolory a drugi chyba 8 z tego co pamiętam. On wolno chodzi przez sprawdzanie punktów na obrzeżach boba jak kolor się znajduje a kilka tych punktów jest bo 4 rogi środek boki i chyba głowa z tego co pamiętam. Wyślę Ci popołudniu.
[#305] Re: Tworzenie gier

@tukinem, post #304

A przed każdym sprawdzeniem kompilujesz kod? Czy lecisz na interpreterze?
[#306] Re: Tworzenie gier

@tukinem, post #304

Właśnie zobaczyłem oryginał Jumpmana. Myślałem wcześniej, że tam będzie się więcej obiektów ruszać/animować. Przy tym co widzę, to można zupełnie zrezygnować z Dual Playfield. Wszystko robić na jednym ekranie. Sorry, że namieszałem. No, przynajmniej wiesz już jak działa Dual Playfield - przyda się na przyszłość, choćby żeby zrobić przykrywającą trawę w Czołgach :) Jak podeślesz kod, to spróbuję podpowiedzieć gdzie można go przyspieszyć.
[#307] Re: Tworzenie gier

@mastaszek, post #306

Fakt przykrywanie trawy mozna zrobic na Dual Playfield ale wuja selur "dobra rada" mowi:
ODPUSCIC przykrywanie trawa w Amosie, bo to mordega. AMOS sie do takich rzeczy nie nadaje szeroki uśmiech
jedynym sensownym sposobem bedzie przykrywanie boba bobem (no ale ze.... Bob Boba? fujjj) w miejscu gdzie czolg najedzie na trawe, czasochlonne i trudne do napisania. Trzeba napisac kilkanascie warunkow czy czolg wjezdza na trawe i czy z niej wyjezdza...itp.. Lepiej skupic sie na predkosci dzialania i prostocie gry czyli gameplayu wlasciwym a nie bajerach, ktore za wiele nie pomoga.

co do A.I. czolgow komputera RND tak ale z gotowych schematow, czyli losuje jakis gotowy schemat zachowania czolgu.
Najlepiej spytac majstra teh_kaina, on juz to przerobil wiec bedzie mial wiecej do powiedzenia ok, racja

p.s.
nie pisz 10 gier, tylko napisz 1 ale porzadna OK
[#308] Re: Tworzenie gier

@selur, post #307

czuję się wywołany do tablicy więc odpowiem jak to działało w OpenFire. Będę pisał mocno ogólnie, bo jak nie teraz to może się to przydać później. Prawdopodobnie będzie Ci potrzebna tylko jedna wskazówka albo dwie z tych nastu poniżej. ;)

- widok z góry, ruch mam w 128 możliwych kątach, bardzo mocno to możesz uprościć jak masz tylko 4 kąty (lewo-prawo-góra-dół)
- każda mapa ma węzły po których czołg potencjalnie może jeździć - np. skrzyżowania dróg, punkty zakrętowe itd. Trasowanie to było wyznaczenie trasy między węzłami.
- każdy węzeł musi pamiętać z którymi węzłami się łączy. To Ci pozwala zamodelować omijanie ścian, jeziorek, czegokolwiek.
- jak masz niszczejący teren (np. mury które można rozwalić) to to powinno dodawać nowe węzły żeby AI mogło trasować po nowych skrótach
- na tak przygotowane dane wrzucasz jakikolwiek algorytm trasowania, np. A* - trochę mordęgi z napisaniem tego jest, ale warto.
- samo trasowanie mam napisane tak, że nie ustala całej nowej trasy jak jej potrzebuje, tylko jedna klatka gry liczy to przez max 2ms i wraca do tego w kolejnej jak trzeba. Dzięki temu gra się nie zacina bo AI sobie musi coś policzyć.
- strzelanie do przeciwników to nic innego jak sprawdzanie czy na obecnej pozycji przeciwnik znajduje się odpowiednio blisko. I teraz, zależnie czy wieżyczka jest sterowana niezależnie od podwozia albo nie przerywasz ruchu i strzelasz do gracza, albo zatrzymujesz się, celujesz i strzelasz.

Pojawia się też problem "uczciwości AI":
- kod można zorganizować tak że masz tam po prostu kilku graczy - część dostaje input z dżoja/klawy a część z AI
- AI wypracowuje sterowanie kierunkami i fajerem na bazie tego co się dzieje na mapie. Dzięki temu przeciwnik gra co najwyżej tak dobrze jak bardzo dobry gracz
- pozostaje jeszcze kwestia zasięgu widzenia i znajomości tego co dzieje się na całej mapie, zwłaszcza jeśli jest ona scrollowana.
- tak jest zrobione AI w mojej grze germz, do tego stopnia że nawet zaznaczanie jednostek jest zrobione przez takie sztuczne machanie dżojem. AI wyznacza pozycje gdzie jest obecnie jego kursor na planszy, gdzie chce być i przy użyciu A* wyznacza najkrótszą drogę do machania.

Co do germzów, to tam się jeszcze pojawił problem ofensywności/defensywności AI. Zrobiłem to tak że bot robi i to i to: raz robi ruch ofensywny (puzcza najsilniejszy atak do najsłabszego przeciwnika) a raz defensywny (przerzuca do najsłabszego miejsca połowę jednostek z najsilniejszego sąsiada).

I tak, jedna gra na raz. Wiem że to cholernie trudne powstrzymać się przed robieniem paru rzeczy, zwłaszcza że te kolejne wydają się być ciekawsze, ale najpierw skończ jedno a potem bierz się za drugie. Sam mam z tym problem bo rozgrzebałem 4 gry i żadnej nie skończyłem tak na 100%, ale zanim wezmę się za kolejną to choćby skały defekowały to skończę jedną z zaczętych. ;)

EDYT: znalazłem dokumentację z projektu na studiach który zaliczyłem właśnie trasowaniem w OpenFire. Może to Ci coś pomoże. ;)

Ostatnia aktualizacja: 03.09.2021 12:55:35 przez teh_KaiN
2
[#309] Re: Tworzenie gier

@tukinem, post #304

Hej, przejrzałem kod Jumpmana. W ramach optymalizacji:

1) wywal dual playfield i wszystko z nim związane, czyli ekren pierwszoplanowy, dual priority. Niech wszystko się rozgrywa na jednym 8 kolorowym ekranie

2) jeśli robisz PEEK z tego samego miejsca, zrób to raz, a potem wykorzystuj wartość trzymaną w zmiennej, np.

Teraz masz (ilustracyjnie):

If peek(x)=3 and peek(y)=3 or peek(x)=0 and peek(y)=5 then...

Zrób:
wart1=peek(x)
wart2=peek(y)
If wart1=3 and wart2=3 or wart1=0 and wart2=5 then...

Czasami masz tak, że w kilku warunkach pod rząd robisz peek z tego samego miejsca wielokrotnie. Odczytaj peek tylko raz do zmiennej, a potem w warunkach sprawdzaj zmienną, a nie rób ponownie tego samego peek. Pamiętaj: peek jest wolniejszy niż odczytanie zmiennej

3) mnożenia są wolne. Wszędzie gdzie masz mnożenia, zastosuj czytanie z tablicy. Np zamiast wielokrotnie robić liczba*320, zrób sobie tablicę z mnożeniami i potem w pętli głównej zamiast mnożyć, czytaj z tablicy np. tablica_mnozenia_320(liczba)

4) zasada ogólna: wszystko co da się przeliczyć raz, trzeba przeliczyć raz i potem korzystać z wyniku. Nie przeliczamy tych samych rzeczy wielokrotnie, a już na pewno nie w głównej pętli.


Nie wiem na ile to pomoże, ale powinno być szybciej. No, chyba że już teraz to chodzi w 50 klatkach na sekundę, to szybciej już nie będzie :)

PS Co do Czołgów, to moim zdaniem zrobienie dualplayfield jest jedynym sensownym sposobem na 'przykrywającą' trawę. Tworzysz pierwszoplanowy 4 kolorowy ekran i RAZ rysujesz na nim trawę. Potem już zostawiasz ten ekran w spokoju, a cała akcja toczy się 'pod spodem' na 8 kolorowym ekranie drugoplanowym. Tym sposobem nie musisz nic robić w pętli głównej, a trawa będzie automatycznie przykrywać to co się pod nią znajdzie. Albo tak jak Selur radzi - olej tę trawę.

Ostatnia aktualizacja: 03.09.2021 22:30:45 przez mastaszek
[#310] Re: Tworzenie gier

@mastaszek, post #309

Jutro się zajmę Jumpmanem. Dzisiaj jeszcze kilka problemów rozwikłałem z fizyką gry i dodałem sprite'a kuli, która śmiga po planszy. Narazie, gdy wpadnie w X lub Y naszego chłopka to się zatrzymuje. Jutro dodam, żeby się kierowała w jego kierunku z dużą prędkością i tak, żeby trzeba było wtedy uciekać przed nią. Jeszcze tam mam problem z tym, że kiedy zjeżdża po linie (tej różowej) to można iść w bok, a nie powinno się dać. Zrobiłem zmienną "ZJAZD" i zablokowałem przemieszczanie się na boki podczas zjazdu, to zaś po zjeździe mam dalej zablokowane chodzenie na boki. Muszę to jutro rozwikłać. Jak zrobię tą fizykę i strzałę, żeby goniła naszego chłopka to wtedy zacznę pomału usuwać DUAL PLAYFIELD.

Co do czołgów to faktycznie nie ma sensu chować go pod trawą, chociaż taki sens właśnie miała trawa w orginalnej wersji na NESa. No trudno. To tylko gra w Amosie tworzona przez amatora :) jak ktoś będzie bardzo chciał, to podeślę kod i niech sobie sam kombinuje. Nie mam zamiaru tworzyć praw autorskich swoich projektów. Dla mnie programowanie to tylko zabawa a nie zarobek :)
[#311] Re: Tworzenie gier

@mastaszek, post #309

link
JUMPMAN
Wywaliłem DUAL PLAYFIELD. Wszystko kręci się na ekranie 8 kolorowym. Jest DOUBLE BUFFER i AUTOBACK 0.
Przy zbieraniu punktów zmienia się na AUTOBACK 1 do zmazywania punktu i zaraz wraca na AUTOBACK 0. Nie wiem, czy wszystkiego nie zrobić na AUTOBACK 1, ale póki co nie widzę problemu w tym. Szybkość gry daje trochę do myślenia. na 68000 7MHz chodzi skokowo wolno, na 14MHz już płynnie, ale na 28MHz chodzi z pełną płynnością. Dodałem zabijanie przez biały piksel. Trzeba go unikać. Teraz mam problem i to chyba będzie jeden z ostatnich problemów na tej planszy.
Zbierając punkt z lewego górnego rogu zamazuje go dobrze. Zbierając później punkt z prawego górnego rogu nie zamazuje go całkiem, lub wcale go nie łapie. Zbierając za to najpierw w odwrotnej kolejności dzieje się tak że zawsze z tym drugim jest problem. Dziwne, bo reszta punktów znika idealnie. Zawsze jest problem z jednym z tych narożnych na górze. W ADFie, którego wrzuciłem jest plik z kodem od razu. Może ktoś wpadnie na ten problem i go rozwikła? Dodam, że zamazywanie jest na końcu kodu oznaczone: REM PUNKTY. Nawet dodałem tam na czas zamazywania SPRITE OFF i SPRITE UPDATE, lecz dalej to samo.

Ostatnia aktualizacja: 04.09.2021 18:13:05 przez tukinem
[#312] Re: Tworzenie gier

@tukinem, post #311

link
Udało mi się :) za duży rozmiar zamazywania punktu był obrany i nie wiem czemu, ale gdy X był poniżej 0 to wjeżdżał na prawą stronę i kasował dane kolorów z pamięci z prawej strony. Zmniejszyłem trochę zakres pętli sprawdzającej kolory w buforze pamięci i teraz jest super :) niekiedy uda się samemu dojść do rozwiązania problemu
1
[#313] Re: Tworzenie gier

@tukinem, post #312

Witam.
Kolejny adf z dodanym drugim poziomem:
https://szybkiplik.pl/tZ3FUpn8xn
jeszcze w wolnej chwili muszę urozmaicić animację robotów z 2 poziomu.
Musiałem niestety trochę uszczuplić sprawdzanie znajdowania się drabinki w pobliżu naszego sprite'a, a przez to trzeba prawie idealnie wejść w drabinkę, by móc się na nią wspiąć, lub z niej zejść. W pierwszym poziomie piksel, który nas zabija, niekiedy wyjdzie poza planszę i już się nie pojawia, ale w oryginale też się czasem tak zdarzało.
Kto przetestuje, niech śmiało pisze w komentarzach, jak wrażenia :)
[#314] Re: Tworzenie gier

@tukinem, post #313

Witam.
Dodałem do Jumpmana nowe rzeczy.
Level 3 i 4
Zanikanie części poziomu 1, gdy zbierze się odpowiedni punkt (użyłem pierwszy raz komend ZONE)
Dokończyłem przemieszczanie robotów w levelu 2

Chyba to już was nie interesuje... szkoda. Wiem że to nie są gry pokroju Supercars AGA, czy Doom, Yoomp jak również wiem, że Amiga potrafi o wiele więcej, niż to co tworzę w Amosie (często z Waszą pomocą), ale myślę, że gry które staram się jakoś tworzyć na moje możliwości, są w miarę dobrze odwzorowane do oryginałów.

Zapodaję Wam ADF z Jumpmanam w obecnym stadium rozwoju:
https://szybkiplik.pl/7Z5976CYLY

Ostatnia aktualizacja: 15.09.2021 18:36:36 przez tukinem
3
[#315] Re: Tworzenie gier

@tukinem, post #314

spoko, interesuje interesuje, działaj dalej, śledzę wątek od początku i pewnie nie tylko ja :)
jak tylko bede miał możliwość to przetestuję, fajnie jak by te najnowsze wersje były w jednym miejscu ;)
1
[#316] Re: Tworzenie gier

@tukinem, post #314

Tak, nie spodziewaj się że co wersję będziesz miał 30 nowych postów. Czytamy, kibicujemy, tylko po cichu, wewnętrznie. ;)
2
[#317] Re: Tworzenie gier

@teh_KaiN, post #316

No to dobrze bo już myślałem że tworzę i wypisuję kolejne posty sam sobie. Wydawało mi się już że to wygląda jakbym był nachalny i na siłę próbował się przechwalać swoją amatorszczyzną :)
[#318] Re: Tworzenie gier

@tukinem, post #314

Interesuje, i nawet zagrałem raz czy dwa. Spadłem z platformy na dole w lewym dolnym rogu i na tym się skończyła gra, bo ludek zniknął i cześć.
[#319] Re: Tworzenie gier

@mastaszek, post #306

Witam ponownie.
Problem mam z Jumpmanem. Porobiłem następne poziomy i koniec miejsca na adf się zrobił. Jest jakaś opcja żeby z braku pliku gra poprosiła o dyskietkę nr 2? Jeśli tak to chciałbym najlepiej coś takiego żeby po wsadzeniu dyskietki nie trzeba było potwierdzać joyem czy myszką, tylko żeby od razu wczytywało potrzebny plik.
[#320] Re: Tworzenie gier

@tukinem, post #319

To działa z automatu. Wpiszesz np. loadiff"dysk2:plik.iff" i Amos ładnie poprosi o dysk2, i sam go wykryje w stacji.
[#321] Re: Tworzenie gier

@karolb, post #320

loadiff"dysk2:plik.iff"

W tym wypadku etykieta dyskietki ma się nazywać "dysk2" tak?
[#322] Re: Tworzenie gier

@tukinem, post #321

No tak...
1
[#323] Re: Tworzenie gier

@karolb, post #320

Dzięki :) Pomogło.
Zamieszczam obecną wersję Jumpman Lives. Póki co brak dźwięku i jest nieśmiertelność. Wszystko powinno w miarę działać. Narazie do 8 poziomu jest porobione.
https://szybkiplik.pl/zxEpQUhUFP

[tylda] - przejście do następnego poziomu
[spacja] - wyłączenie/włączenie informacji u dołu ekranu
[joystick] - sterowanie standardowo

Uruchamiamy z dyskietki #1. Od chyba 6 poziomu trzeba wrzucić dyskietkę #2.
[#324] Re: Tworzenie gier

@tukinem, post #323

hej, odpalilem na a4k z 060.
nie wiem czy powinien byc dzwiek? ale nie ma jak cos :)
nie wiem jak sterowac. wcisnalem fire i widze poziom i skaczacego jumpmana w prawym gornym rogu na okraglo. nic nie moge zrobic

--

udalo sie odpalic :) gra dziala ! ale ciezko sie steruje :)

Ostatnia aktualizacja: 25.09.2021 18:29:51 przez juen
[#325] Re: Tworzenie gier

@juen, post #324

Trzeba przytrzymac fire gdy on skacze. Co do sterowania jest trochę inaczej niż w oryginale, ale za to o wiele płynniej. Najczęściej skacząc w bok prosto na drabinę można zawiesić grę. Dźwięku jeszcze nie ma. Z tym mam największy problem zawsze
[#326] Re: Tworzenie gier

@tukinem, post #325

https://szybkiplik.pl/smQYVQbE5f
Witam.
Załączam poprawioną wersję gry Jumpman Lives dla Amigi.
- ostatnio płynność nie była odpowiednia dla procesorów 68000 14 MHz. Wszystko przez niepotrzebne ładowanie wszystkich bobów naraz. Teraz do każdego levelu są ładowane te, które potrzeba i nic więcej
- dodałem dźwięki gry (niezbyt ciekawe, ale na pewno lepsze niż w oryginale na PC :D)
- poprawiłem kilka błędów, które występowały w niektórych levelach
- level 11 pusty bez przeciwników (dodane strzelanie wstępnie)
- level 12 póki co nie do przejścia
- już nie pamiętam co jeszcze :)
2
[#327] Re: Tworzenie gier

@tukinem, post #326

Nie widać podłogi na samym dole, zasłania ją pasek z licznikami. (winuae jakby co)

[#328] Re: Tworzenie gier

@tukinem, post #326

Bardzo fajnie to wygląda. Czy mi się wydaje czy w ciągu kilku miesięcy zrobiłeś kilka gier? (Sokobana, siatkówkę, Jumpmana).

Życzę Ci dalszego pasma sukcesów! OK
[#329] Re: Tworzenie gier

@karolb, post #327

O to coś dziwnie Ci się załadowało. Spacją chowasz dolne menu, ale ten pomarańczowy pasek nie wiem skąd się wziął. Będę musiał to sprawdzić.
[#330] Re: Tworzenie gier

@Hexmage960, post #328

Masz rację. Te 3 gry pociągnąłem daleko. Ale wiele było takich co porzuciłem prace nad nimi.

Ostatnia aktualizacja: 03.10.2021 12:43:54 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