kategoria: AMOS
[#91] Re: programowanie amos

@QUAD, post #89

A gdzie WarFork z Valorytu ja siem pytam? :)
[#92] Re: programowanie amos

@Vato, post #91

ty tam nie gadej ino mi rysuj mapy bo będą potrzebne :)
[#93] Re: programowanie amos

@QUAD, post #92

Nowsza wersja gierki, wiem, na pierwszy rzut oka wygląda prawie identycznie, ale jest kupa zmian niewidocznych, z widocznych dodano animację umierającego monsterka i wylatującej monety, animację wyskakujących przedmiotów ze skrzynki, jaki przedmiot wyskoczy jest uzależnione od poziomu, na którym jest postać i od ilości HP, jeszcze z tym będę kombinował bo mam nowe pomysły.
Dodano drugi ekran, który na razie jest nieaktywny (ale będzie za jakiś czas :D)
dodano okienko wyskakujące z możliwością wyboru opcji, np jak się otwiera skrzynia, bądź jak się wlezie na schody w dół.

powoli brnę do przodu, ale zżera to masę czasu.

LINK
[#94] Re: programowanie amos

@QUAD, post #93

Fajne, podoba mi się mechanika i plastyka tej gry
[#95] Re: programowanie amos

@QUAD, post #93

Trochę przypomina grę na Game Boy.
[#96] Re: programowanie amos

@sanjyuubi, post #95

Lubie gierki z gameboya, niektóre są zajebiste :P
[#97] Re: programowanie amos

@QUAD, post #93

Dodano:
Hit Points playera
damage broni
monety za zabite monsterki
durability broni
kupę drobnych rzeczy
obliczanie DMG (kulawe do poprawy, ale nie najgorsze)
no i najważniejsze ....
dźwięki :D


teraz czeka mnie:
dodanie potionów (luzik)
dodatkowe levele (chyba najgorsze)
AI monsterków (chyba gorsze od najgorszego) :P
rodzaje zbroi (ciągle się nad tym zastanawiam)

Ostatnia aktualizacja: 13.11.2016 00:10:26 przez QUAD
[#98] Re: programowanie amos

@QUAD, post #97

AI:
potworki potrzebujesz mieć jakoś ułożone w postaci tablicy. Biegniesz potem pętlą po mobach, sprawdzasz każdym dystans od gracza w tilesach (funkcja sprawdzDystans() jest do napisania).
- Jeśli 1 to atakuj(mob, gracz),
- jeśli więcej niż 1 a mniej niż ZASIEG, to przesunMoba(kierX, kierY) o 1 w kierunku gracza.
- w przeciwnym wypadku nic nie rób.

Skąd wziąć kierunek gracza? gracz.x - mob.x większe od zera to prawo, mniejsze to lewo, tak samo z y.
Potem będzie Ci to działać za szybko, więc będziesz to pewnie wywoływał raz na sekundę lub ciut szybciej. Jak? zrób sobie licznik klatek gry, podbijaj go w pętli gry o 1. Jeśli licznikKlatek >= 50 to processuj moby i zresetuj licznik.
Potem będziesz miał problem z wchodzeniem mobów na ściany - funkcja przesunMoba musi sprawdzać czy nowe pole jest zajęte czy nie. Potem będziesz musiał się zastanowić czy moby mają chodzić na skos i ewentualnie to wyeliminować przy wywoływaniu przesunMoba.

Ostatnia aktualizacja: 13.11.2016 10:58:57 przez teh_KaiN
[#99] Re: programowanie amos

@teh_KaiN, post #98

Dodam tylko, że przesuwanie przeciwników w kierunku gracza na zasadzie bliżej X,Y wymaga zastosowania choćby najprostszego path findu, inaczej będzie prawdziwy "potwór" z gry, gdy "potworki" zaklinują się w tzw. wnęce i będą tam zasadzone do momentu, aż X lub Y gracza pozwoli im stamtąd wyjść. A skoro mówimy o szukaniu ścieżki, to i o grafach, a to już temat szeroka i głęboka rzeka. Od czasu, gdy moja kosa trafiła na ten kamień zastanawiam się, jak to jest zrobione w wielu amigowych grach, bo obeznani w temacie wiedzą, że grafy, te dobre i dokładne, obciążają mocno procesor i są nie do zastosowania na wolnym sprzęcie. A jednak są amigowe gry, które mają całkiem przyjemne poruszanie się przeciwników. Chętnie posłucham doświadczonych w tej materii.
[#100] Re: programowanie amos

@Umpal, post #99

znaleznie wszystkich drog od punktu A do pkt B (rekurencja bedzie przydatna) w takim labiryncie jest banalne i na mc68k powinno sie wykonac w mgnieniu oka, programista moze wybrac taka droge, ktora zajmie najmniej ruchow. ale pogralem chwile na komorce w oryginal tej gry i przeciwnicy ruszaja sie tam w duzo prostszy sposob. glownie ida przed siebie, inne troche losowo, a inne zaczyanaja atakowac dopiero jak sa blisko gracza :)
[#101] Re: programowanie amos

@juen, post #100

też to zauważyłem, teoretycznie w mej głowie układa się powoli plan jak to ma wyglądać a to dopiero 5% sukcesu, pozostałe 95% to jak to zrobić z moimi umiejętnościami hahaha

ale nikt nie wspominał że ta gra zostanie skończona do 2020 więc mam czas żeby się nauczyć :)

Ostatnia aktualizacja: 13.11.2016 21:12:30 przez QUAD
[#102] Re: programowanie amos

@QUAD, post #101

Magazyn Amiga, 6/1995, strona 90
Krzysztof Prusik w ramach kursu AMOSa popełnił 4-stronicowy artykuł, który może być tutaj przydatny:

[#103] Re: programowanie amos

@vojo, post #102

qrde, dobre :)
koniecznie musimy się spiknąć kiedyś na jakimś browarku, od kilku lat jakoś tak chcę się z Tobą spiknąć
[#104] Re: programowanie amos

@QUAD, post #103

No dawaj multiplayera w swojej grze to potestujemy ;)
[#105] Re: programowanie amos

@QUAD, post #1

Nie chcę zaśmiecać forum więc zadam tu pytanie. Jak zrobić rotację tablicy n-elementowej w Amosie. Mam np. tablice 16-elementów z wartościami liczbowymi (współrzędne y) i chcę żeby przesunąć element tablicy z pozycji pierwszej na drugą a z drugiej na trzecią aż do pozycji 16 bo z tej wartość zostanie przepisana do pierwszej. Głowię się i głowię i nie umiem sam nic wymyślić?
[#106] Re: programowanie amos

@jimiche, post #105

uhm, serio?:) Nie pamietam juz skladni ale po prostu cos takiego:

ostatni = tablica[rozmiar-1];
for i = rozmiar - 1, i >= 1; i = i - 1
tablica[i] = tablica[i-1];
endfor
tablica[0] = ostatni;
[#107] Re: programowanie amos

@jimiche, post #105

A na pewno musisz ją przesuwać? Nie wystarczy, że zaczniesz "patrzeć" na nią od kolejnego elementu?
[#108] Re: programowanie amos

@smith, post #107

Ta, tez tak myslalem. Wszystko zalezy ile tego jest i jak uzywane. Jak niewiele elementow to prosciej przesunac. Jak duzo albo niezbyt czesto uzywane (chyba ze zamiast modulo mozna uzyc maskowanie wtedy liczenie indeksu nie bedzie mialo takiego wplywu) to szybciej bedzie uzywac ((indeks + offset) modulo wielkosc). Zalezy:)

Ostatnia aktualizacja: 15.11.2016 00:58:33 przez kiero
[#109] Re: programowanie amos

@QUAD, post #103

Czy ktoś używa tego amal_editora ? potrzebuję zrobić animację z dwóch klatek ale nie wiem jak :/
[#110] Re: programowanie amos

@QUAD, post #109

Odpal sobie z menu Amosa - User/Edit objects i tam sobie namaluj albo wczytaj juz namalowana grafike, ktore chcesz animowac, zapisz objekty i wpisz sobie cos takiego:

Do
DUPA
Loop

Procedure DUPA
A$="Start: "
A$=A$+"Anim 0,(1,10)(2,10) ; Move 0,50,30 ; Jump to Start"
Bob 1,50,100,1
Channel 1 to Bob 1
Amal 1,A$
Amal On
End Proc

Program ten zanimuje z pozycji 50,100 na ekranie 2 klatki z bobow numer 1 i numer 2 z opoznieniem `10` i przeniesie go o Move 0,50,30. Jesli chcesz sama animacje bez przemieszczania to wtedy usuwasz Move 0,50,30. Takich animowanych bobow na ekranie w Amalu mozesz uzyc 16 jednoczesnie (Channel 1-16).
[#111] Re: programowanie amos

@sordan, post #110

Dzięki Sordan, gdzieś w książce wyczytałem o AMAL_editor.AMOS i myślałem że tego ustrojstwa trzeba użyć :)

co do Twojego kodu, po narysowaniu na szybko dwóch klatek 1 i 2 nic się nie animuje, dopiero jak zmienię Bob 1,50,100,1 na Bob 1,50,100,2 to zaczyna działać, ale mam kolejny problem, napisałeś że '10' - to jest opóźnienie, cokolwiek bym tam nie wpisał to mam wrażenie że ciągle zapierdziela z taką samą szybkością, czyli w ch.j za szybko :P
Jak temu zaradzić ?
[#112] Re: programowanie amos

@QUAD, post #111

Szczerze nie mam pojecia nawet co to ten AMAL_editor.AMOS, ale zeby animowac w AMALu to mozna to robic bezposrednio z edytora. AMAL to tak jakby jezyk w jezyku, ma tylko troche inna skladnie. Wszystko w AMALu piszemy w " ", a komendy zaczynaja sie z duzej litery i tylko one maja znaczenie, pozostale litery komend napisane po duzej literze nie maja w ogole znaczenia i sa pomijane przez program. Mozesz to zapisac wiec na 3 rozne sposoby i bedzie dzialac dokladnie tak samo:
1.) A$=A$+"Anim 0,(1,10)(2,10) ; Move 0,50,30 ; Jump to Start"
2.) A$=A$+"A 0,(1,10)(2,10) ; M 0,50,30 ; J to Start"
3.) A$=A$+"Adupadupa 0,(1,10)(2,10) ; Munsbdubsudbsu 0,50,30 ; Jdupasraczka to Start"

Anim 0 - znaczy ze ma wykonywac ta animacje w nieskonczonosc. Jesli chcesz by animacja ruszyla tylko na przyklad 3 razy to zamiast 0 wpisujesz 3. Pierwsza liczba w nawiasie w komendzie Anim to numer boba, a druga liczba okresla czas jaki obiektowi maja byc przyporzadkowane odpowiadajace im obrazy obiektu. Czyli zeby uzyskac efekt jaki chcesz zrobic musisz jeszcze pobawic sie trzecia liczba z komendy Move, ktora okresla w ilu krokach ma odbyc sie przesuniecie obiektu. Zeby zrozumiec dokladnie o co biega nagralem ci Filmik z roznymi wartosciami to mozesz sobie zobaczyc jak zachowuje sie animowany bob na ekranie w kilku wariantach. Pierwsza liczba z komendy Move oczywiscie okresla odleglosc o jaka obiekt ma byc przesuniety poziomo, a druga liczba odleglosc pionowa. Wpisane wartosci ujemne beda przesuwac obiekt w przeciwnym kierunku.
[#113] Re: programowanie amos

@sordan, post #112

Można w tym miejscu wstawić zmienną, od której zależy szybkość latania potwora na dany moment?
Zmienna zależy od czynnika np. strzelanie do potwora.
[#114] Re: programowanie amos

@Vato, post #113

W samym AMALu czyli to co jest w " " nie wstawisz tam zadnej zmiennej bo to co jest w " " odnosi sie tylko i wylacznie do samej animacji i ruchu boba. AMAL sam w sobie ma tylko 32 proste komendy i cala reszta ze zmiennymi itp. musi byc juz napisana w samym AMOSie. Tak przynajmniej mi sie wydaje. Szkoda, ze selur zbanowany :(
[#115] Re: programowanie amos

@sordan, post #112

Dzięki Sordan za dobre rady i przykłady, praktycznie przepisuję kod na nowo bo był za brzydki i za bardzo lamerski, staram się go uporządkować i uprościć, żeby mi potem było łatwiej się w tym ogarnąć, jestem na dobrej drodze, tylko jak zwykle mało czasu a i wieczorami już nie mam tyle samozaparcia i dobrych pomysłów co z rana, powoli sobie dłubię i coraz więcej ogarniam, a jak umiem więcej to widzę że kod da się duzo lepiej zorganizować hehe, jak będzie jakiś wiekszy progres to zaprezentuję.
[#116] Re: programowanie amos

@QUAD, post #115

Czy taki sposób ograniczenia pola ruchu obiektu jest wystarczające, czy może są inne bardziej przyzwoite rozwiązania?

IF x=1 Then X=2:Cls 0
IF x=319 Then X=318: Cls 0
IF y=1 Then Y=2:Cls 0
IF y= 255 Then y=254:Cls 0
[#117] Re: programowanie amos

@chicago, post #116

IF x<=1 Then X=1:Cls 0
IF x>=319 Then X=319: Cls 0
IF y<=1 Then Y=1:Cls 0
IF y>= 255 Then y=255:Cls 0

W tym przykładzie dodałbym znak ">" lub "<".
[#118] Re: programowanie amos

@Stoopi, post #117

Jest ok ale jak dojadę do krawędzi ekranu to mam miganie obiektów na ekranie.
[#119] Re: programowanie amos

@chicago, post #118

No nic dziwnego, ze ci ekran miga jak czyscic go komenda cls 0 :) Wywal wszystkie "cls 0".
[#120] Re: programowanie amos

@sordan, post #114

Dobrze Ci się wydaje. Po komendzie aby uniknąć bajzlu można stosować średnik ";" i po nim opis. Amal nie obsługuje zmiennych. A ich funkcje zastępują rejestry. Aby nadać wartość trzeba to robić komendą "L". Tu się mogę mylić, że: każdy program w AMALu jest kompilowany oddzielnie. tzn. że pracują w multitaskingu? (nawet pod edytorem?) W helpie od AMOSa jest kilka przykładów. Pomimo użycia "break" ctrl-c pod edytorem w AMOSie, animacje są nadal wykonywane. mimo, że program został przerwany.

Jednym słowem, animacje bobów, spritów, rainbowy, rzeźbić tylko w AMALu. Jeśli chcemy mieć płynne animacje wielu rzeczy naraz. Jak będę miał chwilę czasu spróbuję coś sklepać prostego jako przykład. Ale nie obiecuję tego na 100%.

Kolejną rzeczą jest nieużywanie For ... Next. Jest to chyba najwolniejsza pętla w AMOSie.

Najszybszą jest tu: Do ... inc i ... if i=x then exit ... Loop

Nie wiem ja z tą: While n=x ... Wend. i tą Repeat : Until

Generalnie można napisać sobie benchmark z użyciem Timera:

'
'
'
Timer=0
T=Timer/50

Do

inc TEST

if TEST=1000000 then exit

loop

print Timer

i adekwatnie polecieć tak z każdymi

for i =1 to 1000000 : next

print timer

wyniki dadzą najlepszy rezultat kiedy będziemy taką pętlę męczyć kilka minut. wtedy różnice w wyniku końcowym będą bardziej zauważalne.

założę się, że for next przegra ze wszystkimi. ale jest jedno ale for może mieć jeszcze step, czyli inc powinno się zastąpić add a ta z kolei też podobno do szybkich nie należy.

myślę że nie ma sensu używania print w trakcie wykonywania pętli bo nam to spowolni cały test i przy okazji może wypaczyć wynik końcowy. ale mogę się mylić, bo piszę na forum a nie w AMOSie :D Może na to akurat znajdę szybko czas. I co ważne sprawdzić testy pod edytorem i skompilowane pod systemem. skompilowane programy działają procentowo dużo szybciej i tu zaczyna się powrót do AMALa który nie wiem czy się kompiluje oddzielnie w "locie" czy nie. ale się dowiem...

i mam jeszcze jedną zagadkę, czy używanie, ekstenszynów takich jak AMCAF , CRAFT itp. też ma wpływ na szybkość działania czy jest to bez znaczenia.

Generalnie największą porażką w AMOSie jest jego kompilator, który mógłby sprawić, żeby skompilowane programy działały jeszcze szybciej i nie umieszczał tylu zbędnych danych w skompilowanym kodzie, których skompilowany program i tak nie używa. Ja wiem tam można wyłączyć dużo rzeczy. Ale mimo to i tak porażka. o 4kb intrach można zapomnieć.

pozdro
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