Atraktory

5, czerwiec 2008

W ostatnim czasie trochę się zaniedbałem jeśli chodzi o prowadzenie bloga. Wpływ na to miało kilka czynników. Po pierwsze, wiadomo koniec roku, oceny, poprawy i tak dalej. Tak naprawdę jednak dosyć mocno zastanawiam się nad sensem istnienia bloga w takiej formie jakiej jest teraz. Chciałbym prowadzić raczej coś na kształt xion.org.pl ale na takie częste publikowanie miniartykułów to jestem jeszcze za cienki ;)

W każym razie postanowiłem, że będę pisa rzadziej a treściwiej, przedstawiając konkretne prace i projekty. Dzisiaj na pierwszy ogień pójdą atraktory.

Pierwszy raz zetknąłem się z nimi na warsztacie oglądając prace Zbyszka i Kwazara. Pomyślałem, że ładne i wogóle ale takie coś to na pewno wyższa szkoła jazdy. Jakoś niedługo potem zobaczyłem, że wyżej wymieniony już Zbyszek napisał artykuł co i jak z tymi atraktorami. Swierdziłem, że fajnie byłoby coś takiego napisać, szczególnie, że już niedługo koniec roku i przydałoby się zakręcić za szóstką z infy.

Moje prace:
Pickover
Clifford
Trig 1
Trig 2
Lorenz

Pisane w C++, rendering DirectX.

No i przy okazji zrobiłem elegancką prezentację na informatykę, wpadła dobra ocena dzięki czemu podniosę sobie tragiczną średnią :D

Pozatym napisałem loader plików *.obj. Toporny jak Pudzian ale działa :) . Podstawowa funkcjonalność jest (wierzcholki, normalne, coordy tekstur + teksturowanie), troche nie chciało mi się bawić w obsługę materiałów i tak dalej ale już dziś zabieram się za nową, porządną wersję w której to wszystko zaimplementuję. Główny problem polega na tym, że muszę to wszystko wsadzić do interfejsu LPD3DXMESH (dla wygody sprawdzania kolizji promień-model). Przypomniałem sobię o tym dopiero jak zmieniłem całą klasę CMesh i CMeshInstance na obsługę VertexBuffer’ów… Taka mała wpadka.

Jeśli będę zadowolony z ostatecznej wersji loadera to z pewnością udostępnie.

Dawno nie pisałem nic o głównym projekcie w któym uczestnicze. Szczerze to nie wiem w jakim stopniu zaawansowania aktualnie jest sama gra ale w grywalne minidemo już miałem okazję zagrać jakieś dwa miesiące temu. Ja do edytora dorobiłem kilka przydatnych opcji, między innymi:

- podświetlanie modelu
- obramowanie wybranego modelu boundingbox-em
- wstępna obsługa warstw
- zlikwidowane kilka bugów

Podłoże będzie składało się z trzech warstw
- pierwsza – czyli ulice, chodniki i tego typu elementy
- druga – czyli półprzezroczyste dodatki w stylu dziury w jezdni, zakratowane wejścia do studzienek ściekowych etc.
- trzecia – pozostałe elementy czyli drzewa i cała reszta

Warstwy ułożone będą następująco:
- trzecia (będzie nieco “wyżej” niż pozostałe, przysłania modele i inne warstwy)
- modele
- druga
- pierwsza

Po skończeniu zabaw z przesuwaniem obiektów (które i tak jest do poprawy :/) w planie mam obsługa dodawania nowych elementów na mapę a potem zacznę kombinować z formatem i zapisem/odczytem mapek.

Chyba mogę już powiedzieć, że jestem bliżej końca niż początku :) Bo tak wogóle to marzy mi się totalny refaktoring kodu ale z moim lenistwem…

Compo

29, marzec 2008

Dwa dni temu skończyło się wielkanocne compo – konkurs w pisaniu gier na czas, jesli ktos jest spoza warsztatu i nie wie :) Tematem była ‘gra absurdalna’. Ta edycja była dla mnie szczególna, zadebiutowałem jako uczestnik :)

Moją prace nazwałem gabsurdame (absurd + game :) ): Przygoda pana Miećka. W grze wcielamy się w tytułowego Mieczysława – czarodzieja wyrzuconego z pracy za % :) . Miecio jednak się niepoddał i znalazł nową robotę, jako murarz na budowie. Strasznie rozpił swoich kolegów budowlańców (alkomagiczne napoje mają naprawdę dużą moc…) dlatego pewnego dnia jedna z postawionych przez nich ścian zaczęła się walić. Nasz bohater akurat wracał do domu, gdy zaczęły na niego spadać cegły. Żeby przeżyć, musi ich unikać. Tu gra przestaje być śmieszną zręcznościówką a zaczyna być czystym absurdem. Otóż mamy dwa poziomy trudnośći – na pierwszym, naszym celem jest PRZEGRAĆ a na drugim, ani wygrać, ani przegrać sie po prostu NIE DA :)

Teraz czas na trochę samokrytyki. Gra nie zachwyca niczym – ani grafiką (chociaż jest znośna), ani dźwiękiem (który ważne, że wogóle jest) ani gameplayer (który imo jest całkiem zabawny). Niektórzy skarżyli się na “chód” Miećka. Nie zapominajmy, że jest urżnięty w trzy dupy. Zmienia kierunek chodu, przyspiesza/zwalnia, czasem wchodzi w niewidzialne teleporty. IMO taki pokręcony gameplay jest plusem ale gusta to gusta.

Wyniki compo przedstawiają się następująco:

1. Ciunkos
2. sobol
3. heavymental
4-8. reszta uczestników
9. gamer.cpp (ja ;) ) ex aequo (tak to się pisało?) z 4 innymi uczestnikami.

Niestety na 16 uczestników nikt na mnie nie zagłosował, więc nie zdobyłem ani jednego punktu. Szczerze mówiąc zdziwiłem się trochę bo wg mnie wysłałem pracę lepszą niż kilka osób będących w klasyfikacji przede mną.

Wygrał, całkiem zasłużenie, Ciunkos. Ja dałem 3 pkt jego pracy, była najbardziej rozbudowana, ciekawa, wciągająca i co najważniejsze – absurdalna. Drugie miejsce przypadło sobolowi (ode mnie 2 pkt), za to, że jego gra była najbardziej profesjonalna ze wszystkich. Trzeci na podium stanął heavymental – według mnie niezasłużenie, jego praca nie podobała mi się. Raz że była krótka, dwa że grywalność zerowa. Podobała mi się jedynie grafika.

Wracając do mojej pracy, uważam że została trochę niedoceniona. Sam postawiłbym ją na trzecim miejscu ale widocznie tylko mi się podoba :)

Może na następnym compo będzie lepiej… Gratuluje zwycięzcom i przegranym, najważniejszy jest przecież udział.

Garść linków
Compo na oficjalnej stronie konkursu
Temat compo na forum gamedev.pl
Moja ocena prac (na forum)
Download wszystkich prac
To co wyżej tylko na rapidshare.de (szybszy download)

Po przerwie

28, luty 2008

Witam wszystkich, nie bylo mnie tu juz dluzszy czas (ferie, snowboard, imprezy ;) ), wiec wypadaloby cos w koncu napisac.

Jak ostatnio pisalem pracuje nad edytorem map do gry Red Streets. Red Streets bedzie podobne do pierwszych czesci serii GTA. Pisana w C++, za render odpowiada OpenGL. Teraz nieco o edytorze.

Do tej pory zrobione:
- szkic layoutu (kontrolki itd)
- viewport (render DirectX)
- podstawowe przeksztalcenia modeli (obroty, skalowanie, translacje)
- wyswietlanie warstw podloza (dostepne 3 warstwy)
- input z myszki, przesuwanie modeli (prowizorka, do poprawienia)
- kamera
- logger

Do zrobienia:
- format map
- zapis/odczyt map
- zarzadzanie modelami
- loader meshy *.obj (w tej chwili czyta tylko *.x)
- poprawa dzialania niektorych elementow
- cala reszta :P

Uzywam:
- c++ – kod
- DirectX – rendering
- wxWidgets – GUI

Screeny z edytora:

Free Image Hosting at www.ImageShack.us

Free Image Hosting at www.ImageShack.us

(kliknij zeby powiekszyc)

W tle moj piekny pulpit z Warsztatowa tapeta ;]

I screeny z gry (grafika testowa):

Free Image Hosting at www.ImageShack.us

Free Image Hosting at www.ImageShack.us

(kliknij zeby powiekszyc)

Sory ze napisze kilka notek po kolei ale nie chce wrzucac do jednej kilku tematow ;)

Aktualne projekty

17, styczeń 2008

W ostatnim czasie byłem trochę zajety, wiadomo, zbliża się koniec semestru, wystawianie ocen itd. Koniec usprawiedliwień, czas przejść do konkretów.Zawiesiłem chwilowo prace nad silnikiem bo dostałem propozycję uczestniczenia w pewnym małym projekcie. Będzie to gra w stylu pierwszych częśi GTA. Grałem już w mini techdemko i zrobiło na mnie dobre wrażenie – szczególnie fizyka jazdy samochodem. Ja zajmę się pisaniem edytora map. Będzie ciężko bo jeszcze nigdy niczego takiego nie pisałem ale mam nadzieję, że jakoś sobie poradzę. Piszę w c++ z wykorzystaniem wxWidgets a samym renderingiem zajmuje się DirectX. Newsy z placu boju zamieszczę później. Na razie mam wyświetlanie głównego okna + inicjalizacja i obsługa DirectX-a, wyświetlanie i “manewrowanie” modelami (*.x ale jeszcze się troche to pierdzieli), kamera, logger i tego typu pierdółki. W najbliższym czasie mam zamiar uporządkować kod, solidnie go zakomentować i poprawić wyświetlanie modeli.

Do następnego razu!

Logger skończony

12, grudzień 2007

Dzisiaj skończyłem pisać logger. Z założenia miał być prosty i nieskomplikowany, więc chyba się udało. Po uruchomieniu exe’ka generuje plik log.txt składający się z różnych komunikatów. Prototyp takiego komunikatu wygląda mniej więcej tak:

[typ_komunikatu] [data] [godzina] Treść

Na przykład:

[error][ 12.12 ][ 22 : 20 : 7 ] Cannot load texture
[okay][ 12.12 ][ 22 : 20 : 0 ] Mesh loaded
[warn][ 12.12 ][ 22 : 20 : 7 ] ‘W’ was pressed

Jestem świadomy, że nie powala funkcjonalnością ale jak na razie starczy :)

Aha, logger zrobiony jako singleton dostępny w każdym pliku projektu.

ps. Może głupie pytanie ale wie ktoś jak tu wyjustować tekst w wordpress’ie?:D

Egg Framework skończony.

3, grudzień 2007

Skończyłem pisanie frameworka pod silnik – kod jest przejrzysty, w miare ładny i wygodny. Framework jest mocno wzorowany na tutorialach i kodzie Chada Vernona (link). Niektore z featursów szkieletu:

  •   inicjalizacja directx, tworzenie, wyświetlanie okna, zmiana trybu fullscreen/windowed, solid/wireframe, utrata urządzenia itd.
  • statyczny i dynamiczny bufor wierzchołków
  • teksturowanie
  • obsługa statycznych modeli *.x
  • wczytywanie i wyświetlanie map opartych na heightmap’ach
  • timer i time based movement
  • wejście z myszki i klawiatury
  • obsługa czcionek
  • kamera przypominająca trochę tę z FPS’ów

To tak z grubsza tyle. Teraz zabieram się za czytanie nowych tutoriali i zastanawianie od czego zacząć pisanie dalszej części silnika…

 Ps. Aaa, brakuje mi jeszcze logo :)

Zmiany, zmiany…

22, listopad 2007

Witam po przerwie!

Jak widać blog przeszedł całkowitą metamorfozę – nowa strona, nowy layout, nowy system blogowy. Przerzuciłem się na WordPress’a z kilku powodów – przede wszystkim dlatego, że to co mam teraz bardziej przypomina stronę domową niż bloga (co było moim celem). To nie jest jeszcze wersja ostateczna, możliwe, że sam stworzę nową stronę od podstaw ale raczej zostanę przy WP.

Ostatnio pisałem ponad miesiąc temu. Sporo się zmieniło – znudziło mnie programowanie Torishimi – projekt niestety został porzucony. Programując 2D czułem się jakbym wogóle nie szedł do przodu tylko stał w miejscu. Po niedługim zastanowieniu wybór nowego projektu padł na – kultową już - silnikologię stosowaną :D Wygląda to tak, że uczę się ciągle DirectX’a i nauczone rzeczy staram się pakować w eleganckie klasy i dołączać do poprzednich. Już teraz widzę trochę zamieszania w kodzie ale ogólnie nie jest źle. Silnik przybrał kodową nazwę Egg, czyli poprostu jajko. To tyle na dzisiaj :)

Torishimi – postępy

11, październik 2007

Wypadało by coś napisać o postępach przy Torishimi, a więc po kolei.W ostatnich dniach zajmowałem się głównie:

1. Mapą – wyświetlanie, wczytywanie z pliku, teksturowanie. Na obecną chwilę schemat działania wygląda tak:

- otwieramy plik mapa.txt
- interpretujemy go
- teksturujemy odpowiednimi teksturami kafelki
- wyswietlamy mape

Mapa w pliku txt wygląda przykładowo tak (mapa 5×5 kafelków):

00000
01010
00200
00200
33333

Gdzie cyfry oznaczają rodzaj pola – czy to ma być trawa, lód czy może drzewo. Wiem, sposób godny mistrza :D
Optymalizacji nie stwierdzono.

2. Bohater – a właściwie tylko klasa wyświetlająca obrazek w formacie *.tga z kanałem alfa. Możemy równierz poruszać “bohaterem” po kafelkach mapy. Bez animacji.

Do zrobienia w obecnym milestone:

- dopracowanie mapy i bohatera
- optymalizacja

W następnym kamieniu milowym pewnie zajmę się animacją – brrr, nigdy tego nie robiłem.

Milestone #1

6, październik 2007

Właśnie ukończyłem pierwszy milestone nowego projektu :) Zajęło mi to dwa tygodnie (niezbyt intensywnego kodzenia) a oto co zrobiłem:

  • napisałem coś w stylu design doca
  • zaadoptowałem do projektu regeditowy framework z WARP’a
  • napisałem menager stanów
  • sprężyłem to jako tako z frameworkiem
  • zrobiłem wyświetlanie quadów – wydaje się banał a miałem najwięcej problemów (głównie przez to,  że nie wczytywałęm się za głęboko w niuanse frameworka)
  • skończona jest klasa pojedynczego kafelka (łaaaał)
  • uporządkowałem i okomentowałem wszystko

Wydaje się mało ale trochę sie z tym zeszło :) Jak gra zacznie nabierać kształtów to może napiszę o niej coś więcej.