Skocz do zawartości

Widoczność


Rekomendowane odpowiedzi

No kidyś się tego już pytałem i ktoś tam miał zrobić przykład(już niepamiętam)

No więc:

Co trzeba napisać aby gdy w pozycji jakiejś tam znajdzie się jakiś obiekt to jak ten jakiś obiekt ma np variables(idzie)na 1 to aby inny obiekt ustawił sobie też ustawił variables(idzie)na 1

Dlaczego Ja się tego pytam:

-Bo niewiem jak to zrobić :P

-Bo mam taki skrypt (oczu)mego wroga:

    
    laser_example_cel=random(20)-random(20)

    laser_example_odleglosc=15

for (d=0;d<270;d+=20;)
{   


    laser_example_x1=   x+cos(degtorad(direction+laser_example_cel))   *laser_example_odleglosc;    
    laser_example_y1=   y-sin(degtorad(direction+laser_example_cel))   *laser_example_odleglosc;
    laser_example_bx=   laser_example_x1+cos(degtorad(direction+laser_example_cel))   *(d);    
    laser_example_by=   laser_example_y1-sin(degtorad(direction+laser_example_cel))   *(d);

    if instance_position(laser_example_bx,laser_example_by,wroog.widzi=1) then          
    {                     
    widzi=1
    sound_play(strog_singin)    
    exit
        
   
    }
}

No i teraz:

    if instance_position(laser_example_bx,laser_example_by,wroog.widzi=1) then          
    {                     
    widzi=1
    sound_play(strog_singin)    
    exit

niewiem co z tym zrobić.

Bo chciałbym,jak w miejscu(laser_example_bx,laser_example_by)Wróg zauważy Wroga(UWAGA Wróg i wroga to 2 te same obiekty!!) KTÓRY MA W SOBIE USTAWIONY WARIABLES (idzie) na 1 To aby JA(Wróg czyli self(Mo ten skrypt to patrzenie wroga jest :P)) Ustawił sobie WARIABLES (idzie) na 1

 

No to by było na tyle czego niemogę zrobić

Mam nazdieję że teraz mnie zrozumiecie :P

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Ja miałem zrobić i ja robię, ale wiesz, natchnąłeś mnie swoim problemem i uzmysłowiłeś, że tak naprawdę nie ma przykładów z prostym AI, więc majstruję silnik, który mam nadzieję, że dzisiaj wieczorem zdążę upublicznić. :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Tak. Mam zamiar zaimplementować:

- Wzrok czyli trójkątne pole widzenia.

- 2 typy obserwacji przez wroga (ruszanie głową), jedna normalna i druga pobudzona.

- Reagowanie na dźwięki z otoczenia. Będzie parę typów: coś się poruszyło, wydało odgłos, kroki, strzał.

- Wrog ma sygnalizowac dźwiękiem innych wrogów, że widzi gracza i przekaze informacje gdzie on jest. Jesli poinformowani wrogowie takze zauwaza gracza, skieruja sie w jego strone. Jesli nie, to podążą za wrogiem.

- JW. ale nie informuje wrogow w swoim zasiegu lecz wszystkich (np. telefonem).

- 3 Typy przeszkod, przezroczyste (np. siatka, szyba), nieprzezroczyste, drzwi. 1 i 2 typy beda brane pod uwage do wyznaczania trasy sciezki do gracza, a 2 i 3 do wzroku i strzalu (kuloodpornych szyb nie biore pod uwage). Krotko mowiac jezeli wrog jest w pomieszczeniu i widzi gracza przez szybe, to zacznie do niego strzelac, a gdy straci gracza z widoku, to wyjdzie normalnie drzwiami.

- Gdy wrog uslyszy typ dzwieku w stylu szmer lub kroki, to ma sie odwrocic w strone zrodla dzwieku, jak nie widzi zrodla, to ma podejsc do miejsca skad dzwiek zostal wydany.

- W przypadku czestego powtorzenia dzwieku typu szmer i nie stwierdzenie przez wroga, ze to sprawka gracza, ma on uodpornic sie na jakis czas na ten typ dzwieku.

- Gdy wrog nie strzela ale goni gracza, to gdy gracz schowa sie za rogiem sciany, to wrog ma isc do miejsca, gdzie ostatni raz widzial gracz i rozejrzec sie wokol. Jesli stracil kontakt z graczem, to ma wrocic na swoje miejsce oraz przelaczyc sie na "pobudzony tryb obserwacji".

 

Wbrew pozorom najgorsza jest implementacja konfigurowalnosci wroga, bo na sztywno to szybciej to mozna zrobic, ale nie kazdy np. chce by wrog sie cofal do startowej pozycji lub dany wrog rozgladal sie pod katem 90 stopni zamiast 45.

 

Co chcialbym dodac, ale raczej nie dodam ze wzgledu na czas:

- Wagowanie graczy. Jesli dwoch graczy znajdzie w widoku wroga, to przeciwnik pojdzie w strone tego, ktory najwiecej przeskrobal (np. strzelal itd.).

- Wektorowa mapa sciezek dla wrogow na zasadzie rozstawiania specjalnych obiektow zawierajacych zapis innych najblizszych tego typu obiektow, dzieki czemu wrogowie znaja mniej wiecej sciezki i korytarze danej mapy. Moglo by to posluzyc na takiej zasadzie, ze gdy wrog stracil kontakt wzrokowy z graczem, ktorego gonil, to musialby on sprawdzic wszystkie pomieszczenia z ww. obiektami, ktore sa zapisane w obiekcie ww. najblizszym wroga. Dodatkowo mozna by bylo dzieki temu wprowadzic stopien powrotu do pozyji. Maksymalny - pozycja startowa, 2 - cofnij sie o maksimum 2 wektorowe sciezki. Dzieki temu mozna by bylo zwabiac wroga w dalsze miejsca gdzie odbyla by sie egzekucja. :]

- Chcialbym dodac jeszcze stopien dzwiekoszczelnosci obiektow tak by wrog nie reagowal na alarm wyslany zza grubej sciany lub z innego pomieszczenia, ale tutaj nie mam pomyslu na takie wagowanie, by GM nie zesral sie z obliczen.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Jak masz zarejestrowanego to po co się pytasz? :) Tak, będzie tylko dla wersji zarejestrowanych, ponieważ silnik wykorzystuje wbudowany pathfinding, typy strukturalne takie jak listy czy mapy oraz kolizje liniowe.

 

Od biedy można zrobić i dla wersji niezarejestrowanych, ale za dużo roboty a i GM nie wytrzymałby gdyby mu podać w skrypcie algorytm pathfingingu (na dużych mapach wyszukiwanie trwa kilkanaście sekund, a to ma być wyliczone w ułamku sekundy).

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

jak to czytam to kojarzy mi się jedna gra - metal gear solid :D

Sam jestem ciekaw jak to będzie działać, bo w wakacje chciałem się zabrać za zrobienie gry wojennej i odtworzyć scenę walki na plaży Omaha i spróbować zrobić doś potężne AI. Może jakieś nowe pomysły i sposoby o których do tej pory nie myślałem poznam ?

Odnośnik do komentarza
Udostępnij na innych stronach

??

A dlacze go nie przeżucasz??

A czy jak jest w dll'u to nie zamula ??

I czy to będzie działało pod gm 6.1

I zrobisz przykład nie ???

I chyba to niebędzie tak:10 wrogów i komp zamula nie ??

 

Tak trochę śię pytam bo ciekawy jestem :P

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

1) Nie przerzucam na dll, bo to nie ma sensu aktualnie gdyż, to co zyskam na szybkości, to stracę na wywoływaniu i przetwarzaniu danych zwrotnych. GM nie jest jest do takich rzeczy przystosowany, ponieważ nie obsługuje wskaźników na struktury dla zewnętrznych języków programowania. Wtedy to by miało sens i zrobiło z GM'a potęgę.

 

2) Silnik działa pod GM 6.1, bo pod nim go robię.

 

3) Tak, zrobię przykład, ale na razie go "robię". :) Mam już zaimplementowany wzrok, namierzanie i prosciutkie chodzenie na testy. Siedzę teraz nad priorytetowaniem przeciwników (jeżeli wróg widzi dwóch graczy, to kim ma się zająć i co zrobić). A potem biorę się za algorytm ruchu. W między czasie przerzucam na alarmy skrypty wyboru broni (bo od jej zasiegu zalezy podchodzenie) oraz reakcje na widok gracza, tak aby te skrypty nie musialy byc wykonywane co step lecz np. co 5, odciazajac lekko system. Broni, strzelania czy energii jako takich implementowac nie bede, bo nie mam na to checi i czasu (procz zasiegu, amunicji i mocy czyli czynnikow, od ktorych moze zalezec akcja wroga).

 

4) Co do zamulania, to o jakim komputerze mowa? :) Sprawdzam dzialanie na 3 wrogach i 2 graczach. Gdy juz bedzie cos naprawde sensownego, to sie zrobi stres testy. Poza tym jak napisalem w pkt. 3, bedzie troche zmiennych do okreslania czestotliwosci wykonywania danego skryptu. Poza tym jak na tym silniku ktos planuje zrobic gre np. dla jednego gracza, to moze wyciac troche kodu, np. liste widocznych przeciwnikow itd. Pomysle nad dodatkowa wersja "lite". :) Na razie robie takie cos, ze kazdy wrog zapisuje sobie priorytetowanego przeciwnika, na ktorym wywoluje jakas akcje, liste widzianych innych przeciwnikow oraz liste zapamietanych przeciwnikow (np. gdy sie znajdziesz w jego zasiegu wzroku, to on podazy za soba i jak go zgubisz, a on nie znajdzie cie tam gdzie ostatnim razem cie widzial - po rozejrzeniu sie -, to i tak ma juz ciebie zapamietanego w specjalnej liscie. Wprowadzilem to dlatego, by wlasnie np. ustalac grupy akcji. Np. gracz1 ma grupe 5 czyli jak go znajda, to zabija, a gracz2 ma grupe akcji 3 czyli jak go zauwaza to ma nie podchodzic. Jezeli gracz2 jednak podejdzie, to gracz2 dla wroga, ktory go obserwuje, stanie obiektem z grupy5 i tak go zapamieta. Wiec jak gracz2 zwieje i zgubi wroga, a potem znowu powroci, to worg juz sie nie bedzie cackal, tylko od razu strzelal czy gonil ( zalezy jakiego zasiegu ma bron) ). Poza tym jak niczego nie spieprze w miedzyczasie, to listy przeciwnikow moga pozwolic na ewentualna modyfikacje silnika by mozna bylo np. ustalic 3 grupy komputerowych przeciwnikow. Ale tego akurat nie obiecuje i zobaczy sie co wyjdzie. :]

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

No i prawdopodobnie po sztucznej inteligencji... :/

https://gmclan.org/up1_6_xxx.html

 

Jeśli wyłączę debugger i nie będzie wyświetlana mapa wzroku, namierzanie i priorytety obiektów, to to ma szybkość aż 180 fps'ów. A mam dopiero proste chodzenie. Trzeba jeszcze wziąść pod uwagę, że musi zostać coś na resztę gry.

 

Jednak jedynym ratunkiem dla tego przykłądu jest konwersja na dll. Samo przerzucenie skryptu kolizji punktu i trojkata przyspieszylo do 250 fps, wiec jakbym przerzucil wyszukiwanie, priorytetowanie, pamiec i grupy na dll, to by bylo idealnie. :)

 

Jednak jest jeden zasadniczy klopot. Jak przeniesc mape kolizji room'a do dll'a? Nie da sie. Wyrysowanie mapy kolizji do surface na poczatku rooma, potem zapis do bmp i odczyt w dll odpada - GM nie zapisuje duzych plansz a np. 4000x4000 zajmuje 65MB. Mozna tez zrobic odczyt wszystkich sprite'ow spoza gry, np. z zipa. Wtedy w dll musze odzwierciedlic silnik graficzny GM'a - odpada, za duzo z tym roboty.

 

Ma ktos jakies pomysly?

 

Chyba, ze napiszemy petycje do Marka Overmarsa, by w koncu wydal nowa wersje GM'a i dorobil obsluge wskaznikow dla zaawansowanych uzytkownikow. Wtedy wszystkie klopoty zwiazane z wolnoscia GM znikna. :) Ma ktos jakies wiesci czy i z jakimi zmianami szykuje sie nowa wersja GM?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...