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ą 😉

Advertisements

6 thoughts on “Jak otworzyć te drzwi?

    • Nie jest tak źle. Nie zakładam iż każdą zagadkę logiczną trzeba będzie tak rozkminiać. Jak naprawi się kod na pierwszych to pewnie następne ruszą. Nie miałbym siły by rozpoznawać zagadki z niektórych leveli Platformy – choćby wpisywanie kodów. Mam nadzieję iż to co zrobię wcześniej już poprawnie obsłuży te Platformiane.

  1. Panie Jarku, czy nie było by lepiej po prostu wywalić te najbardziej problematyczne skrypty i napisać je całkowicie od nowa, tak “na oko”? Widzę, że konwertowanie tego jest syzyfową pracą, a efekt (otwierające się drzwi) i tak niezbyt fajerwerkowy. Dlaczego by nie podpatrzeć jak to działało grając w oryginalną grę?

      • Tak jeszcze by Tobie to wyjaśnić do końca Marcinie – sam fragment skryptu otwierania lub zamykania drzwi działa sprawnie od bardzo dawna. Bo to jest prosta rzecz. Jak przychodzi komunikat “otwórz się” (np. z koła otwierającego drzwi) to uruchamiana jest animacja otwierania i jak się skończy drzwi mają status “otwarte”, nie ma z nimi kolizji i można przejść. Ale to jest wierzchołek góry lodowej 🙂 To o czym jest mowa we wpisie powyżej nie dotyczy samego otwarcia jako animacji lecz zaistnienia złożonego warunku logicznego – tj. wyłączenia kilku laserów co wymusza by działały sprawnie inne skrypty – w sensie współdziałania ze sobą. Integracja różnych fragmentów kodu to zawsze najtrudniejsza rzecz w programowaniu – a nie poprawne funkcjonowanie jednego samodzielnego fragmentu kodu 🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s