Game Maker & Chill #7 -way to go…

Lubię, gdy gra ma własny „feel”. Wydaje mi się, że moja ma. Dodałem dziś do niej muzykę (mojego autorstwa, ofc xd). Myślałem też troszkę nad fabułą. Chodzi mi po głowie pomysł igrzysk śmierci w rozbrajaniu min przez więźniów. Dostawałoby się na początku „zestaw” więźniów (każdy miałby imię, nazwisko, avatar itp), a ci którzy przetrwają wygrywają wolność. Idea na razie kiełkuje w mojej głowie i może się zmienić 🙂

Musicie jednak przyznać że już brzmi ciekawie. Moja siostra zabiera się za grafiki (będzie hipstersko – 8 bitowo). Będę teraz mógł myśleć nad projektem poziomów.

Reklamy
Game Maker & Chill #7 -way to go…

Game Maker & Chill #6 – Menu

Dziś w mojej niesamowitej produkcji zabrałem się za przygotowanie głównego menu. Na razie umożliwia ono wybranie jednego z dwóch dostępnych poziomów (czyli tego losowego i ustawionego), oto skrinszot:

skrin5

Bawiłem się też trochę ze sterowaniem myszką. Nie wydaje mi się, że jest ono mi potrzebne.

Teraz też zaimplementowałem obsługę żyć (to taka tymczasowa nazwa 🙂 ), których gracz ma 3. Po przekroczeniu tej liczby pojawia się odpowiedni komunikat.

Z kosmetycznych zmian: dodałem przycisk (esc) który powodować będzie powrót do menu głównego. No i poprawiłem kilka rzucających się w oczy bugów. To chyba na tyle.

Game Maker & Chill #6 – Menu

Game Maker & Chill #5 – Losowość jest fajna

Najważniejsza zmiana jakiej dokonałem dziś, to dodanie planszy z losowym rozmieszczeniem min. Aby ją uruchomić, trzeba zmienić kolejność roomów w Game Makerze. Na przykład:

skrin4

Taka kolejność spowoduje, że rm_Randomized będzie pierwszą sceną uruchomionej gry.

Aby scena faktycznie była generowana, musiałem napisać do nie Creation Code. Wygląda on tak:

for(i=0;i<10;i++)instance_create(random(1024),random(768),obj_Mine);

Jak na razie wystarczy. Stworzy on nam 10 instancji obiektu obj_Mine.
Znaczna większość typowo programistycznej roboty jest już zrobiona.
Pozostaje teraz praca na gólnym game feelem. Jeżeli chcecie się dowiedzieć co mam
na myśli odsyłam do tego filmiku

Z takich mniej widocznych zmian, po wdepnięciu w minę po graczu pozostaje plama krwi.
Jeżeli ktoś przejrzy Step Event gracza dostrzeże taką linijkę kodu:

//image_angle = point_direction(x, y, mouse_x, mouse_y);

Jak nietrudno się domyślić – obraca ona kwadracik symbolizujący gracza w kierunku kursora
myszki. Jednak mam co do tego mieszane uczucia. Z chęcią wysłucham opinii czytelników 🙂
Aktualny kod znajdziecie po kliknięciu tutaj

Game Maker & Chill #5 – Losowość jest fajna

Game Maker & Chill #4 – malutki postępik

Udało mi się naprawić buga związanego z odtwarzaniem odpowiedniego odgłosu wykrywacza. Teraz brzmi dobrze. Ponadto zrobiłem eksplozje, które nawet zostawiają ślad w postaci smolistej plamy na mapie (naprawdę, nie wiem jak to opisać xd).

Przypadkiem wpadłem na pomysł ułatwienia swojej gry, która do najłatwiejszych nie należy. W prawym górnym rogu będzie wyświetlana odległość do najbliższej miny. Gracze chcący lepszego wyzwania będą mogli to wyłączyć 🙂skrin3

(myślę, że ten skrinszot zasługuje na uznanie. Chociażby ze względu na to, że udało mi się uchwycić eksplozję xd)

 

W tej chwili, po wdepnięciu w minę gracz jest teleportowany do miejsca startu. Jest to słaba kara, ale to dopiero wersja rozwojowa.

Niestety, dziś nie udało mi się zrobić wincyj. Byłem mocno zajęty aktywnościami na studiach, ale jutro może zrobię jeszcze trochę. Tymczasem aktualna wersja kodu jest na GitHubie.

Game Maker & Chill #4 – malutki postępik

[Humbe Bundle] Fajna paczka do CryEngine

Dziś trochę inaczej, nieprojektowo.

Na Humble Bundle pojawiła się paczka kłality assetów do CryEngine (to silnik, na którym hulają Crysisy i inne Sniper: Ghost Warriory).

Jest to bardzo fajna inicjatywa. Sam dzięki niej wzbogaciłem swoją kolekcję gier (czasami też… narzędzi xd) A ponadto wspiera się działalność charytatywną. Pomimo, że z CryEnginem styczności nie mam, zastanawiam się nad zakupem (a może przyda się… na później? Tak było u mnie z GameMakerem).

Więc tu jest link.

https://www.humblebundle.com/cryengine-bundle

Co myślicie o CryEngine? I o całej inicjatywie HB?

[Humbe Bundle] Fajna paczka do CryEngine

Game Maker & Chill #3 – krew pot i łzy

Dziś znowu trochę pokodziłem. Pamiętacie skrypt, który pokazywałem w poprzednim poście?* Teraz wygląda tak:


distance_to_mine=distance_to_object(instance_nearest(x,y,obj_Mine));

if(distance_to_mine&amp;amp;lt;=60&amp;amp;amp;&amp;amp;amp;mine_detected==false&amp;amp;amp;&amp;amp;amp;!mine_danger){ alarm[0]=1; mine_detected=true; } else if(distance_to_mine&amp;amp;gt;60&amp;amp;amp;&amp;amp;amp;mine_detected==true){
mine_detected=false;
alarm[1]=1;

}
if(distance_to_mine&amp;amp;lt;=20&amp;amp;amp;&amp;amp;amp;mine_danger=false){ alarm[2]=1; mine_danger=true; } else if(distance_to_mine&amp;amp;gt;20&amp;amp;amp;&amp;amp;amp;mine_danger==true&amp;amp;amp;&amp;amp;amp;close_mine_x&amp;amp;amp;&amp;amp;amp;close_mine_y){
mine_danger=false;

alarm[1]=1;
}
else if(distance_to_mine&amp;amp;gt;60)alarm[1]=1;

Piękniejszy, prawda? A w dodatku działa!

 

No prawie. Działa dopóki nie rozbrajam pierwszej miny. Potem jest jak dawniej. Będę musiał nad tym pomyśleć.

PS: Założyłem (zgodnie z zaleceniami takiego pewnego pana) fejsika dla swojego bloga. Więc skoro to czytasz, to nie ma żadnych przeciwwskazań aby zostawić tam lajka. Będę wrzucać śmieszne filmiki umieszczał dużo wartościowych materiałów. A, no jeszcze link: https://www.facebook.com/Stitzdev-1535568900076919/

 

*Jeśli nie widzieliście poprzedniego postu, to… Hańba wam!

Game Maker & Chill #3 – krew pot i łzy

Game Maker & Chill #2 – zaczyna wyglądać jak gra

Ostatnio pozmieniałem trochę kod, niektóre dragendropy były zbyt syfiaste aby je zostawić. Wstawiłem w ich miejsce GML-owe skrypty które też są syfiaste. Tak jak ten, który jest umieszczony w step evencie gracza

/*if(distance_to_object(instance_nearest(x,y,obj_Mine)==64) &amp;&amp;mine_detected==false){
    show_message(&quot;MINA &quot;);
    mine_detected=true;
}*/
/*if((
    instance_nearest(x,y,obj_Mine).y-y&gt;=-64&amp;&amp;instance_nearest(x,y,obj_Mine).x-x&gt;=-64)&amp;&amp;!mine_detected){
    show_message(&quot;Mina &quot;+string(instance_nearest(x,y,obj_Mine).y)+&quot;,&quot;+string(instance_nearest(x,y,obj_Mine).x)+&quot;\n&quot;+
    &quot;Gracz &quot;+string(x)+&quot;,&quot;+string(y)
    );
    mine_detected=true;
    }
*/
//mine detected message
if((instance_nearest(x,y,obj_Mine).y-y&gt;=-128&amp;&amp;instance_nearest(x,y,obj_Mine).y-y&lt;=128)&amp;&amp;instance_nearest(x,y,obj_Mine).armed==true)     close_mine_y=true; else     close_mine_y=false; if((instance_nearest(x,y,obj_Mine).x-x&gt;=-128&amp;&amp;instance_nearest(x,y,obj_Mine).x-x&lt;=128)&amp;&amp;instance_nearest(x,y,obj_Mine).armed==true)     close_mine_x=true; else     close_mine_x=false; //mine danger message if((instance_nearest(x,y,obj_Mine).y-y&gt;=-64&amp;&amp;instance_nearest(x,y,obj_Mine).y-y&lt;=64)&amp;&amp;instance_nearest(x,y,obj_Mine).armed==true)     near_mine_y=true; else     near_mine_y=false; if((instance_nearest(x,y,obj_Mine).x-x&gt;=-64&amp;&amp;instance_nearest(x,y,obj_Mine).x-x&lt;=64)&amp;&amp;instance_nearest(x,y,obj_Mine).armed==true)
    near_mine_x=true;
else
    near_mine_x=false;

//*****************************************************************************

if(close_mine_x&amp;&amp;close_mine_y&amp;&amp;mine_detected==false){//temporary code for mine detection
  /*  show_message(&quot;Mina &quot;+string(instance_nearest(x,y,obj_Mine).x)+&quot;,&quot;+string(instance_nearest(x,y,obj_Mine).y)+&quot;#&quot;+
    &quot;Gracz &quot;+string(x)+&quot;,&quot;+string(y)+&quot;#&quot;+&quot;Dystans: &quot;+string(instance_nearest(x,y,obj_Mine).x-x)+&quot;,&quot;+string(instance_nearest(x,y,obj_Mine).y-y)
    );  */
   // audio_stop_sound(snd_BeepingNormal);
    //audio_play_sound(snd_BeepingFaster,1,true);
    mine_detected=true;
    }
else if(!close_mine_x||!close_mine_y&amp;&amp;mine_detected==true){
    mine_detected=false;
    //audio_stop_sound(snd_BeepingFaster);
    //audio_play_sound(snd_BeepingNormal,1,true);
    }

if(near_mine_x&amp;&amp;near_mine_y&amp;&amp;mine_danger=false){//temporary code for mine danger
  /*  show_message(&quot;UWAGA MINA: &quot;+string(instance_nearest(x,y,obj_Mine).x)+&quot;,&quot;+string(instance_nearest(x,y,obj_Mine).y)+&quot;#&quot;+
    &quot;Gracz &quot;+string(x)+&quot;,&quot;+string(y)+&quot;#&quot;+&quot;Dystans: &quot;+string(instance_nearest(x,y,obj_Mine).x-x)+&quot;,&quot;+string(instance_nearest(x,y,obj_Mine).y-y)
    );*/
    //audio_stop_sound(snd_BeepingFaster);
   //audio_play_sound(snd_BeepingDanger,1,true);
    mine_danger=true;
    }
else if(!near_mine_x||!near_mine_y&amp;&amp;mine_danger==true&amp;&amp;close_mine_x&amp;&amp;close_mine_y){
    mine_danger=false;
    //audio_stop_sound(snd_BeepingDanger);
    //audio_play_sound(snd_BeepingNormal,0,false);
    }

Jak pewnie się domyślacie, zaczynam coś działać z dźwiękami wykrywacza. Faktycznie ale wkradł mi się pierwszy poważny bug. Ponieważ wszystkie akcje kontrolujące dźwięk są umieszczane w Step Evencie, który jest odpowiednikiem funkcji Update z Unity, dany dźwięk był odtwarzany 64 razy na sekundę. Nie o to mi chodziło…

Więc naprawa tego problemu trafia do TODO. Z sukcesów, udało mi się znaleźć tymczasowe tło (jest bardzo przyjemne). Ponadto zrobiłem niewidzialne miny, bo takie właśnie powinny być.

To tyle na dziś.

 

PS. Pojawiła się strona O mnie na której możecie przeczytać o mnie i o pewnym fajnym czelendżu w którym biorę udział i mam szanse wygrać takie fajne krzesło.

Game Maker & Chill #2 – zaczyna wyglądać jak gra