Archive for the ‘Tworzenie gier’ Category

Game State Manager bez “Managera”

Saturday, May 29th, 2010

Rafał Rozestwiński upomniał mnie ostatnio za nazwanie pewnej klasy Game State Manager-em. Są powody, dla których powinniśmy unikać słowa Manager przy nazywaniu klas. Rafał zaproponował mi więc kilka alternatyw:

  • Game State One Star General
  • Game State Supreme Commander
  • Game State Field Marshall
  • Marszałek Polny Stanu Gry

Teraz rola tak nazwanej klasy jest jasna :) .

Cloze Call – postmortem

Thursday, May 13th, 2010

Cloze Call

W końcu mój ostatni projekt – Cloze Call – doczekał się wpisu na blogu. Po sporej ilości zabaw udało mi się znaleźć popełniony błąd i ostatecznie przygotować binarkę pod Windows’a.

Po szczegóły, screeny, źródła i download – zapraszam na stronę projektu!

Postmortem

Jedną z sugestii na 2010LGDC było, by każdy na koniec napisał postmortem swojej gry. Poniżej zamieszczam tekst w oryginale (wzbogacony jedynie o linki i bez poprawiania błędów) – dla tych, którzy nie boją się czytać długiego tekstu po angielsku :) .

Hi,

This is a postmortem for my 2010LGDC entry, called “Cloze-Call”. It derives its name from Clozure Common Lisp, in which it was written (more on that topic in Section 2). It is also a reference to a phrase, “close call”, which means achieving something or escaping by a narrow margin, which corresponds to the ball maneuvering between planets.

The game itself is a very simple “Gravity Pong”. Your goal as a player is to shoot a ball into a hole. The ball must not collide with any of the planets that are on screen. To make things more fun, all planets attract the ball by means of gravity force.

1. What did I learn?
Common Lisp, first of all. It is my first real project in Lisp. I started learning this language in summer 2009, but (thanks to university) I didn’t have much time to write some real programs.

Using ASDF – at least a little bit.

That my old design concept for Game State Manager code (which I used for years in at least three other languages) has flaws to get ????

2. What went right?
Setting up the environment. I am working on 32-bit Windows 7. Even though I had to try out SBCL (which crashed on SDL examples), CLISP (too slow), ECL (also too slow) and SBCL on Ubuntu before ending up with well-working lispbuilsder-sdl and Clozure Common Lisp, I am surprised that the installation and setting up process wasn’t that complicated and things actually worked first-time. I spent two days before the Challenge on setting up SDL and working environment.

Graphic Design. This project confirmed what I actually learned recently – it is important to sacrifice some time and get decent-looking graphics / media for your product (be it a game, or anything else) and make it look nice. I’d be very unhappy if this game had circles and squares instead of those pictures, which I found on OpenGameArt.org.

Fixed-step physics. I am using and promoting fixed time step approach to simulation in computer games, and it’s the first time I really saw how good it is. During first physics test I had a fixed initial velocity vector for the ball, and I could see how it always travels the same path and lands in the same place.

The game. It isn’t finished, but it is playable and has most of the game mechanics implemented. I had to cut down on features as I was running out of time, but I shipped.

3. What went wrong?
Transparency in SDL – I made some little voodoo and made planets use alpha channel, but the same trick didn’t worked for any other image. I’m still confused why it’s not working, and this phenomena is responsible for ugly Victory/Defeat screens.

Watching movies – I’d have at least few more hours to work on my game if I haven’t found myself some stuff that I really, really wanted to watch.

Bad naming conventions. I heard it’s hard to give names to vector-math library functions. I done it wrong, and had to look for a bug for almost an hour. My vector math library that I wrote for this game had two kinds of functions – some were returning a new vector with the result of an operation, and some modified their arguments. In particular, I had (negative-vector) which returned a new vector representing inversed input parameter. The complimentary function was (negate-vector), which just negated its parameter. I used the latter instead of the former in physics code, and spent almost an hour trying to discover why graphics was flickering.

6 days instead of 7. If I were more careful and wrote 2010-04-01 23:59GMT+1 instead of 2010-04-01 00:00GMT+1, I’d have one more day to work. I found my mistake about a day after signing up and decided not to change my initial declaration.

4. What’s lispy about my entry?
It is in Lisp :) . It is not that common to see a game in Lisp :) .

Few lambdas and high-order functions here and there. I think that my code is more like C++ with Lisp-syntax. But I guess, as for a first Lisp project, it’s not that bad.

5. What interesting algorithms or designs did I use?
My good, old Game State Manager abstraction that I use everywhere. It simplified managing different game screens. Apart from that, I guess everything else is typical stuff you’ll find in any computer game.

At first I wasn’t sure if I want to take part in the Contest. I have lot of stuff to do at university (and other places as well), I don’t know that much Common Lisp, ect. etd. But, I thought, it would be a good occasion to actually learn much Lisp in short time, and write another game. I decided to sacrifice some university lectures and now I’m happy I did it. I’d like to thank David O’Toole for inviting me to #lispgames and encouraging me to take part in the Challenge. And I’d like to thank all of you #lispgames guys for support and nice time wasted (I should have been coding, not chatting :P ) on IRC :) .

IGK i artykuł o fizyce

Sunday, April 18th, 2010

W zeszły weekend brałem udział w VII Ogólnopolskiej Konferencji Inżynierii Gier Komputerowych (w skrócie – IGK). Było to niezapomniane i długo wyczekiwane przeżycie – w końcu na tę konferencję usiłowałem się wybrać już siódmy raz, i dopiero teraz się to udało! W szczególności cieszę się z możliwości spotkania na żywo kolegów z Warsztatu.

Z samego IGK relacji i zdjęć jest już dość sporo, więc póki co nie będę się dokładał :) . Na konferencji brałem też udział w Compo, ale ponieważ nasz projekt konkursowy jest w trakcie modyfikacji (postanowiliśmy w swoim zespole opublikować go jako skończoną grę), to wrócę do niego gdy prace dobiegną końca.

Pobyt na IGK (a konkretniej, rozmowy z Warsztatowiczami) uświadomił mi, że wielu koderów nie zdaje sobie sprawy, iż tradycyjna (gimnazjalna :) ) metoda pisania pętli głównej nie jest zbyt dobra. Inni boją się przejścia na tak zwaną symulacje stałokrokową, ponieważ wydaje im się, że jest ona bardzo złożona i niewiele wnosi. Prawda jest jednak taka, że stały krok czasowy jest konieczny, jeżeli na dłuższą metę chcemy mieć jakąkolwiek sensowną fizykę w grze! Z tego powodu postanowiłem napisać artykuł, który został wczoraj opublikowany na Warsztacie. Artykuł ten, zatytułowany “Jak należy pisać aktualizację stanu gry”, poświęcony jest całkowicie tematowi symulacji stałokrokowej. Mam nadzieję, że przyda się on zarówno początkującym jak i zaawansowanym programistom gier. Zapraszam do lektury i komentarzy!

2010 Lisp Game Design Challenge

Saturday, March 20th, 2010

2010 Lisp Game Design Challenge banner

Przedwczoraj wystartował konkurs 2010 Lisp Game Design Challenge. Zasady są bardzo proste – wystarczy zadeklarować termin startu, wziąć swojego ulubionego Lispa i zacząć klepać :) . Zapisy i dodatkowe informacje znajdują się na stronie głównej oraz stronie rejestracji.

Osobiście poważnie zastanawiam się jeszcze nad wzięciem udziału. Jedynym sensownym terminem startu byłby 24 lub 25 marca. Pomimo tego, że uczelnia przyciska to jednak konkurs ten jest bardzo kuszącą propozycją :) .

The Graveyard

Tuesday, November 17th, 2009

Jakiś czas temu trafiłem w sieci na kolejnego experientiala, tym razem o zupełnie innym wykonaniu niż poprzednie, które pokazywałem. The Graveyard to krótka gra (a może – opowieść?) o starszej kobiecie odwiedzającej cmentarz. Stworzona przez grupę Tale of Tales, porusza temat śmierci w sposób nietypowy dla gier komputerowych, a bardziej kojarzący się z klasycznymi formami sztuki.

UWAGA! SPOILER WARNING! :)
Gorąco polecam zagrać w tę grę przed lekturą tego wpisu, gdyż dalej znajdują się informacje, które mogą wpłynąć na rozgrywkę.

Rozgrywka w całości skupia się na starszej kobiecie odwiedzającej cmentarz. Z punktu widzenia klasycznych gier komputerowych nie ma w The Graveyard zbyt wiele do roboty. Cała gra streszcza się do przejścia fragmentu cmentarnej alejki, zatrzymania się na ławeczce, wysłuchania krótkiej piosenki i wyjścia z cmentarza; nie ma jako takiego celu gry. Całe sedno przekazu skupia się na środowisku oraz na osobie bohaterki – starszej kobiety, która do chwili przedstawionej w grze prawdopodobnie straciła już wszystkich, których znała bądź obchodziła.

Powiem szczerze, że z początku miałem problemy, żeby wczuć się w tę historię. W szczególności nie przemówiła do mnie zawarta w grze piosenka. Ale im dłużej myślałem o The Graveyard, tym bardziej ciągnęło mnie z powrotem i dwóch-trzech kolejnych podejściach złapałem klimat.

Niewątpliwie The Graveyard wymaga nieco więcej zaangażowania umysłowego niż typowa gra. Żeby dobrze odczuć przekaz trzeba się chwilkę zatrzymać, ‘pooddychać’ światem gry, wsłuchać się w dźwięki, melodię i słowa.

Gra jest dostępna w darmowej wersji trial oraz pełnej, w cenie 5$. Nie kupiłem pełnej (ktoś mnie nauczy, jak się obsługuje PayPale i takie tam?), ale z tego co przeczytałem w Internecie to jedyną różnicą jest bardzo specyficzne i zaskakujące jak na grę komputerową zakończenie.

Autorzy gry opublikowali dość obszerny i ciekawy post mortem, który omawia nie tylko kwestie związane z projektowaniem gry i rozwojem pomysłu, ale także ze zdobyciem funduszy na realizację, z odbiorem gry przez graczy i z ostateczną sprzedażą. Polecam lekturę :) .

3h Compo

Monday, March 16th, 2009

Wczoraj (tj. w niedzielę, 15.03.2009) na Warsztacie zorganizowano marcowe 3h compo. Konkurs trwał od 17:00 do 20:00, a tematem było stworzenie gry, która zawiera zarówno krowę jak i świnię (Szczegóły konkursu na forum Warsztatu).

Powiem szczerze, że pierwszy raz w życiu widziałem taką frekwencję – przysłano aż 28 prac. Większość z nich była grywalna, a niektóre były na prawdę godne podziwu.

Prace, które szczególnie mi się spodobały (kolejność alfabetyczna):

  • BrutalComputer wyprodukował prostą, ale klimatyczną i wciągającą strzelankę.
  • Gynvael Coldwind stworzył bardzo grywalnego Tower Defense.
  • KK zaprezentował bardzo wciągającą, dynamiczną platformówkę z grafiką w stylu ASCII-Art
  • Maskl został autorem Commandosów :) – gierka szalenie grywalna, spójna i klimatyczna.
  • Mi-Ku pokazał nam gierkę z zabawną fizyką :) .
  • Reg napisał szalenie wciągający symulator hodowli. W nocy po Compo kilka osób grało w tę grę i ścigało się na dochody farmy :) .

Na koniec kilka słów o mojej pracy. Można ją pobrać poniżej:
(link do gry).
Napisana została w Javie i LWJGL, powinna działać zarówno pod Windowsem jak i Linuksem. Dołączone są skrypty uruchamiające.

3h Compo - screen z gry
Screen z gry (kliknij aby powiększyć)

Gra nie ma swojego tytułu. Gatunkiem klasyfikuje się do experiential gameplay. Gracz kieruje krową, która posiada emocje – główne uczucia to uczucie smutku / radości oraz zabawy / wściekłości (skutków tego ostatniego nie zdążyłem zaimplementować :( ). Są też stany pośrednie – krowa może być bardzo smutna, smutna, neutralna, wesoła lub bardzo wesoła. Równocześnie może być też rozbawiona gonieniem świnek ;) . Krowa, która włóczy się po pastwisku smutnieje z nudów – aby poprawić jej humor trzeba przejść na ‘lepszą trawę’. Emocje krowy ilustrowane są przez grafikę twarzy.

Na planszy pojawia się też stado świń, kierowanych za pomocą prostego algorytmu stadnego. Uciekają one przed graczem, równocześnie starając się zachować spójność grupy, nie wpadać na siebie i dążyć do wspólnego celu znajdującego się niedaleko lewej krawędzi mapy.

Gra ta nie ma swojego celu – experiential gameplay tego nie wymaga. Ideą było zilustrowanie uczuć krowy, której humor zależy od tego gdzie się znajduje i co robi.

Experiential Gameplay

Wednesday, March 4th, 2009

Experiential gameplay (nie mylić z experimental gameplay!) to termin znany z bloga Daniela Benmergui. Jest to nietypowy, eksperymentalny ‘gatunek’ gier, który skupia się nie na konkretnym celu, ale na przeżyciach towarzyszących jego osiąganiu. Dość dobrze zostało to omówione w jednym z postów na blogu Ludomancy.com. Sam Daniel stworzył już kilka gierek w podobnej koncepcji; dwie z nich zaprezentował na Sense of Wonder Night, Tokio Game Show 2008. Gorąco polecam oglądnięcie tego video, rzuca światło na koncepcję experiential gameplay.

Omawiane gry dostępne są do zagrania na Kongregate:

Ponadto ten sam autor stworzył też:
Night Raveler and the Heartbroken Uruguayans: The Game oraz The Trials.

Kolejnym ciekawym tytułem jest The Majesty of Colors autorstwa Gregory’ego Weir. Ta gra poświęcona jest tematyce snu, a zainspirowana została m.in. przez I Wish I Were The Moon. Autor napisał też ciekawy postmortem Majesty. Interesującą pozycją zdaje się być też Stars over Half Moon Bay Roda Humble poświęcona gwiazdom na nocnym niebie, kreatywności i filozofii, niemniej jednak jest ona trudniejsza w odbiorze (przynajmniej mnie sprawia kłopot). Rod jest też autorem specyficznej gry The Marriage, która jednak wymaga wysilenia wyobraźni.

Niedawno natknąłem się też na kolejną gierkę, którą mógłbym zaliczyć do ‘gatunku’ experiential gameplay. Minigra zatytułowana Sprinter to prosta ilustracja koncepcji biegania, w której do kontroli sprintera używamy dwóch klawiszy. Idea podobna do tej, którą opisał Daniel we wpisie o experiential gameplay.

Experiential gameplay to w pewnym sensie też gatunek eksperymentalnego gameplay. Nie jest to jednak zwykła demonstracja, proof-of-concept mający pokazać, że dany pomysł ma szansę się sprawdzić. To gry skupione na doznaniach innych niż te z gier retailowych, zasypujących nas adrenaliną i przemocą. Ze wszystkich experiential games, które widziałem najbardziej podobały mi się te, które poruszają temat uczuć – jak I Wish I Were The Moon i Storyteller.

Osobiście sam przymierzałem się do gierki tego typu, niemniej chwilowo pomysł zawiesiłem – częściowo z braku czasu, a częściowo… z braku szybkich narzędzi developerskich. Na Warsztacie by się pewno obrazili, jakbym gierkę wyklikał ;) , Flasha obsługiwać jeszcze nie umiem… Myślę ewentualnie o Javie i LWJGL, bo tam mam gotowego frameworka i nawet szybko się w tym pisze gry, ale to wszystko jest kwestią przyszłości.

Czytelniku, jeśli natkniesz się na inne gry tego typu (albo stworzysz takową!) to bardzo proszę, daj mi szybko znać :) .

Programowanie gier w Javie i LWJGL

Monday, March 2nd, 2009

Java jest językiem, który zdaje się nie mieć zbyt dobrej opinii wśród programistów gier komputerowych. Kwestie porównywania wydajności tych języków są dość ciekawe, ale ostatecznie w tym miejscu interesuje nas praktyczna możliwość użycia ich do tworzenia gier. O ile język C++ ma pod tym względem niekwestionowaną pozycję lidera, o tyle Java wciąż przez swą złą opinię zdaje się być mało rozwinięta w dziedzinie gamedevu. Powoduje to, że ktoś kto chce napisać grę (lub aplikację graficzną) w Javie nie za bardzo wie, czego szukać.

Chciałbym w tym miejscu polecić wszystkim bibliotekę LWJGL (Lightweight Java Game Library). W dużym uproszczeniu składa się ona z bindów OpenGL i OpenAL pod Javę, funkcji do obsługi wejścia z klawiatury i myszy oraz garści drobnych klas narzędziowych. Wspiera tworzenie gier zarówno jako aplikacji jak i apletów. Główną zaletą jest przede wszystkim uporządkowanie wejścia, audio i grafiki w jednej bibliotece, dzięki czemu możemy szybko zabrać się za tworzenie gry z pomocą dobrych, wieloplatformowych bibliotek. Więcej informacji, przykłady, dokumentacja zamieszczone są na stronie projektu: http://www.lwjgl.org/. Testowałem, działa świetnie ;) (niedługo wrócę do tego tematu, bo zamierzam opublikować projekt zaliczeniowy z Programowania Obiektowego, którym była gra pisana w Javie z pomocą LWJGL).

Jeśli Czytelniku niepokoisz się kwestią wydajności języka, proponuję Ci zagrać w grę, która mnie ostatecznie przekonała do sensowności pisania gier w tym języku i mocno zareklamowała LWJGL:
http://fabiensanglard.net/Prototyp/index.php
Osobiście nie spodziewałem się zobaczyć tyle FPS w JAKIEJKOLWIEK grze opartej o Javę, ale na szczęście nie jest tak źle jak kiedyś mi się wydawało.

Mimo wszystko jednak Java jest językiem różniącym się od C++ w koncepcji zarządzania pamięcią, co w przypadku programowania gier ma duże znaczenie. Trzeba pisać kod dużo ostrożniej i w sposób przemyślany, żeby unikać niepotrzebnego kopiowania obiektów (w miarę możliwości unikać go w ogóle – wszystko alokowane dynamicznie) oraz aliasowania się nazw zmiennych (plątające się przypadkiem po różnych obiektach referencje do składowych innego obiektu; jest to ogólna, dla mnie upierdliwa, cecha wielu języków nowszych od C++, np. PHP5). Niewątpliwie niewygodny jest też brak możliwości przeciążania operatorów.

Dla tych, którzy szukają całych silników graficznych mam dobrą wiadomość – istnieją porty Irrlicht’a i Ogre pod Javę :) .

Projekty zaliczeniowe – rzut pierwszy :)

Sunday, February 22nd, 2009

Jedną z najlepszych stron kierunku Informatyka Stosowana na AGH są pojawiające się od czasu do czasu projekty zaliczeniowe. Poniżej publikuję pierwszą serię ‘drobnicy’ – projekty zaliczeniowe z I roku. Nie są może one zbyt ambitne (sprawy osobiste wymagały bardzo dużo uwagi), ale potrzebne zaliczenia dały ;) .

Podstawy Użytkowania Komputerów (I semestr)
Pobierz prezentacje
Zaliczeniem z najlepszego jak dotąd przedmiotu z najlepszym jak dotąd prowadzącym :) była prezentacja multimedialna oraz specyfikacja projektu technicznego. Ta druga zaginęła gdzieś w czeluściach Internetu (była robiona grupowo na jakiejś Wiki u Asmodeusza na serwerze). Na temat prezentacji multimedialnej wybrałem wstęp do programowania gier. Nie dane było mi jej jednak przedstawić publicznie :( .

Podstawy Informatyki (I semestr)
Pobierz paczkę
W ramach zaliczenia przedmiotu oddałem trzy programy. Pierwsze dwa – konwerter kodu Morse’a i baza danych na drzewie binarnym – nie są warte uwagi (może za wyjątkiem sztuczki zastosowanej w bazie, by ułatwić sobie kasowanie elementów z drzewa :D ). Trzecim programem jest wyjątkowo dopieszczony symulator gry w życie. Opisy w Readme.

Analiza Danych i Probabilistyka (II semestr)
Pobierz PCA
Program ten ilustruje problematykę analizy i redukcji głównych składowych. Oddany w terminie zdobyłby lekką ręką 6.0, jednak z powodu spóźnienia ocena była niższa :( . Opis w Readme.

Na pierwszym roku stworzyłem jeszcze troszkę nie wartej publikacji drobnicy, która dała 6.0 i zwolnienie z języka C. Analogiczną ocenę i zwolnienie z C++’a dał framework Anything-A (retrofit Anything) :) .

Trwa drugi rok, do tej pory wrzuciłem już jeden z projektów zaliczeniowych i sporo drobnicy, która powstała w trakcie nauki. Z gotowych projektów może podrzucę za jakiś czas projekt zaliczeniowy z Programowania Obiektowego (gra w Javie). Ponadto, obecny – czwarty już – semestr zdaje się być wyjątkowo nasycony projektami; niewątpliwie nowych prac powstanie więcej :) .

Tworzenie gier na AGH

Sunday, December 7th, 2008

Jeszcze nie umarłem, czasem zdarzy mi się coś napisać :) .

W ostatnim miesiącu na AGH odbyły się dwa seminaria (taka mądra nazwa na wykład) na temat tworzenia gier, zorganizowane przez koło naukowe Glider a prowadzone przez pracowników firmy Reality Pump. Na pierwszym spotkaniu omówiono różne techniki sztucznej inteligencji w grach oraz ich zastosowanie w aktualnie tworzonej przez Reality Pump grze Two Worlds: The Temptation. Drugie spotkanie było ogólnym wstępem w świat tworzenia gier typu retail (dużych produkcji, które trafiają na półki sklepowe). Można było też dowiedzieć się, w którym kierunku mogą rozwijać się początkujący twórcy gier oraz jak i dlaczego zacząć pracę z XNA. Dodatkowym elementem spotkania była prezentacja gry Two Worlds: The Temptation, połączona z sesją pytań.

Wykłady te są dla mnie bardzo miłą niespodzianką i z radością informuję, że nie jest to koniec – koło naukowe Glider planuje dalszą współpracę z panami z Reality Pump; na stronie koła niedługo pojawi się ankieta, za pomocą której wybrany zostanie temat kolejnego spotkania. Wszystkich zainteresowanych będę informował o terminach i miejscach, jak tylko się o nich dowiem :) .

Oczywiście nie wszystko było różowe; pomimo zapewnień, że wykłady są dla wszystkich, choćby minimalne doświadczenie z grami i programowaniem grafiki jest potrzebne, by zrozumieć żargon, którym posługują się prowadzący. Jest to być może ‘zboczenie zawodowe’, którego wspomniani prelegenci już nie zauważają, ale w wykładzie często pojawiały się angielskie terminy i wyrażenia, takie jak ‘raytracing’, ‘gameplay’, ‘LOD‘ czy ‘NPC‘, które skutecznie utrudniły odbiór osobom ‘nie z branży’.

Podsumowując – wszystkich obecnych i przyszłych game developerów zapraszamy na AGH :) .