Kako pravimo naše (HOPA) igre

Polje HOPA igara su vode u kojem naš studio već godinama dobro pliva, a kombinacija različitih stilova i brzo prilagođavanje različitim situacijama je ono što nas održava na površini. Iako za izradu svake naše igre koristimo i malo magije, bez nekih tehničkih mogućnosti i rešenja sve ideje bi ostale samo lepe bajke. Sigurno da celokupan

Damir Jugović - 11. Februar, 2015.

Polje HOPA igara su vode u kojem naš studio već godinama dobro pliva, a kombinacija različitih stilova i brzo prilagođavanje različitim situacijama je ono što nas održava na površini. Iako za izradu svake naše igre koristimo i malo magije, bez nekih tehničkih mogućnosti i rešenja sve ideje bi ostale samo lepe bajke.

Sigurno da celokupan proces pravljenja igre ne može da stane na par listova papira, ali ću pokušati da u nekoliko kratkih crta opišem na koji način mi u Mad Head Gamesu radimo ono što najbolje znamo — pravimo igre.

Na sledećoj slici predstavljen je tok kreiranja igre kroz faze:

hopa-games-process

Neću se baviti oblastima dizajniranja, concept arta i paintinga, pa ću krenuti od pretpostavke da je sva grafika završena i spremna za ubacivanje u igru.

Export grafike

Čuveni Adobe Photoshop je de facto standardna alatka svakog 2D digital painting artista i fotografa, pa se i kod nas u studiju daleko najviše koristi, a najčešća verzija je CS6. Kada artista završi scenu, technical artist preuzima posao — scena se eksportuje i kreiraju se teksture.

Koristimo DirectDraw Surface format za teksture jer se slike ovog formata direktno dekompresuju pomoću hardvera na GPU-u, a sa ovim formatom našli smo najbolji balans kvaliteta slike i veličine fajla u odnosu na druge formate koji po veličini koju zauzimaju na disku mogu biti znatno veći od .dds-a.

Sa kreiranjem tekstura, pravi se i .sync fajl, koji pamti XY pozicije svih eksportovanih lejera, te služi da pri sinhronizaciji scene i PS-a svi lejeri stoje na svom mestu, onako kako su i nacrtani. Samo imenovanje lejera je veoma bitna stavka jer većina gameplay automatizacija koje koristimo oslanja se na ime lejera. Na primer, ako lejer nazovemo portal_castle, klikom na taj objekat u igri izvršiće se prelazak igrača na drugu scenu pod imenom Castle.

Editor scene

Kao glavni i osnovni editor scene, koristimo Autodesk-ov 3ds Max 2009. Ovaj program je široko rasprostranjen, a većina ljudi koji se bave animacijom i 3D modeliranjem dobro je upoznata sa njim ili nekom drugom verzijom Max-a. Pomoću skripte za sinhronizaciju, svi lejeri iz Photoshop-a ubacuju se u Max, pa je dalje moguće raditi na animacijama i daljem uvezivanju gameplaya.

Pored skripte za sinhronizaciju sa Photoshop-om, tu su i razne druge skripte koje svima nama olakšavaju svakodnevni posao, npr. skripte za fade in/оut lejera, generisanje dummy objekata, kopiranje animacije, postavljanje idle animacije, hotspot-ovanje… Sve ove skripte pisane su u Max-ovom jeziku MAXScript.

Poslednji korak je generisanje .scene fajla. Kako engine ne koristi direktno .max fajl, pri svakom snimanju scene u Max-u kreira se datoteka imena ime_scene.scene, koja je tekstualnog formata.

U taj fajl se upisuju imena objekata, njihova velicina, putanje tekstura, providnost, animacija lejera (translacija, rotacija i skaliranje tokom timelinea) i razne druge osobine koje engine čita i na taj način renderuje scenu i objekte na njoj. Format fajla je tako definisan da bude što brži za parsiranje, kako bi se uštedelo vreme čitanja scene.

Sledeći planirani korak je prelazak na Blender, kao osnovni scene editor. Blender, za razliku od Max-a, koristi daleko raspostanjeniji Python kao skriptni jezik, a preko bpy biblioteke moguće je u potpunosti kontrolisati scenu i objekte na njoj. Ovaj prelazak će zasigurno biti težak i naporan jer sve skripte za Max su dobro optimizovane i dugi niz godina besprekorno rade svoj posao, dok je za Blender potrebno napisati sve to ispočetka.

Ne treba zaboraviti i da je potrebno vremena kako bi se ljudi prilagodili novom okruženju. Sa druge strane, velika prednost Blender-a je što je Open Source: izdaje se pod GPL licencom, pa na taj način može se u potpunosti prilagoditi potrebama technical artista i programera.

Lokalizacija

Pri samoj izradi igre, strogo se vodi računa o tome kako će se igra portovati na neke druge jezike. Ovo postižemo na dva načina: imenovanjem lejera pri kreiranju scene (za lejere specifično vezane za određeni jezik) i preko localization.txt fajla. Za svaki jezik na koji “prevodimo” igru postoji zaseban tekstualni fajl. Svaka linija tog fajla sastoje se iz ključa i lokalizovanog teksta. Evo primera jedne linije lokalizacije na engleskom jeziku:

ui_bonus_chapter — “Bonus Chapter”

Na nemačkom ova linija izgleda ovako (localization_de.txt):

ui_bonus_chapter — “Bonuskapitel”

Na japanskom (localization_jp.txt):

ui_bonus_chapter — “ボーナス章

Kako ne bismo morali da prepravljamo po kodu i menjamo određene linije specifično za neki jezik, koristimo samo ključeve iz lokazacije, pa pomoću ključa dobijamo tekst string na željenom jeziku.

MHG Manager

Kada je igra spremna za testiranje ili distribuciju, pakuje se u tzv. buildove. Ovde nastupa MHG Manager: to je naša alatka napisana u Javi i delom u Pythonu koja pakuje buildove. Javu smo izabrali zbog njenog principa “write once, run anywhere”, pa na taj način Manager koristimo i na Mac-ovima. Sam build je zip fajl i se sastoji iz dva glavna dela:

mhg-manager-small

Pored standardne mogućnosti pravljenja buildova, MHG Manager koristimo i kao generator atlasa, fikser za lokalizaciju (sortiranje po ključevima i razne druge provere), generator ikonica i fontova.

Glavna ideja MHG Manager-a je da automatizuje i olakša svakodnevne zadatke; uspeli smo da objedinimo više malih skripti u jedan program. Koristeći jednostavan GUI interfejs, omogućili smo da svako može lako da sklapa buildove i na taj način skinuli teret sa leđa programera. Buildove sada pravimo u svega par klikova, odaberemo jezik i vrstu builda, kliknemo Make build i to je to, za par minuta imamo spakovan zip fajl sa linkom za preuzimanje sa našeg servera.

Game engine i skripta

Sam game engine (Madbox) je u najvećoj meri napisan u jeziku C++, dok su neki delovi enginea pisani u Objective-C. Samim tim što pravimo HOPA igre, i sam engine je tako prilagođen — razne HOPA funkcionalnosti su integrisani direktno u engine (inventory sistem, hint sistem, podrška za lokalizacije…).

Engine je usko povezan sa našim skriptnim jezikom, pa je iz skripte moguće izvršiti veliki broj poziva ka enginea, što nam omogućava da kompletan gameplay pišemo samo u skripti. O našem skriptnom jeziku Aleksa je već pisao i možete ga naći ovdeEngine ima i mrežnu podršku za komunikaciju sa serverom.

Gde smo i kakvi su naši planovi za budućnost?

Engine se trenutno pokreće na Windows-u, Mac-u i iOS-u. Kako se centar game industrije kreće ka mobilnim uređajima, tako se i naš studio prilagođava tržištu, pa su u toku i portovi ka drugim platformama, kao što su Android i Windows Phone.

Većina standarnih biblioteka koje se koriste u drugim game engineima može se naći i u Madbox-u: OpenGL za render grafike (planirana je i DirectX podrška za Windows OS), OpenAL za zvuk i Theora biblioteku za video snimke. U toku je i ubacivanje podrške za Box2D, besplatni 2D simulator fizike, takođe napisan u C++. OpenGL shaderi (GLSL) su sada sastavni deo enginea.

Ulaganje u tehnologiju jeste ulaganje u budućnost, tako da u Mad Head Gamesu dosta truda i vremena ulažemo u razvoj novih funkcionalnosti. Sam engine je prešao dug put, menja se konstantno i adaptira prema potrebama — do sada je bio samo HOPA specific, a kako igre koje trenutno pravimo i igre koje planiramo da radimo u budućnosti nisu samo ovog žanra, Madbox će izrasti u kompletan 2D engine koji će nam omogućiti da pravimo igre kakve želimo.