Thursday, February 2, 2012

GGJ 2012 notları

Bu yılki Global Game Jam benim için o kadar yorucu geçti ki onunla ilgili yazıyı daha yeni yazıyorum, etkinlikten birkaç gün sonra.

Metutech-ATOM'un ODTÜ'de düzenlediği GGJ'yle ilgili kısa notlarımla yazıya giriş yapayım. Kişisel maceralarıma da yazının devamında değineceğim, çünkü herkesin ilgisini çektiğini sanmıyorum.

- Grafiker ve tasarımcı kıtlığı söz konusuydu. Etkinliğe kayıt yaptıran, ama katılmayan bir sürü grafiker varmış.
- Ankara bu aralar epey soğuk. Etkinliğin yapıldığı kongre merkezinin içi bence yeterince ılıktı, dışarıdaki buz gibi havaya rağmen. Geçen yılki gibi götümüz donmadı en azından.
- Yemekler de güzeldi, özellikle geçen senekilerle kıyaslandığında. Geçen yıl bazı öğünler o kadar kötüydü ki bir sabah arkadaşlarımla yemekhaneye gittiğimizde "Galiba yemek artıklarını atmayı unutmuşlar, onlar da bayatlayıp etrafı kokutmuşlar" demiştik. Mide bulandırıcı, kirli çorap gibi bir koku. Sonra o kokan şeyin hazırlanan pide olduğunu görmüştük. Ama neyseki bu seneki yemekler tatmin ediciydi.

- Yer yatakları yoktu. Uyuma odası olarak bir kongre salonu ayarlanmıştı. Kongre salonunun koltuklarına oturup uyumamız planlanmıştı, ama ben oturarak uyumayı başaramadım ("Keşke gerçek, sıkıcı bir kongre verilse de uyuyabilsem" diye kendi kendime espri yapıp güldüm). Bu yüzden beton zemine battaniyemi serip uyuyabildim ancak. Tamam; otobüste, uçakta filan arkama yaslanıp uyuyabiliyorum, ama o koltuklarda uyumayı başaramadım ve bu konuda yalnız değildim.
- Bu senenin teması Ouroboros'tu. Tema olarak aslında bize sadece şu yanda gördüğünüz resim verildi.




- Ben, Ragnor (Ozan Emirhan Bayyurt) ve Roselyn (Gülümhan Eraslan) birleşip Renatus isimli oyunu yaptık. Şu ana kadar yaptığımız şeyden memnunum, ama bana sorarsanız elden geçirilmesi gereken çok sayıda teknik detay var. Planlarımdan birisi gözüme çarpan önemli pürüzleri gidermek, ondan sonra bu oyunu burada sizlerle tekrar paylaşmak.

Oyundan kısaca bahsetmem gerekirse; bu üstten görünüşlü shoot'em up'ta cehennemden kaçmaya çalışan lanetlenmiş bir ruhu yönetiyoruz. Her öldüğümüzde yeniden canlanmak ve tüm bu eziyeti yeniden çekmek gibi bir lanetimiz var. Ama oyundaki asıl amacımız, bu cehenneme kapatılmış olan başka ruhları da kurtarıp peşimize takmak.

Oyunun son bölümünde kapıyı koruyan dev bir yılanla mücadele ediyoruz. Bildiğimiz Snake oyununu düşünün, ama bu sefer yılan bizim düşmanımız.

Bu arada, yakın arkadaşlarımla birlikte oyun yapmak çok keyifli bir tecrübeydi.

Eveet, şimdi gelelim kişisel GGJ macerama.




Acil bir şekilde okulumdan mezuniyet belgemi almam gerekiyordu, bu gerekliliğin tam da GGJ'nin haftasonuna denk gelmesi komik oldu. Cuma sabahımı karlı bir günde kampüsün dört bir yanında dolaşarak geçirdim, çünkü mezuniyet belgemi alabilmem için bir sürü alakasız binaya gidip form imzalatmam gerekiyordu. Aslında keyifliydi; Kuzey Kutbu'nda kurulmuş, terkedilmiş bir tesiste dolaşıyormuşum gibi hissettim. Ama yorucuydu. Neyseki bavullarımı ve laptop'ımı önceden ofise bırakmıştım.

Benim çalıştığım işyerinin (LamaGama Productions) GGJ destekçilerinden birisi olması benim için büyük bir avantajdı, ekip arkadaşlarım da GGJ'nin yapıldığı yere jüri üyesi olarak gelecekti. Benim beklentim, GGJ saati yaklaştığında herkesin toplanıp birlikte etkinliğe gitmesiydi (kendime not: bir araba ve ehliyet al artık!). Ama sonra gördüm ki, bu iş daha geç bir saatte yapılacaktı ki benim zamanında orada olmam imkânsızdı. "Belki yolda taksi tutarım!" beklentisiyle laptop'ımı kucaklayıp etkinlik alanına doğru yürümeye başladım, oranın yakınlarda bir yerde olacağını düşünerek (ama neyseki bavulum Gökhan Abi'nin (Gökhan Ertem) arabasındaydı, bir de bavulumu yanımda taşımak zorunda kalsaydım herhalde ölürdüm. Teşekkürler Gökhan Abi).

Yanılmışım. O kadar yakın bir yer değilmiş. Ve boş bir taksi de bulamadım (taksi durağını aramıştım ama hep meşgul çaldılar). Tırmandığım ıssız bir kestirme yokuşta başım dönmeye başladı, bir süre karlara uzanıp soluklanmam gerekti, yorgunluktan bayılacaktım (ve aklıma Kabusta Kaybolmak'taki soldaki sahne geldi ister istemez).

Sonra gücümü toplayıp laptop'ımla birlikte etkinlik alanını buldum. Keşke gitmek için arkadaşlarımı bekleseymişim, kısa bir süre sonra arkadaşlarım geldiler. O kadar yolu boşu boşuna yürümüşüm.


Epey geç kalmıştım, insanlar çoktan gruplarını kurmuştu. "Ben gidip grup toplıycam!" beklentisine sahiptim, bu olayların öncesinde, ama şimdi girecek grup bile bulamadım. Sonra benim gibi geç kalan arkadaşım Ragnor'la birlikte grup kurduk, Rose'u da ekibimizin görselcisi olması için ikna ettik.

Temayla ilgili aklımıza birkaç oyun fikri geldi. Bunlardan yapılabilirliği en yüksek olan fikir tilemap'li bir shoot'em up'tı. Oyunu yapmak için Ragnor'la ikimizin bildiği dil ve kütüphane olarak C++'ı ve Allegro'yu tercih ettik. Ragnor bana Flash'ı ve Action Script'i kullanmamızı önerdi, çünkü bu tip bir oyun yapmak için oldukça kullanışlıydı, ama ben "Acaba kısa sürede öğrenir miyim? Vakit mi kaybederiz?" endişesine sahip olduğum için C++'la başladık.

Bu kötü bir tercihti. Basit şeyleri yapmak için bile uğraştırıyordu. Bu GGJ'ye zaten kötü bir kondisyonla başladığım, zaten hafta içinden beri zihnen yorgun olduğum gerçeğini unutmuştum. Dandik bir collision detection'ı bile kısa sürede yazamadım, benzeri şeyleri daha önce defalarca yazmış olmama ve algoritmalarının zaten tam karşımda olmasına rağmen.



Akşam bir ara Ragnor'la birlikte ODTÜ'nün içinde, bulunduğumuz yere yakın olan Çarşı'ya gidip erzak stokladık. Hava soğuktu, yerler de çok kaygandı, ama yine de güle oynaya yürüdük. Buz tutmuş bir merdiveni ben kaydıraktan kayıyormuşum gibi indim, çünkü orayı normal bir şekilde inseydim zaten ayağımın kayacağından ve daha sert bir şekilde düşeceğimden emindim.

İlk gece nispeten erken bir saatte yattım (bkz: uykusuzluk ve yorgunluk) ve öğleye doğru uyandım. Uyandığımda yarışmanın 20'nci saatinde filandık.

46 saatin yaklaşık olarak 22'inci saatinde Flash'a geçtik. Flash'la, o ana kadar C++'la yaptığımız aşamaya kadar gelmemiz çok kısa sürdü. Benim Action Script'i gerçekten bir şeyler kodlayabilecek kadar öğrenmem de. Evet, oyunu geliştirme ortamını 48 saatin yarısında değiştirmek epey radikal bir karar, ama keşke en başından beri Flash'ı kullansaymışız.

Geri kalan 24 saat boyunca hiç uyumadım. Flash'ı öğrendim ve oyunu (özellikle boss yılanını) kodladım. Son saat hariç. Büyücülerin manasının bitmesinin nasıl bir his olduğunu gördüm yeniden. Son saatimi Ragnor'un yazdıklarıyla benimkisinin entegrasyonuyla ve boss savaşının game logic kodlamasıyla geçirmem gerekiyordu, ama zihnim sanki 3-4 kadeh şarap içmişim gibi yorgundu. Yapmam gereken işi arkadaşımın üstüne yıkmak zorunda kaldım, çünkü en basit işlemleri bile kodlayamayacak haldeydim. Hoş, üniversitedeyken 30 saat boyunca bitirme projemle ve raporla uğraşabildiğim zamanlar olmuştu, ben de bu geçmişteki metanetime güvenmiştim. Ama onların hiçbirinin öncesinde bayılacak kadar yoğun bir fiziksel aktiviteyle de uğraşmamıştım, bunu göz önünde bulundurmalıydım.

Teknik olarak pürüzleri bulunan, ama yine de yapmaktan dolayı gurur duyduğum bir oyun oldu Renatus. Karanlık, kasvetli bir oyun yapmak zordur. Bunu başardığımıza inanıyorum, özellikle Rose'un intro çizimleri ve oyun içinde kullandığımız ışıklandırma hilesi ile.

Oyunların sunumları da bittikten sonra ben ödül törenini bekleyemeden eve gittim, iyice zombileşmiş bir şekilde. Bir taksi tutabileceğim araba yoluna çıkmak için önce buzlanmış bir merdivenden çıkmam gerekiyordu; bavulum, laptop çantam ve elimdeki bir poşetle birlikte! Yukarı tırmanmaya çalışırken buzun üzerinde kayıp elimdeki eşyalarla birlikte merdivenlerin üzerinde devrildim. Sert bir düşüş olmadı, elimdeki eşyaları bıraktım ve  aşağı doğru kayarken altımdaki buzlu merdivenleri kavramaya çalışıp sürtünme kuvvetini artırdım. O merdivenden yola çıkacak diğer insanların yardımıyla eşyalarımı yukarı taşımayı başardım.

GGJ esnasında aklıma sürekli Asporia gelip durdu. GGJ'nin yapıldığı kongre binasının mimarisi çok güzeldi, tam benim hayal etitğim bir Asporia binası gibi. Uyanık kaldığım gece saat 3-4 civarları ortalıkta, karlı bahçenin kaygan olmayan zemininde gezinerek hayallere daldım. Soğuk, karlı bir gecede güzel, ılık bir binada kahve eşliğinde uyanık kalıp sevdiğim bir işi yapmak benim tam da hayal ettiğim hayat. Ama mümkünse betonda yatmayayım.

Kutup gecesi, kış ve kar temasını çok seviyorum. Ama şunun tekrar farkına vardım: Kar, hayatınızı zorlaştırmaya başladığı anda romantizmini kaybeden bir doğa olayı.

2 comments:

Roselyn said...

Kendime fazla yüklenip cıngar çıkardığım yerleri kesmişsin 8D Lütfen, stresliyken çok çekilmez oluyorum biliyorum, özür diliyorum.

Kar cidden güzeldi.

Oyunun yeniden elden geçmiş versiyonunu dört gözle bekliyorum. Eve gelip yaklaşık bir 250413541354034201 saat dinlendikten sonra baktım, güzel olmuş cidden <3

Ahmet Kamil Keleş said...

Ama o sinirlendiğin zaman gerçekten haklıydın. Diğer ekiplere göre biz oldukça geri kalmıştık. Eğer haksız olsaydın ben de sana sert çıkışırdım, çünkü bu durum beni de gerdi.

Ve daha da kötüsü, biz bu oyun motoru değiştirme kararını o senin sinirlenmenden bile sonra verdik. Teknik konudaki kararsızlığımız yüzünden Ouroboros'un kendisine benzedik. Senin yerinde olsaydım ben de bu durumdan dolayı endişe duyardım, ama benim ve Emirhan'ın bu oyunu 24 saatte iyi kötü kodlayabilecek kadar tecrübe sahibi olduğumuzu bildiğim için umutsuzluğa kapılmadım.