Co słychać?

W tak zwanym międzyczasie przepisuje algorytmy sterujące przeciwnikami w grze Pył. Nie jest to proste bo te algorytmy to misz-masz AI/kolizji/zdarzeń/grafiki a postępów nie ma jak pokazywać. Do tego trudno bo kodu jest dużo więc ciężko go fragmentami testować. Muszę więc uważnie analizować stare kody i tworzyć nowe uwzględniając np. że kolizje teraz wykrywa Unity i robi to trochę inaczej. Nie bez wpływu na trudność w konwersji jest też mieszanie wskaźnikami C++ oraz optymalizacja zarządzania pamięcią przez prealokowane tablice, listy, stosy danych czy obiektów C++. To wszystko trochę komplikuje proste przeniesienie AI. A tu są zaszyte takie smaczki jak wykrywanie czy słychać Sope’a czy też go widać – np. jak gracz stoi w cieniu to to też inaczej a to wymaga już testowania ruchomych świateł czy oświetlają czy nie akurat postać. Bo przecież linia wzroku stojącego NPC się przemieszcza w zależności gdzie akurat patrzy.

No ale by nie tylko słowa były poniżej link do nowej wersji Pyłu 1998 od kolegów z Rosji. Właśnie WERTA mi podesłał akturalizację. W nowej wersji można odpalać z różnymi bibliotekami Glide oraz w wysokich rozdzielczościach:

http://www.4shared.com/rar/sRmuVieHba/Pyl_fullRIP_POL_ENG.html

I grafika z tej wersji od WERTY:

dosboxSVN 2016-08-12 18-09-38-40 dosboxSVN_ngld 2016-08-10 14-31-22-09 dosboxSVN_2 2016-08-10 15-49-24-64 dosboxSVN 2016-08-12 18-12-39-12

Finał Pyłu

W jednym z pytań w komentarzach pojawiło się pytanie czy Walkiria z ostatniego levelu to statek jakim na koniec odlatują Sope i Karla. Tak. To był właśnie mój pomysł na szybsze zamknięcie fabuły z racji nacisków wydawcy na zamknięcie projektu.

Przypomniało mi się mniej więcej jak miało wyglądać jedno z planowanych zakończeń więc piszę to tutaj bo w komentarzu mogło się stracić a to pewnie ciekawostka.

Sope i Jafo odnajdują okręt starożytnych obcych. Odkrywają jego tajemnicę, wychodzą bo nie mają jak jej zabrać, a tu jatka – siły gangów Areny walczą ze sobą i z nimi. Karla ich ratuje bo ma znajomości lokalne w jednym z gangów. I niby szczęśliwe zakończenie lecz kolejny zwrot akcji -lądują marines Imperium i zgarniają całość. W ostatniej scenie tajemnica okrętu obcych jest ładowana do transportowca Imperium a Sope, Jafo i Karla pakowani są również. Czy jakoś tak:)

Tajemnica okrętu obcych nie miała być podana wprost. Ale miało to być duże jajo w którym unosi się w hibernacji obcy. Imperium nie spotkało nigdy obcej rasy więc to była gratka dla Imperium i nie mogło pozwolić by to wpadło w czyjeś ręce.

Musze jednak podkreślić iż finał mi się gdzieś kojarzy taki lecz możliwe iż w głowach Adama i Michała było inaczej trochę lub bardziej. Ja byłem zbyt zajęty kodowaniem by to ogarnąć. Ostatnie testy puszczałem jak pakowaliśmy sprzęt do kartonów.

A co dalej? W Pyle 2? Kto tam wie 😉

Moja wizja jest aktualnie inna. Fabuła Pyłu z gry, rozbudowana to druga część trylogii. W pierwszej bohaterem prowadzącym jest Jafo – filozof wojny a Sope to tępy twardziel do strzelania. W czasie tłumienia buntów na jednej z planet Imperium coś w nim pęka jak musi zabijać cywilów. Jafo go prowadzi do umysłowej wolności.

W drugiej części – tej o której jest gra – Jafo na koniec ginie.

W trzeciej – jest to gra z punktu widzenia Karli która kończy edukacje Sope – daje mu wolność emocjonalną. Wplątani są w to obcy oraz Imperium.

Tak mniej więcej 😉

W czwartej Sope znika a Karli i jego dzieci odkrywają Moc i tworzą pierwsze świetlne miecze. Powstaje zakon Jedi 😉

Quite Inteligent Life Form

Stało się. Czas się wziąć za QIFLy…

Inne elementy logiczne już mniej więcej działają. To frajda jak się podchodzi w grze do jakiegoś urządzenia, coś się przełączy, coś wydaje dźwięki, coś się rusza i np. przestają spadać beczki. A przecież tego nie kodowałem – to po prostu poprawione wcześniej błędy w obsłudze logiki nie przeszkadzają by reszta mechanizmów działała poprawnie.

Dalej nie ruszę bez NPC. To wyzwanie, bo kodu do obsługi QILF co nie miara, a jak przystało na mój bałaganiarski kod sprzed lat, jest tam wszystko zmiskowane. Jedyne co się wyróżnia to sam kod AI. Z nim będzie dodatkowa trudność bo to kod Tomka. Możecie mi wierzyć albo nie ale czytanie kodu sprzed 18 lat, jest jak czytanie starych zeszytów. Jeśli są twoje, to coś się tam przypomina i łapiesz idee. Jeśli nie twoje, to jest to znacznie trudniejsze.

QILFy w Pyle to nie tylko przeciwnicy. To również przykładowe beczki spadające z rodni. Rodnia to inaczej fabryka. Fabryka obiektów. Póki gracz się jej nie pozbędzie, to się rodzą. Stąd “rodnia” 😉 QILFy mają po prostu zaawansowaną obsługę animacji – np. jeśli postać robi fikołka w bok, to kod wyciąga z animacji pozycję środka tego obiektu i przesuwa odpowiadający mu gameobject na mapie. QILFy biegają po mapie zgodnie z grafem przejść oraz są podatne na fizykę. Widzą, słyszą i różne takie. Żart nasz sprzed lat był taki iż pewnie założą prędzej czy później związek zawodowy by walczyć o swoje prawa.

No ale do dzieła. Jak ruszą QILFy to czas za innej kategorii sprawy – efekty graficzne, strzelanie, przedmioty no i animacja broni głównego bohatera. W sumie całkiem blisko do końca 🙂

Acha – widziałem dziś gameplay z Quantum Break. Cóż… to co mnie raziło to kolejny przykład “syndromu szturmowca”. Co jak co ale przeciwnicy w Pyle na to nie cierpieli. Czy znacie historię z pokazu Pyłu dla prasy? Mnie nie było i chłopaki nie umieli przejść pokazowo pierwszego poziomu bo był zbyt trudny… próbowałem przez telefon podać im cheaty ale nie dogadaliśmy się…

Zrzut ekranu 2016-03-21 20.43.16

Jak otworzyć te drzwi?

No właśnie, są sobie takie drzwi na mapie Anastazja 1.

Zrzut ekranu 2016-03-20 09.37.05

I jak je otworzyć? Otóż jest sposób. Trzeba wyłączyć osiem laserów w tej hali walcząc z kilkoma twardzielami i działkiem. I nie dając się jednocześnie przypalić tymże laserom (efektu laserów jeszcze nie zaimplementowałem więc trzeba je sobie wyobrażać 🙂 )

Zrzut ekranu 2016-03-20 09.37.45

No wyłączam te lasery korzystając z niepowtarzalnej okazji, że przeciwnicy nie mają jeszcze cyfrowych dusz i stoją jak ciołki … ale drzwi się nie otwierają.

I tu zaczynają się schody. Po pierwsze takich zagadek jest w Pyle wiele. Są one sterowane komunikatami przesyłanymi pomiędzy obiektami. Tu akurat jest tych obiektów 19. 8 przełączników, 8 laserów, jedne drzwi, jeden trigger przestrzenny i jeden analizator wyrażeń logicznych. Tak mi się przynajmniej na razie wydaje 😉

Problem polega na tym iż w plikach na jakich pracuje na Unity niewiele widać. Komunikaty mają postać skompresowaną bo trzeba było oszczędzać pamięć. Mam więc niejasne struktury danych i skompresowane nic nie mówiące dane. Dlaczego struktury są niejasne? No niby w kodzie starego Pyłu są ponazywane jednakże w trakcie prac nad grą to do czego pierwotnie miał służyć było często rozszerzane o kolejne ficzery i z czasem tracił się sens tego co opisywały ich nazwy czy nazwy parametrów a do tego poszczególne fragmenty logiki były już hackowaniem tych algorytmów by coś tam jeszcze wcisnąć.

By więc śledztwo dlaczego drzwi się nie otwierają ruszyło z miejsca trzeba odpalić stary edytor gry Pył gdzie wszystkie nazwy komunikatów oraz wyrażenia logiczne są czytelne.

Zrzut ekranu 2016-03-20 09.47.22Zrzut ekranu 2016-03-20 09.48.21.png

I tak analizując bardziej czytelne opisy trzeba prześledzić przebieg tego kto z im i dlaczego na mapie rozmawia. Potem poustawiać pułapki w debugerze nowego Pyłu i szukać dlaczego przepisany kod nie robi tego samego co stary. Bo te enigmatyczne liczby z plików gry wpadają w równie enigmatyczny kod i trzeba zrozumieć co robi z tymi liczbami ten kod i dlaczego źle. Zazwyczaj źle dlatego iż przepisując pewne kody logiki na rozum zrobiłem to czytelnie a jak się okazało to co pominąłem to był jakiś hack na to czy tamto… Dlatego tyle to wszystko trwa. Poniżej inicjalizacja analizatora wyrażeń w której nie wiem czemu dodatnie parametry expData są ignorowane w Val a ujemnie nie. Dlaczego? Nie mam dziś pojęcia. Czas mam nadzieje pokaże. Dla purystów C# dopowiem iż to tylko copy&paste z C++ z niezbędną zmianą składni. I takich enigmatycznych działań jest całe mnóstwo a na komentarze w trakcie tworzenia gry… nie było czasu 😉

Zrzut ekranu 2016-03-20 09.48.40

Na razie drzwi się nie otwierają. Może dziś się otworzą 😉

Przebudzenie mocy

Migracja do Unity 5 zakończona. Trochę pozmieniali tu i ówdzie więc parę rzeczy zaczęło działać w Pyle dziwnie ale opanowałem. No i mocy przybyło. Trochę zmieniłem sposób konwersji danych mapy no i skonfigurowałem poprawnie funkcje prekalkulowanego wykrywania zasłaniania powierzchni jakie w Unity 5 rzeczywiście jest za darmo. No i z 20 FPS zrobiło się 230 FPS 🙂

Pamiętam swój algorytm zasłaniania… wymyśliłem go jadąc do biura autobusem z Piekar Śląskich do Bytomia, na Bobrek, do huty 😉 A dokładnie w pomiędzy Brzezinami Ślaskimi a Bytomiem. Pamiętam jak dziś ekscytację jak mnie olśniło.

Jeśli ktoś się zna to się zorientuje iż renderuje się i tak dużo trójkątów w tej scenie. Jest tak bo geometria mapy Pyłu jest dzielona na dwa sposoby – na sektory 2m x 2m, czyli każdy polygon jest cięty do sektora. Więc duża ściana w tej hali to już kilkadziesiąt polygonów. Sektory tworzą kostkę 3D a więc łatwo ustalić kolejność ich rysowania. W ramach sektora zaś funkcjonowały drzewa BSP a więc algorytm BSP znów dzielił polygony pod kątem ich wzajemnego zasłaniania się. W ten sposób zaroiło się od trójkątów…

Niestety algorytm podziału na sektory działał przed importem mapy do Edytora gry, w ramach narzędzi do konwersji z Lightwave. Więc wyrazy współczucia dla Adama i Michała gdyż musieli każdy z pociętych na sektory polygonów mapować oddzielnie. Oczywiście automat w miarę działał na prostych powierzchniach ale… framugi drzwi i inne takie bryły już nie. No niestety czasu i wiedzy zabrakło mi by Edytor był bardziej przystępny 😦

Mocy jeszcze przybędzie bo jak grafika się wyluzowała to widać iż 30% energii procesor traci na jeden skrypt – animację meshy. W Pyle też tak było więc było to odpowiednio zarządzane by nie animować niewidocznych. Tutaj też to skoryguję i będzie nadmiar mocy na to co mnie kręci czyli efekty usprawniające oryginalny wygląd gry (oczywiście do wyłączenia jak ktoś woli oryginał).

ps. ciężko było wrócić do tych kodów bo się połapać nie mogłem 😉

Dust022016Dust022016.png

W oczekiwaniu…

Zgodnie z zaleceniami komentujących przesiadłem się na Unity 5. Wszystko sprawnie się przeniosło i lada dzień to ruszę dalej bo mnie ciągnie.

Ale tak w oczekiwaniu kolega z Rosji podesłał mi fajny link:

http://www.old-games.ru/game/download/get.php?fileid=8300&modal=1

Naprawdę fajnie chodzi. Wyłączył parę efektów, niektóre trochę źle działają ale wersja na D3D działa sprawnie i szybko 🙂 Nawet na moim Surface Pro 4 da się grać!

 

 

Co się dzieje?

Zgodnie z wcześniejszymi informacjami wznowiłem w październiku prace nad konwersją. Zacząłem od aktualizacji Unity do Unity Pro. Pozwoliło mi się to dorwać do profilera bo strasznie mi Pył pod Unity spowolnił. Myślałem, że coś źle ze skryptami robię tj. zbyt “topornie” je piszę. Ku memu zaskoczeniu problem jest ten sam co w roku ’98 🙂 Czyli wymagania graficzne. Tak sobie założyłem prosto, że nowy silnik na nowoczesnych kartach pociągnie proste Pył-owe mapy i modele 3D bez specjalnego kombinowania… no cóż. Pomyliłem się. Muszę to niestety przemyśleć i jakoś zaprząc do pracy mechanizmy ograniczające rysowanie niewidocznych obszarów dostępne w Unity Pro… bo przecież tych z ’98 roku nie użyję.

Niestety z powodu poważnej choroby w rodzinie musiałem to znów na chwilę odłożyć na bok. Będę informował dalej co i jak.

Jedyne co mnie martwo to fakt iż użyłem 3-miesięcznej licencji Unity Pro jaką dostałem gratis za zakup SDK do Occulusa. I niestety od aktywacji czas leci a nówka sztuka to 5k złotych…

Wielki Dzień

Uff. Poważny kamień milowy osiągnięty – wszystkie dane z Pyłu z 1998 zassane do Unity. Wszystkie mapy wczytane do Unity i mniej więcej działają. Teraz czas na przesiadkę na edytor Unity i ręczne poprawienie oraz uzupełnienie tego czego nie dało się zrobić skryptami konwersji. Wymagane jest  jeszcze dopracowanie skryptów gry – brakuje AI oraz obsługi dynamicznych zdarzeń (rakiety, granaty, cząsteczki itp). No i oczywiście obsługi głównego bohatera ale to na koniec. Potem spiąć wszystko w całość i gotowe.

Przesiadam się przy tej okazji na Unity Pro gdyż pewne mechanizmy niezbędne do poprawnego działania gry po konwersji są tylko w wersji Pro.

Dziś fragment jednego z poziomów Platformy. Smacznego 🙂

ps. jeśli kogoś intrygują szare sześciany na mapach to nie ma powodów do obaw – to obiekty pomocnicze używane w starym silniku, w nowym czeka je usunięcie