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