Maze of Friendship

21/04/2015

Kolejne Ludum Dare - kolejne compo. Tym razem tematem był “Unconventional Weapon”. Zapewne zadacie pytanie - co ma wspólnego tytułowy Labirynt Przyjaźni (bardziej lamerskiej nazwy nie wymyśliłem :P) do broni niekonwencjonalnej?

Pomysł

Pomysł tej gry powstał w prawdziwych męczarniach. Zanim powstał działający prototyp gry jaką można oceniać na stronie ludum minął prawie cały pierwszy dzień oraz powstało całkiem dużo gałęzi na git. Od samego początku jednak czułem że tym razem gra powinna być spokojniejsza(w porównaniu do np. Astral Havoc) - najlepiej turowa. Dosyć długo zastanawiałem się czy nie zrobić prostego klona Pokemonów, jednakże koniec końców powstał klasyczny roguelike.

W Maze of Friendship gracz wciela się w rolę zagubionej duszyczki uwięzionej w strasznym i nieskończonym lochu/labiryncie. Na samym początku jest on sam, otoczony przez wrogie istoty których jedynym celem istnienia jest zrobienie krzywdy bohaterowi. Nasz dzielny gracz nie posiada jednak żadnej normalnej broni, a jedynie swoją nietuzinkową osobowość która sprawia, że każdy nawet najbardziej zatwardziały przestępca zamieni się w przyjaciela. To właśnie tytułowa “przyjaźń” jest naszą jedyną bronią i obroną.

Tak jak w prawdziwym życiu - tak i w Labiryncie przyjaźń nie trwa wiecznie. Jeżeli nasz sojusznik będzie miał styczność z wrogą jednostką - może on zdradzić nas i z powrotem przejść na stronę zła.

Celem gracza jest znalezienie wyjścia - co ze względu na charakter gry - równa się znalezieniem klucza, bramy oraz pozostaniem żywym.

Czego użyłem

Tak jak poprzednim razem, całość oparłem o CanvasQuery - a dokładniej o cały framework Playground.js (jakiś czas temu autor (Rezoner) obu postanowił rozdzielić jedno od drugiego tworząc nową domenę oraz możliwość użycia w playground innej biblioteki np. Tree.js). Jestem dalej zdania, że do zastosowań “ludumdarowych” te narzędzia są najlepsze - zapewniają przenośność gry (nawet Unity ostatnio ma problemy z pluginami dla Chrome podczas gdy czysty HTML5 nie), są proste w obsłudze, zaś ewentualne pytania mogłem kierować do autora np. poprzez prywatną wiadomość na Wykopie. Dużym plusem frameworka jest są także dodane funkcje easingu i tweeningu (skrót od inbetweening). Dzięki nim dodanie prostych animacji poruszania się postaci pomiędzy kafelkami jest bajecznie proste.

Do grafiki ponownie użyłem Pyxel edit, zaś efekty dźwiękowe nagrałem samodzielnie wbudowanym w laptop mikrofonem ;)

Problemy

Oprócz wyżej wymienionych problemów z pomysłami miałem nieco kłopotów z stworzeniem poprawnego algorytmu generującego mapę. Głównym powodem był oczywiście czas gdyż dużo go straciłem w pierwszym dniu. Ponownie problemem było oddawanie pracy o późnej porze - tym bardziej, że w tym semestrze poniedziałki są najbardziej zawalonym dniem w tygodniu. Przez brak czasu nie udało mi się także stworzyć tła, muzyki oraz lepszej grafiki.

Dodatkowo kompletnie zapomniałem aby dodać sterowanie klawiaturą (oryginalnie steruję się myszką oraz dotykiem na urządzeniach przenośnych) przez co musiałem zrobić patch już po wysłaniu pracy. Nie starczyło mi również czasu aby poprawić sztuczną inteligencję zarówno przeciwników jak i wrogów, przez co jedni i drudzy są bezużyteczni.

Generator który ma problemy

Generator który ma problemy

Co poszło dobrze

Oczywiście gra nie składa się z samych problemów. Jestem bardzo zaskoczony pozytywną reakcją graczy którzy testowali moją grę. Efekty dźwiękowe które nagrywałem tuż przed wysłaniem pracy - będąc bardzo zmęczonym, okazują się być słodkie, a pomysł który wydaje się być nieco naciągany okazał się trafem w dziesiątkę. Jestem również zadowolony z faktu, że udało mi się stworzyć jakikolwiek generator dungeonów gdyż wydawało się to dla mnie zawsze bardzo skomplikowane.

Co dalej?

W chwili obecnej już robię wersję poprawioną - oczywiście nie wyślę jej na Compo, lecz będzie można w nią zagrać, tu na Blogu. Prawdopodobnie udostępnię ją także na Warsztat.gd oraz na Wykopie. Co w takim razie znajdzie się w wersji poprawionej?

  • Nowy lepszy generator map - udało mi się wyeliminować większość błędów oraz sprawić, że każdy labirynt jest bardziej niepowtarzalny - jedne będą przypominały bardziej jaskinie, inne dungeony rodem z Rogue czy Adom, a inne będą klasycznymi labiryntami.

  • Poprawione AI - wrogowie wreszcie ścigają gracza . Rozważam też poprawienie AI przyjaciół, tak aby stali się użyteczni.

  • Dodana obsługa klawiatury numerycznej - oprócz WSAD i strzałek, gracz może użyć także klawiatury numerycznej do poruszania się. To rozwiązanie ma zaletę w postaci poruszania się na skos - co może być zbawienne przy ucieczce przed wrogiem. Aby dodać tą obsługę musiałem pogrzebać w playground.js gdyż domyślnie po naciśnięciu klawisza jako wartość zmiennej event.key dostawałem undefined. Oczywiście wysłałem już pull-request na githubie :)