ZPMI #012 - rand_global, ale najgorsze to są weekendy.

Dzień dobry!

Tydzień zaczął się przyjemnie, podgoniłem trochę robotę z grą. Bohater może już dojść do tygrysa i może się przebrać w prawdziwe ubrania.

Dopisałem do Escorii komendę rand_global, dzięki której mogę np. losować odzywki postaci.

Piszę tak:

:use
rand_global use_text 3
say player player_use:"Używasz sobie na mnie cały czas." [eq use_text 1]
say player player_use1:"Tak, poużywaj sobie" [eq use_text 2]
say player player_use3:"Użyj mnie by wygrać grę" [eq use_text 3]

i efekt jest taki:

Description of the image

Fajniusie. Oczywiście to kolejny głupi pomysł i niezawodny sposób, żeby sobie dorobić tonę roboty – bo teraz siedzę i wymyślam 100 różnych odzywek dla każdej postaci 🙂 Gra na tym zyska, bo nie cierpię tych wszystkich 'Nie mogę tego zrobić’ w przygodówkach.

Taka nieśmiała myśl mnie naszła przy tym dopisywaniu kolejnej komendy do Escorii: fajne te skrypty, proste i do ogarnięcia dla projektanta. Ale z drugiej strony to każdy brakujący drobiazg trzeba dopisać. I jednocześnie w tym dopisywaniu się za bardzo nie zapędzić bo zamiast prostego języka skryptowego wyjdzie nieogarnialny mętlik.

Znowu z punktu widzenia programisty te skrypty są strasznie ubogie, trudno dodać skomplikowane warunki czy jakieś odjechane zależności.

W sumie to najlepszym (dla mnie) językiem skryptowym byłby pełnoprawny język o prostej składni – taki Python. Albo GDScript 🙂

Myśl odłożyłem na półeczkę, i zabrałem się za dalszą robotę.

I wszystko było pięknie, aż znowu przyszedł weekend…

Zaczęło się niewinnie – od dogrywania animacji chodu pod Blenderem i robienia animacji dźwigania.

Ale potem obudziły się demony.

Najpierw mnie wrzuciło w Unity znowu. I znowu mnie odrzuciło. Adventure Creator ma bardzo duże możliwości, ale też strasznie dużo walki jest z tym żeby to działało tak jak ja chcę.

No to odpaliłem Godota.

Po raz pierwszy w życiu wybrałem 3D scene zamiast 2D scene.

Poobracałem, dodałem plejna, poobracałem dodałem kjuba.

Dodałem materiał, dodałem efekty kamery.

Jakoś tak 'pod ręką’ wszystko – całkiem miło się robi. To lecimy dalej. Poczytałem o NavMeshach, dodałem prosty skrypt.

No i zanim się obejrzałem miałem takie coś:

Description of the image

Wygenerowany NavMesh i „postać” „idzie” tam gdzie kliknę 🙂

W tym momencie z półki spadła na podłogę myśl o Pythonowym języku skryptowym do przygodówki i narobiła hałasu.

Przecież skoro mam postać chodzącą tam gdzie kliknę to teraz jakbym dodał jakąś klasę Hotspot reagującą na wskazanie myszą i kliknięcie, a potem dodał kulkę, a do tej kulki skrypt Kulka.gd który będzie dziedziczył z Hotspot to miałbym GDScript do opisywania zachowania kulki. I mógłbym swoją grę skryptować np. tak:

extends "res://Hotspot.gd"
func look():
    player.say(one_of("Jakaś kulka", "Coś czerwone i okrągłe", "Piłka?"))
func talk():
    if globale["gadal_z_kulka"] == 0:
        player.say("Hmm, nie odpowiada. Może głośniej trzeba?")
        globale["gadal_z_kulka"] += 1
    elif globale["gadal_z_kulka"] == 1:
        player.say("HALO! PROSZĘ PANI!?!")
        globale["gadal_z_kulka"] += 1
    else:
        player.say(one_of("Nie chce ze mną gadać", "Zaczynam się czuć trochę głupio", "To jest bezcelowe - tu nie ma easter egga"))
func pickup():
    player.say("A wezmę, pewnie się przyda")
    player.anim("mid_take")
    inventory.add(self)

To oczywiście tak z głowy czyli z niczego i na szybko – ale takie skryptowanie to ja bym lubił 🙂

Z rozpędu dodałem menu czasowników, zrobiłem działający Trigger do przechodzenia między scenami i wyświetlanie teksów nad głową gracza.

Cała impreza skończyła się tak:

Description of the image

  • Mam chodzącą postać
  • Zaimportowaną z Blendka 2.8 (Godot Game Tools)
  • Mam działające menu czasowników
  • Mam podświetlanie aktywnych przedmiotów
  • Mam wywoływanie funkcji na wybranym przedmiocie wg wybranego czasownika
  • Mam przechodzenie między scenami

Jak na dosłownie kilka godzin luźnej zabawy to całkiem przyjemnie.

Potrzebuję teraz działający ekwipunek, możliwość zapisu/wczytania gry i obsługę wielu języków. A potem jakiś cwaniacki sposób na dialogi. Do tego z Trigera, Hotspota czy NPCa można zrobić swoje własne Nody i ulepić pełnoprawny plugin do przygodówek. Fajna jazda 🙂

Na razie treść gierki ciągnę na Escorii, ale jeżeli kolejne moduły będzie się dodawało tak samo prosto i przyjemnie to skończy się na 'silniku autorskim’ 🙂

I będę sobie mógł zamówić T-shirta „(another) Proud P&C engine developer” na lato.