Bojkar\'s dev blog
sie 24
LUA in da house
icon1 admin | icon2 c++, engine, programy | icon4 08 24th, 2009| icon37 Comments »

No i udaÅ‚o mi siÄ™ w koÅ„cu to co planowaÅ‚em od dÅ‚uższego czasu ale nigdy nie mogÅ‚em siÄ™ zebrać. Od wczoraj mogÄ™ siÄ™ cieszyć podpiÄ™tÄ… lua’Ä…. DziÄ™ki temu w koÅ„cu mam rozgraniczonÄ… logikÄ™ gry od samego silnika. UdaÅ‚o mi siÄ™ nawet przepisać caÅ‚a logikÄ™ gracza na skrypty i dużą część samego silnika. Luabind spisuje siÄ™ tutaj bardzo dobrze. Tylko podczas przepisywania logiki pojawiÅ‚ siÄ™ pewien problem, który jest argumenty dla ludzi przeciwnych jÄ™zykom skryptowym a mianowicie debugowanie. JeÅ›li chodzi o pisanie skryptów w “czystym” lua to z debugowaniem wiÄ™kszego problemu nie ma, ale znowu jak podepniemy np. nasz wÅ‚asny silnik wtedy problem siÄ™ pojawia. Na szczęście nie jest z tym tak źle jak to wyglÄ…da. Z pomocÄ… przychodzi nam program o nazwie Decoda (http://www.unknownworlds.com/decoda), który jest bardzo fajnym debugerem lua. Program jest w peÅ‚ni aplikacjÄ… graficznÄ… (“konsolówki” fuuuu), posiada wÅ‚asny dość ciekawy edytor skryptów (wciÄ™cia, kolorowanie i podpowiadanie skÅ‚adni, itp), project explorer oraz to co nas najbardziej interesuje czyli debuger. Posiada on takie funkcjÄ™ jak: breakpoint’y, call stack oraz output czyli to co jest najbardziej potrzebne. Zasada dziaÅ‚anie jest bardzo prosta, tworzymy nowy projekt zaznaczamy exe’ka w którym używamy naszych skryptów, ustawiamy “working directory”, wciskamy F5 (skÄ…d my to znamy..) i odpala siÄ™ nasza aplikacja, Decoda sama wczytuje skrypty użyte w niej i zaczynamy debugować. Sama zasada dziaÅ‚ania debugera jest bardzo podoba jak ta w Visuala, wiÄ™c nie ma problemu z jej obsÅ‚ugÄ….
Ogólnie program oceniam bardzo pozytywnie, jest tym czego szukaÅ‚em, teraz pisanie skryptów jest o wiele Å‚atwiejsze. CiekawostkÄ… jest to, że aplikacja umożliwia debugowanie pod konsolami xbox360 oraz ps3. Niestety aplikacja nie jest darmowa, no ale w sumie nie ma co siÄ™ temu dziwić. Pocieszeniem jest cena, która nawet w naszym kraju nie jest wygórowana. Licencja indie kosztuje 50$ natomiast licencja “peÅ‚na” jest już droższa i już nie taka niska bo 400$, ale myÅ›lÄ™, że dla sporej części osób licencja indie (dla firm i osób których roczny dochód nie przekracza 100k$) jest wystarczajÄ…ca.

decoda
sie 21
Co w silniku piszczy
icon1 admin | icon2 c++, engine, projekty | icon4 08 21st, 2009| icon31 Comment »

OdkÄ…d mieszkam w Szczecinie wieczorami mam trochÄ™ czasu i mogÄ™ znowu wrócić do silnika. Jako, że dawno już tam nie zaglÄ…daÅ‚em musiaÅ‚em trochÄ™ “poodkurzać”. Na dobry poczÄ…tek jako, że silnik siÄ™ rozrasta dodaÅ‚em namespace’y i część metod zamieniÅ‚em na const’owe. Dalej przerobiÅ‚em mojÄ… leciwÄ… i lekka kulejÄ…cÄ… (ale dziaÅ‚ajÄ…cÄ…!) serializacje. Teraz zamiast kilku metod postanowiÅ‚em sobie przeciążyć operator << (serializacja) i >> (deserializacja) i do tego jest maÅ‚y menedżer archiwów. Jak to wszystko dziaÅ‚a? Najpierw oczywiÅ›cie musimy stworzyć klasÄ™ archiwatora (czyli tam gdzie bÄ™dziemy zapisywać / odczytywać dane) implementujÄ…cÄ… interfejs IArchive. NastÄ™pnie musimy obiekt tego archiwum (oczywiÅ›cie menedżer zadba o to, żeby nie tworzyć 2 razy tego samego archiver’a). Teraz możemy już do niego zapisywać / odczytywać:


//serialize
arch << someInt << someVector << someOther;
//deserialize
arch >> someInt >> someVector >> someOther;

Oprócz tego do silnika dodaÅ‚em obsÅ‚ugÄ™ skryptów. ZdecydowaÅ‚em siÄ™ na bardzo popularna lua’e. Szczerze mówiÄ…c sama skÅ‚adnia bardziej mi siÄ™ podoba w AngelScript ale za lua przemawia jej szybkość oraz jej popularność wÅ›ród gamedeveloperów. Do połączenia lua’y z C++ użyÅ‚em biblioteki luabind, która w bardzo Å‚atwy sposób pozwala na “zbindowanie” lua’y do C++. Teraz dziÄ™ki temu caÅ‚a logika gry bÄ™dzie spoczywać na skryptach i bÄ™dzie można jÄ… Å‚atwo modyfikować bez ponownej kompilacji kodu (również przez osoby trzecie).
UdaÅ‚o mi siÄ™ również dodać klasÄ™ do obsÅ‚ugi klawiatury oraz myszki. Teraz w bardzo Å‚atwy i przystÄ™pny sposób mogÄ™ mieć obsÅ‚ugÄ™ tych dwóch urzÄ…dzeÅ„ w każdym miejscu silnika (oraz skryptów). PodłączyÅ‚em też już część PhysX, tj. character controler oraz mesh cooking, muszÄ™ jeszcze do edytora “dopiąć” opcje fizyczny dla aktorów.
Na dzieÅ„ dzisiejszy zostaÅ‚o mi dopracowanie meanedżera serializacji, skoÅ„czenie peÅ‚nego podpinania silnika do lua’y, refactoring fabryki klas, oraz klasa do dźwiÄ™ku i w koÅ„cu bÄ™dÄ™ mógÅ‚ siÄ™ wziąć za renderer :)

sie 6

Dzisiaj w pracy natknałem się na bardzo głupi błąd, nad którym starciłem kilkanaście cennych minut. Może nie ma czym się chwalić ale warto zwrócić na to uwagę. Dodawałem do pewnego modułu, functor i chciałem go przetestować w ten oto sposób (pseudo kod):


void Init()
{
      Functor<CFoo> func(&mFoo, &CFoo::foo);
      myObj->SetFunctor(&func);
}

Jakież było moje zdziwienie, gdy poźniej chciałem wywołać mojego functora, oczywiście poza metoda Init() :) Ciekawe co się stało z func i wskaźnikiem na niego po wyjściu z init? :) Na usprawidlenie mogę powiedzieć tylko to, że na platformę na jaką to było pisane nie używamy debugera z visual stuio i trzeba debugować narzędziem zewnętrznym i to dość "ciężkim".

Kolejną rzeczą o której chcę wspomnieć jest różnica w prędkości wykonywania się pre i post inkrementacji. Kiedyś w jakiejś książce dość starej książce wyczytałem żeby stosować pre inkrementacji zamiast postinkrementacji, i że niby to jest szybsze. Do tego dzisiaj kolega zwrócił mi na to uwagę w moim kodzie więc postanowiłem to sprawdzić na przykładzie kompilatora z visual studio 2008 express. Zrobiłem prosty przykład (pętla for wykonana 1000x z kilkoma mnożeniami i dodawaniami w środku) i dzięki pomocy kolegi który się zna na assemblerze zdeassemblorawalismy go. I co się okazało? Oba kody są identyczne :) Może w jakiś skomplikowanych przykładach jest jakaś znaczna różnica ale przy zwykłych forach i inkrementacjach przy dzisiejszych kompilatorach i procesorach, różnicy nie ma (przynajmniej mi się tak zdaje :) .

sie 4

No i udaÅ‚o siÄ™, od 3 dni siedze w nowym mieszkaniu w Szczecinie :) Od wczoraj pracuje w szczecinskiej firmie game-lion zajmujÄ…cÄ… siÄ™ tworzeniem i portowaniem gier. Dzisiaj minÄ…Å‚ mój drugi dzieÅ„ i oceniam go bardzo pozytywnie. Mieszkanie dostaÅ‚em narazie od firmy i jest ono 100m od siedziby wiec do pracy mam bardzo blisko. Pierwszy dzieÅ„ caÅ‚y zleciaÅ‚ na zaÅ‚atwianiu formalnoÅ›ci i konfiguracji stanowiska, i tak pod koniec dnia moje stanowisko z ndev’em(devkit do nintendo wii) i dodatkowym telewizorem bylo już gotowe:). DziÄ™ki temu od 2 dni pracuje w pracy w której zawsze chciaÅ‚em pracować zawodowo czyli w game-devie (do tego jeszcze mam możliwość pisania na konsole, gdzie raczej w domowych warunkach nie jest to możliwe). Na poczatÄ™k zostaÅ‚em zawalony dużą iloÅ›ciÄ… manuali i doc’ów od nintendo ale powoli to ogarniam, dzisiaj nawet udaÅ‚o mi siÄ™ coÅ› wyÅ›wietlić na ekranie :) Od dzisiaj pracujÄ™ nad jednÄ… z gier na wii i mam nadzieje, że troszkÄ™ mojego udziaÅ‚u w niej bÄ™dzie…