12 października 2018

Fortnite tia...

Od niedawna gram w Fortnite i tak kilka (tia...) rozegranych gier skłoniło mnie do napisania paru słów o grze, a właściwie światowym szaleństwie.

Pomysł na zabawę nie jest nowy, przecież jest kilka starszych gier tego typu. W tym przypadku trzeba jednak przyznać firmie Epic, że bardzo wysoko postawiła poprzeczkę jakości innym firmom zajmującym ten kawałek rynku. Gra jest niesamowicie zoptymalizowana (jako programista mogę się tylko domyślać jak to osiągnięta). Rozgrywki nie faworyzują graczy - masz takie same możliwości jak inni (no chyba, że nie znajdziesz żadnej broni lub wylądujesz w polu, albo oba powyższe jednocześnie). Szybkość i dynamika rozgrywek jest bardzo duża i mocno uzależniająca. I prawdopodobnie myślisz zbyt wolno, aby dla wielu być godnym (jakimkolwiek!) przeciwnikiem.
I masz to wszystko za darmo. Za pieniądze są dodatki zmieniające wygląd postaci (nie dające poza tym większych szans na zwycięstwo) oraz dodatkowy tryb gry.
Pierwsze spotkanie z grą jest, hmm jak by to delikatnie określić... bolesne, a w skrócie - robisz za mięso armatnie. Przez kilka(naście/dziesiąt) gier giniesz nie wiedząc nawet skąd padł strzał. Po jakimś czasie nawet udaje ci się znaleźć broń, ale giniesz od gościa który po prostu wszedł na zbudowaną rampę i miał minimalną przewagę wysokości, później giniesz od własnego granatu, upadku ze stoku bo pochrzaniłeś klawisze i nie zbudowałeś podłogi, giniesz od gościa który miał śrutówkę a ty pistolet, giniesz od gościa który miał pistolet a ty śrutówkę, giniesz zabity przez zwężającą się strefę, giniesz bo nie potrafisz zatrzymać gościa postawieniem najniższego daszka, giniesz.... itp itd. Czujesz się trochę jak bohater filmu Na skraju jutra. Ten co ginie zaraz po lądowaniu na plaży ;)
Generalnie giniesz. Ciągle. To może skutecznie zniechęcić. Szczególnie jeśli wcześniej obejrzysz jakiegoś streamera i ten od niechcenia niszczy z najgorszego karabinka (wg ciebie, bo nie wiesz jak go używać, a twoja celność to 1 kula w celu na 10 wystrzelonych) 5 gości pod rząd nie tracąc punktu życia...

Bolesne rozgrywki, w których zbieram srogie baty, nasunęły mi kilka spostrzeżeń jak grać, aby nie wyjść na totalnego bambika (tak tutaj określa się nieogarniętego gracza). Czasem udaje mi się to osiągnąć. Oczywiście jeśli nie zginę zaraz po lądowaniu lub w jego trakcie (co też mi się udało)
Porady dla większych bambików niż ja (wiem że jest ich ze trzech bo widziałem ich w grze):
  • Zamiast pakować się od razu w muli odpal tryb piaskownicy dla jednego gracza a tam
  • Przyzwyczaj się do skrótów klawiszowych, jest ich sporo, a aby cokolwiek sensownego osiągnąć musisz je wciskać automatycznie
  • Kup lepszą myszkę niż zwykłą desktopową, gamingowe możesz nabyć już za 100pln.
  • Sprawdź jak się strzela różnymi brońmi, oceń jaki mają rozrzut itp.
  • Opanuj sensowne lądowanie – nie raz nie dwa może ci to uratować skórę
  • Zapamiętaj gdzie w danej lokacji można znaleźć broń, bo możesz się czasami nieźle zdziwić gdy po kilku minutach (jeśli przeżyjesz) grasz z wiadrem bandaży i amunicji ale bez broni
  • Naucz się stawiać chociaż jedną ścianę przed sobą i budować 1 rampę. Zdziwisz się ile razy uratuje ci to tyłek. (na jakieś 3 sec przy dobrych wiatrach, ale zawsze idzie z tego jakaś nauka)
  • Powyższe wymaga posiadania materiałów budowlanych – zbieraj je!
  • W domkach, które grabisz w trybie gry, blokuj punkt wejścia tak, abyś nie został zaskoczony przez przeciwnika, który sobie przez niego wskoczy i wywali ci z dwururki w twarz (stawianie pułapki też jest dobrym pomysłem)
  • Bez sensu nie ostrzeliwuj wrogów (np. na duże odległości lub jeśli masz mało amunicji) - to idealny sposób żeby zginąć
  • Na blisko staraj się walczyć ze śrutówek, po strzale przełączaj się na pm-y. Zapewni ci to ciągłość ataku.
  • Minigun jest ok ale tylko wtedy jeśli grasz przeciwko innemu bambikowi :) albo niszczysz duże konstrukcje co zdarza się rzadziej niż może się wydawać
  • Używaj granatów,
  • Zamiast chować się po kontach – walcz. Nawet nagły headshot może ci pokazać co zrobiłeś źle.
  • Nie stawaj cała szerokością postaci w otwartych drzwiach, to proszenie się o szybkie hop do lobby
  • Graj i nie poddawaj się, każda rozgrywka może cię czegoś nauczyć (ja np. zginąłem kilkanaście razy ponieważ źle obliczyłem lądowanie i nie zdobyłem żadnej broni, w końcu udał mi się to niemal naprawić)

A jak już w miarę ogarniesz się będziesz czerpał z gry radość zamiast frustracji. AA i poszukaj kogoś do wspólnej gry, szybciej nauczysz się nowych rozwiązań. Ja niestety nie mam z kim grać więc wiedzę zdobywam z mozołem, który jest powiązany z szybkimi powrotami do lobby.
I tak na koniec - na razie nie udało mi się wygrać żadnej gry. Ale kilka razy pomacałem podium;) p.s Programowanie w libgdx na razie leży i kwiczy z kilku powodów. I to nawet niezbyt związanych z graniem w gry :/

31 lipca 2018

[LibGdx] Nie zasypuję gruszek w popiele

Ostatnia aktualizacja bloga była dosyć dawno, ale wbrew wszelkim pozorom nie siedzę z założonymi rękoma. Jestem w trakcie budowania sporej, jak na moje możliwości czasowe, gry w libgdx. Niestety nie mogę jeszcze pochwalić się czego dokładnie dotyczy.

Przykładowo wygenerowana mapka. Ładnie widać efekt triangulacji

Przy okazji pracy w libgdx wykonałem ponownie tutorial (wyjściowo oparty o silnik unity) dotyczący generowania map na bazie pikselowego szumu. Tym razem w libgdx. Postaram się na dniach umieścić kod projektu w ramach jakiegoś dłuższego wpisu (lub ich cyklu). Ze względu na to, iż jest to w dużej mierze kopia kodu zrobionego w z tutoriala nie będę wklejał każdej jednej klasy w całości, a skupię się na zastosowanych w kodzie rozwiązaniach.

Z góry zaznaczam, że generator mapek nie jest częścią wspomnianego na początku projektu.

07 maja 2018

[LibGDX] Start nowego projektu

Startuję z nowym projektem. Na tę chwilę nie mogę jeszcze dokładnie napisać o czym będzie, ale mam nadzieję, że wkrótce zmieni się to.

Z informacji, którymi mogę się podzielić: będzie to gra (a jakże!) napisana w libGdx, której przeznaczeniem będzie trafić na sklep Google Play. Czyli witaj Androidzie!
W tej chwili mam  zapewnione wsparcie: grafika (uff!), drugiego programisty i chętnych do testowania produktu. Przewidzianych jest kilka (!) lokalizacji.
Wyzwanie jest spore ponieważ  poza samym pisaniem gry trzeba będzie zająć się wieloma sprawami organizacyjnymi związanymi z powstaniem komercyjnej aplikacji.

Do odważnych świat należy!

Życzcie mi szczęścia.

20 kwietnia 2018

Koniec laby

Kończę z nieróbstwem! W najbliższym czasie ruszam z kolejnym projektem. Tym razem będzie to pełnoprawna aplikacja na Androida oparta o libGdx. Sądzę, że trochę zaskoczę was tym co będę robił.
Przy okazji mam nadzieję, że nie rzucam się z motyką na Słońce, ponieważ programowanie systemów bankowych różni się od programowania gier.
A czas, który mógłbym wieczorami przeznaczyć na programowanie, marnuje przy FTL. Gdybym zliczył spędzone przy grze godzinki wyszło by ich co najmniej 30 jak nie 2x więcej, a tyle spokojnie wystarczyłoby na poznanie niemal wszystkich podstawowych i części zaawansownych technik nowego języka czy biblioteki. Cóż ...
 Do mijającego tygodnia nie miałem jednak sensownego planu co robić dalej. Szczęśliwie  sytuacja zmieniła się i pojawił się spory temat, którego wykonanie zajmie mi dobre 100 -150 godzin pracy. W tej chwili jestem na etapie planowania zakresu prac i zbierania sił.


A tak marnuje czas - udany atak na statek matka z użyciem slug crusiera i dwóch promieni zapalających!

08 kwietnia 2018

Marnowanie czasu, poziom 9000

Miałem wieczorami pisać w libGdx, a spędzam czas na graniu w Faster Than Light. Nie ma to jak dobrze napisana gra. Wciąga niczym bagno i świetnie stymuluje do przysłowiowej jeszcze jednej tury.

Wystrzegajcie się FTL jak ognia jeśli chcecie na komputerze robić coś sensownego. :)

28 marca 2018

[libGdx] Aktualny stan gry

Poniżej krótki gif, który pokazuje stopień zaawansowania prac toczących się nad grą i jednocześnie książką.

Widoczny na niej ludzik jest w pełni sterowalny, zderza się ze ścianami (oddzielna od warstwy grafiki warstwa kolizyjna) i potrafi chodzić po całej, zdefiniowanej w pliku, planszy miasta. Jeszcze nie potrafi przechodzić pomiędzy mapami  (miasto, świat , podziemia) ponieważ realizacja tego elementu jest w dalszych rozdziałach książki, a aktualnie siedzę nad okienkiem menu postaci i statystyk.



Równie małymi kroczkami, niczym bohater powyższej grafiki, zbliżam się do końca książki.

Przede mną przechodzenie między mapami, poprawienie warstwy kolizyjnej (jest przesunięta w poziomie), efekty cząsteczkowe, dodanie tekstur dnia i nocy, zapis, odczyt i pincet innych drobiazgów.

25 marca 2018

[libGdx] Małym krokami do przodu

Kolejne godziny w libGdx za mną. Udało mi się znaleźć przyczynę podwójnego ładowania ekranu gry (błąd widoczny jest w poprzednim wpisie) i teraz ludzik potrafi już samodzielnie chodzić po całej dostępnej planszy.

Uczenie się libGdx  z książki bywa jednak uciążliwe. Autor przeskakuje całe bloki kodu od tak sobie lub nagle do prawidłowego działania aplikacji potrzebny jest kod, który jest 10 stron dalej. W efekcie co chwila gra przestaje całkowicie działać. Szczęśliwie cały projektu  dostępny jest on-line, więc jeśli czegoś nie znajdę w treści książki to jest w dostępnym sieciowym zasobie. Tak czy inaczej, gdyby nie posiadane doświadczenie w programowaniu, gra zwyczajnie by nie działała.

Druga rzecz, jaka rzuciła mi się w oczy w czasie pracy z książką, to nieopisywanie w części przypadków dlaczego coś ma być wykonane w ten, a nie inny, sposób. Niektóre użyte w grze rozwiązania architektoniczne (lub programistyczne) nie są wystarczająco wytłumaczone. Odniosłem także wrażenie, iż autor pisze kod w dany sposób ponieważ robił tak do tej pory, ale nie wie właściwie dlaczego. Jako twórca książki można by z przekąsem powiedzieć Ależ to rozwiązanie jest oczywiste, powinieneś je już znać!, jednak po przerobieniu ponad 150 stron uważam, że część technik powinna być opisana trochę szerzej. Nie ma problemu ze znalezieniem odpowiedzi w internecie, ale jeśli autor używa jakiegoś elementu biblioteki to może warto wspomnieć dlaczego. Tego przynajmniej oczekiwał bym  od książki.

Mimo powyższych uwag pisanie dosyć skomplikowanej gry z książką przed oczami jest ciekawsze niż klepanie prostych, zwykle jednoklasowych, przypadków użycia libGdx. Zdecydowanie nie jest to jednak pozycja dla osób, które do tej pory nie miały wiele wspólnego z programowaniem.




20 marca 2018

Wojownik, libGdx i kolejna gra

To już ponad miesiąc od ostatniego wpisu! Patrząc na moją dotychczasową aktywność trzeba przyznać, że się opuściłem. Główną przyczyną takiego stanu rzeczy jest (powoli przechodzące) przemęczenie spowodowane pisaniem Wojownika Autostrady i nauką Angulara. Każdy ma pewien próg, powyżej którego głowa przestaje przyjmować wiadomości i potrzebuje odpoczynku.


 
Chciałbym pokazać wam statystyki użycia strony zawierającej Wojownika Autostrady (po prawej). Oczywiście największy pik zainteresowania nastąpiłwraz z pojawieniem się gry w Internecie i informacji o niej na stronie Kryształów Czasu oraz na profilu fb portalu czy tu na blogu. Z upływem czasu zainteresowanie znacząco spadło, ale jest to zrozumiałem. Po prostu ci - którzy mieli pograć - pograli :).

Podejrzewam też, że nikt nie dotarł do ostatniego - 350 - paragrafu ponieważ gra jest po prostu morderczo trudna. Nie zrobiłem niestety zapisu statystyk odwiedzin poszczególnych paragrafów, a powrót do programowania w PHP, co byłoby nieodzowne,  aby uzyskać te dane, uważam za średnie rozwiązanie. Wystarczy rzeźba w javascript.
Trzeba by (sugestia czegoja) wprowadzić tryb łatwy lub ogólnie możliwość wyboru poziomu trudności. 


A jakie mam plany?
Atakuje Androida oraz bibliotekę graficzną libGdx! I mam już pierwszy mały sukces. Poniżej zrzut z tworzonego na bazie książki prostego rpg-a. Na razie jako aplikacja desktopowa, którą docelowo będę chciał zportować do Androida. Zrzut jest statyczny (może w końcu nauczę się robić gify...) ale spieszę powiedzieć, że widoczny tam wojownik reaguje na naciśnięcie klawiszy kierunkowych i posiada animację kierunkowego ruchu.  I na razie nie wiem dlaczego mapa ładuje się podwójnie :P




Naukę libGdx i pisania gier opartych na tej bibliotece opieram o książki: Mastering LibGDX Game Development, Android Game Programming by Example oraz Killer Game Programming in Java. I wszystko oczywiście w javie. Normalnej javie :)
Generalnie czeka mnie trochę nauki, ale efekty są zachęcające.
p.s.
A moglibyście spytać dlaczego nie skorzystam z Unity? Przecież niemal 80% gier dostępnych na Androida powstałą w tym języku. Cóż nie znam C# :P I nie chce mi się go uczyć :P

12 lutego 2018

Wojownik Autostrady Piekło na Autostradzie

Dzisiaj mamy niezbyt okrągłą rocznicę urodzin Joe Devera (dokładnie  62 rocznicę). Pisarza znanego
w Polsce głównie z cyklu gier paragrafowych opisujących losy Cala Phoenixa czyli Wojownika Autostrady. Dever ma na koncie dużo więcej gier paragrafowych z czego kilka jest o wiele bardziej rozbudowanych fabularnie niż przygody Cala. Więcej informacji znajdziecie na angielskiej wersji wiki dotyczącej Joe Devera.

Ale nie o  tym miało być.

Z dniem dzisiejszym ogłaszam zakończenie prac nad większymi elementami silnika paragrafowego utrzymującego interaktywną wersję Wojownika Autostrady.  Przy okazji usunąłem ekran witający informacją o beta testach. W pełni uruchomiłem wszystkie przewidziane w projekcie funkcjonalności i oddaję teraz tę grę w wasze ręce. Mam nadzieję, że przechodzenie jej dostarczy wam tyle samo radości jak mi przerobienie jej w wersję on-line.
Droga do zakończenia projektu była dłuższa niż się spodziewałem, ale cieszę się, że podjąłem się tego zadania.
Wiec jeśli tu jesteś to zmierz się z przeciwnościami losu jakie czekają każdego kto chce przekroczyć spalone słońcem i zniszczone wojną bezdroża Teksasu jako:



interaktywna paragrafówka on-line


p.s.
Wszelkie uwagi nadal są miło widziane. Drobne poprawki będę wprowadzał na bieżąco.
Gra zostanie na podanym adresie do końca świata i jeden dzień dłużej , czyli do momentu w którym będę płacił za domenę :)  .



11 lutego 2018

Angular Freeway Warrior Highway Holocaust

Droga dobiega końca. Angularowy Wojownik Autostrady właśnie otrzymał ostatni dodatek, który wymieniłem we wpisie z września zeszłego roku. W tej chwili jestem w trakcie szlifowania rozwiązania związanego z przełączaniem języków.

Nie sądziłem, że napisanie tej paragrafówki, zajmie mi tyle czasu. Gdyby ktoś, we wrześniu, powiedział mi, że na efekt końcowy będę musiał czekać tak długo i że  będzie mnie to kosztowało tyle pracy to prawdopodobnie nie podjąłbym się tego zadania. Może to i lepiej. Udało się i jestem z siebie zadowolony. Sporo w tym czasie nauczyłem się - tak na temat angulara jak i samej pracy nad organizowaniem swojego wolnego czasu. Niemal przestałem grać na kompie  (sądzę że spokojnie 5x mnie gram w gry niż jeszcze pół roku temu), oglądać głupoty w necie czy cokolwiek robi się przy kompie, aby zmaksymalizować marnowanie wolnego czasu.

Ostatni miesiąc był mega trudny - widziałem już koniec prac, ale cel nie przybliżał się gdyż nie poświęciłem mu wystarczająco wiele uwagi. Po prostu przemęczyłem się pisaniem gry, nauką i pracą w efekcie szybkość pracy spadła dramatycznie.

Nie można jednak poddawać się u kresu drogi! Jeszcze kilka, kilkanaście linii kodu przede mną.

Poniżej zrzuty ekranowe z wersji polsko-angielskiej. Możliwe jest przełączanie się na bieżąco między językami. Nie wszystko jest przetłumaczone (np. nie tłumaczyłem opisów efektów ataków), ale to co jest spokojnie wystarcza, aby osoba anglojęzyczna mogła się spokojnie pobawić. Dorzucę jeszcze tłumaczenia nazw przedmiotów (tego brakuje), wyczyszczę angielską wersję i będzie koniec!



Dla próby już  wrzuciłem tę wersję na serwer, ale wymaga kilku poprawek. Może jakimś cudem zdążę (przed 12.02) wrzucić wszystko w ostatecznej wersji na serwer ale grać oczywiście można: