Monday, June 18, 2012

Acedia

Geçen haftasonu, Game Developers Turkey'in düzenlediği game jam'e katılıp Acedia isimli yeni bir macera oyunu çıkardım!

Öncelikle etkinliğin kendisinden bahsedeyim: Game Developers @ Turkey'deki fikirlerimizden birisi kendi game-jam'lerimizi düzenlemekti (bu arada ne kadar çok İngilizce kelime kullanıyoruz... bu başka bir yazının konusu). Belirlenmiş bir tema için, 48 saat boyunca ekip veya kişisel olarak oyun yaptığımız bir etkinlikti bu. . GGJ'den farkı, etkinliğe evlerimizden online olarak katılmamızdı. Epey eğlendik, ortaya güzel oyunlar çıktı. Kişisel favorilerim "Soğan Olsun Mu?" ve "Psychedelic Run".

Bu jam'in teması "Escape" 'di.

Oyun hakkında



Bu etkinlikte tanıştığım Mert Tanır ile hikaye odaklı, kısa bir adventure oyunu olan Acedia'yı çıkardık. Bir adventure oyunundan ziyade, kısa hikayeye benzedi Acedia. Doğru düzgün bir puzzle tasarlamak ve onu da kodlamak için pek zamanımız olmadı (aklıma bir-iki fikir gelmişti, ama onları pek sevmedim). Ama ortaya çıkan üründen memnunum yine de, çünkü benim yapmayı sevdiğim iş, insanlara bir şeyler anlatmak.

Bu game-jam'e, normal bir GGJ'ne ayrılanın belki üçte biri kadar vakit ayırabildik. Oyunu Adventure Game Studio gibi hem iyi bildiğim, hem de kullanımı kolay olan bir araçla hazırladığım için oyunun kodlamasını yetiştirememe gibi bir sorunum olmadı.

Çağlar Şahin'in portföyündeki güzel GDTjam1 Piyano-I eseri de bizim oyunla uyumluydu.

Hikaye



 

Şu hissi bilir misiniz? Her şeye sahipsinizdir. Kendi ülkeniz, size ait bir şato… Güneşin aydınlattığı her neyi görüyorsanız o sizindir. Her şey o kadar güzeldir ki, tüm dünyanızın yıkılması korkusu kalbinizin bir köşesine yerleşmiştir.

İşte ben bu durumdayım. Görüyorum, dev bir karanlık yaklaşıyor benim yuvama. Ama ne yapacağımı bilmiyorum. Bu karanlığı gören tek insan benim. Kime sorsam, böyle bir tehlikenin var olmadığını söylüyor. Yardımcı olacak kimse yok bana. 

Tek başıma halletmem gereken bir iş bu, bu tehlikeden kaçmak!

Oyunu buradan indirebilirsiniz (Windows için, 12,6 MB)

Tam çözüm

Oyunun bulmacası çok mantıklı olmadığı için oyunda takılmanız normal. Yapılması gerekenleri aşağıya siyah renkle yazdım, highlight ederek okuyabilirsiniz.

* Soldaki arcade makinasıyla oynamaya çalışın (el ikonu) 
* Sağdaki masadaki evrakları okuyun (el veya göz ikonu)
* Kahyayla konuşup (konuşma ikonu) bütün soruları sorun (şatodaki yakıtı ve halkın açlığını) 
* Oyun soluklaşmaya, kararmaya başlayacak. Ekranın altına tıklayıp arkaya doğru bakın 
* Renkler tamamen soluklaştıktan sonra tekrar Kahya’nın olduğu sahneye gelmeye çalıştığınızda oyun bitecek

Saturday, May 19, 2012

Photoset: Melek & Aslan

Bu yeni çektiğim fotoğraflardan epey memnun kaldım, umarım sizin de beğeninizi kazanırlar. Anneme aldığım Anneler Günü hediyesiydi bu melek figürü. Bana nedense Agnus Dei'yi ve Miserere Mei, Deus'u hatırlatıyor bu figür, resimleri çekerken de bol bol dinledim bu ikisini.




Bu arada, hepimizin 19 Mayıs Bayramı kutlu olsun!

Sunday, April 29, 2012

Kafesteki Ventrue

Oldukça kişisel bir yazı olacak bu. Öyle ki, burada yayınlamak konusunda tereddüt duyuyordum, ama zaten burayı milyonlarca kişi takip etmediği için sorun yok.

Son birkaç gündür aklımda olan bazı düşünceler var, kendimle ilgili. Birkaç şeyin farkına varmıştım, fikirlerine değer verdiğim bir dostumla yaptığım bir konuşma bu farkındalığımı pekiştirdi.

Ben kibar, asil bir insana dönüştüm. Eskiden çok mu kabaydım, sanmıyorum, ama son birkaç yıldır (ve özellikle son aylarda) hayatımı güzel insanlarla geçiriyor olmamın bende etki bıraktığını düşünüyorum. Ailem, iş arkadaşlarım ve dostlarımın ne kadar düzgün insanlar olduğunu geçen haftaki MetuCon'a gittiğimde anladım. Özellikle de bir iş arkadaşımın, Ulus'ta buzdolabı almak için gittiğinde muhattap olmak zorunda kaldığı insanlar, bizim Teknokent'te Cennet'te yaşadığımızı gösterdi bize (anlattığı anılar tam Quentin Tarantino filmi havasındaydı. Hayır, şiddet öğesi yok, ama çok ilginç karakterler vardı.).

Üfff, neyse, konudan saptım. Günlük hayatımda beni rahatsız eden şeyleri, fikir ayrılıklarımı negatif bir tutum sergilemeden ifade edebiliyorum; çünkü buna ihtiyacım olmuyor. Etrafımdaki insanlar o kadar iyi ki, dışarıda beni çok öfkelendiren bir olayla karşılaştığımda da ne yapacağımı şaşırıyorum, bu beni suskunlaştırıyor.


Farkına vardığım şey, benim belki de fazla kibar bir insana dönüşmüş olabileceğim. İçimde güçlü bir aslanın yattığını hissediyorum, ama bazı olaylar karşısında takındığım tavırları incelediğimde fark ediyorum ki ben bu aslanı bir kafeste tutuyormuşum.

Sadece öfkemi ifade etmek konusunda değil; yeni tanıştığım, karşı cinsteki birkaç kişiye flörtif yaklaşmayı istemiş olmama rağmen, beni omzumdan geriye çeken çekingen, saçma bir ahlaki kod ruhumda etkin hâlen. Bu konuyu burada daha fazla irdelemeyeceğim.


Çok kere öfkelendim, beni öfkelendiren kişilere sinirli sinirli bakmak dışında bu öfkemi sakladım, ama bazıları sert bir bakıştan fazlasını hak ediyordu. Gidip ağızlarını burunlarını kırmaktan bahsetmiyorum elbette; ama aynı olaylar ablamın veya babamın başına gelseydi, kabahati işleyenler sağlam bir ayar yemeden olay yerini terk edemezdi. Ve ikisi de asil ve kibar insanlardır.

Yaşadığım sinir bozucu olaylardan örnekler;

* Gökhan Abi'yle birlikte ODTÜ'de yürüyor, sohbet ediyorduk. Ben kaldırımın sağ tarafında yürüyordum. Sağ tarafımızda bir tane kafe vardı, o kafe yaklaşık olarak 1 metre yükseklikteki bir bölgenin üzerindeydi (yani şöyle diyeyim; bizim başımız, kafedekilerin bacaklarının hizasındaydı).

Birden bire gözümüzün önünden yanan bir izmarit geçti. Yanımızdaki kafede oturan bir genç, küllükteki sigarasına fiske atmış, tam kaldırıma doğru. Eğer iki-üç adım daha atmış olsaydım o yanan şey üzerime gelecekti. Hatta belki de yüzüme, eğer rotası biraz daha yüksekte kalsaymış.


Sinirli bir şekilde o yöne baktık, izmariti atan salak "Ayy çok özür dilerim" demek istercesine elini kaldırdı, utangaç bir şekilde. Biz de bir şey demeden yolumuza devam ettik, hatasını anlamış olduğunu umarak.


* MetuCon'un ilk günü için bir tane LARP'e katılmıştım. LARP için hazırlanmış, etrafında perdeler olan iki tane bölge vardı. Perdelerin üzerinde hangi LARP'ın oynandığı yazmadığı için içlerine girip bunu sormam gerekiyordu. Gittiğim ilk bölgede oynanan oyun benim katıldığım değildi, bu yüzden ötekine doğru yol aldım.

(Bu arada yeri gelmişken belirteyim. Eğer oynamak üzere olduğunuz bir LARP'in alanında tanımadığınız birisi gelip size onun hangi oyun olduğunu sorduğunda "Melih'in!" yanıtını verirseniz karşıdaki "Acaba 'Melihin' diye bir oyun evreni mi vardı? DM'in adı mı Melih'ti?" diye afallayabilir. Çünkü o etkinliğe katılan herkes Melih'i tanımak durumunda değil.) 


Neyse, ikinci alana girdiğimde bir tane tipleme perdelerin önünde nöbet bekliyordu. "Olduğun yerde dur! Ve geri dön!" diye bana emir verdi. İstifimi bozmadan "Niçin? Burada hazırlık mı yapılıyor?" diye sordum. Hayır, içeride bir tane kız giyiniyormuş, bu yüzden benim olduğum yerde durmam ve geri dönmem lazımmış.


Eh, eğer kibar bir şekilde durumu izah edip benim beklememi isteseydi ben zaten beklemeyecektim, değil mi? Çünkü ben sapığım zaten, "RÖÖAARRH!" diye perdeyi yarıp içeri girecektim, bana emir havlanmasaydı. 


"Peki burası World of Darkness LARP'i mi?" diye sorduğumda tiplemeden aldığım yanıt "Hayır!" oldu. Sonra kız arkadaşı içeriden müdahale etti, burası gerçekten de benim katılacağım LARP'miş. Bir de kayıt yaptırdığım oyunun alanından kovuluyorum, bu da iyi.


Benim tek yaptığım şey, kovulmuş olmama rağmen orada beklemek, arada da o tiplemeye sert bir şekilde bakmak. MetuCon boyunca o tiple karşılaştığımda ona sinirli bir şekilde bakmaya devam ettim. Hatasını anlamış mıdır? Sanmıyorum.


* Bu o kadar karşıdaki kişilerin kabahatiyle dolu bir tecrübe değildi. Oynadığım RPG'de (bu da WoD: Vampire'dı) partideki Ventrue rolünde, partinin lideri konumundaydım. Oyun sırasında oyunculardan bir-ikisi sürekli sözümü kesip durdu, ben oyunda olmam gerektiğinden daha geri planda kaldım. Onlara verdiğim tavsiyeleri (verdiklerim komut bile değildi) sallamadılar, başımızı belaya sokabilecek hatalar yapıldı.

Oyunun sonunda hepimiz hamamböceğine dönüşelim umrumda değil, hepsi oyun nihayetinde. Ama benim bu kadar dikkate alınmamam beni sinir etti. Oyun sonunda DM'in bana söylediği şey; bir Ventrue rolü için fazla pasif davrandığım (çünkü ben o vampir Ventrue karakterimi bile baskı altında tutuyordum), eğer oyunda birisi sürekli rolümü kesiyorsa sesimi onunkinden yüksek tutmaktan kaçınmamam gerektiği. (Aslında bu etkinlik boyunca katıldığım 3 oyundan da önemli şeyler öğrendim, onlara başka bir yazıda değinebilirim.)


* Akşam eve gelirken taksiye binmiştim. Bir yol ayrımından sağ gitmemiz gerektiğini geç söylediğim için biraz azarladı beni (çünkü adam hızlı gidiyordu!) ben de taksiden inmek istediğimi söyledim (asıl sebebi bizim gerçekten de ineceğim yere varmamızdı, benim tavır koymam değil). Adam sesli olarak la havle çekmeye başladı durarken, ama asıl 'la havle'yi ben çekiyordum içimden.

 "Acaba ben içimdeki duyguları çok mu fazla bastırıyorum?" diye düşündüğüm bu günlerde arkadaşımla yaptığım konuşma, bu sayfaların yazımını tetikledi. Arkadaşım, benimle olan dostluğundan dolayı memnuniyetini, benim ne kadar kibar, oturaklı bir insan olduğumdan bahsetti, özellikle de geçenlerde içerisinde bulunduğumuz bir ortamdaki tavırlarımdan.

İlginç olaylar



Bu yazımda, son günlerde başımdan geçen iki ilginç olayı sizlerle paylaşmak niyetindeyim. Bunlardan birisi tanık olduğumuz UFO'lar hakkındayken, öteki tam bir korku filminden fırlamış bir sahne (bu ikinci olayı Facebook'ta paylaşmıştım, FB arkadaşlarım için yeni bir şey değil yani).

UFO ile kast ettiğim şey elbette "tanımlanamayan uçan nesneler", onların uzaylı olduğunu söylemiyorum ("...ama onlar uzaylılardı!" diye devam edesim var).




ODTÜ-Bilkent semalarındaki UFO'lar

 27 Nisan 2012 tarihinde, saat 8 sularında ODTÜ Teknokent'teki iş yerimizden çıkıyorduk; ben, Gökhan Abi ve Aydın. Binadan çıktıktan kısa bir süre sonra gökyüzündeki parlak bir cismi fark ettik. Cisim; ne olduğunu anlayabilmemiz için fazla küçüktü veya fazla uzaktaydı. Ama cismin sanki alevler içerisindeymiş (veya bir alev topuymuş!) gibi parladığını fark etmemek imkansızdı.

(Benim telefonumla çektiğim bir video var, ama aşırı dandik olduğunu belirteyim. O cismin hızı ve hareket yönü konusunda fikir verebilir belki. Bu video ikinci UFO'ya ait; ama zaten ikincisinin ilkinden neredeyse hiç farkı yoktu.)

Bu minik noktanın etrafına yaydığı ışığın hue değeri ve şiddeti bana titrek bir şekilde değişiyormuş gibi geldi; yani bir lambadan beklenileceği gibi stabil bir ışıktan ziyade, yanan bir cisim izlenimi veriyordu. Işığın renginin kırmızı-turuncu tonları arasında kalması da cabası.

Videoda göreceğiniz üzere, yavaş bir cisim değildi bu. Gözümüzün gördüğü kadarıyla bu şey bir ateş topu değildi, ışık kaynağının üzerinde karanlık bir cisim vardı. Belki ateşle ısıtılmış sıcak havayla uçan bir balondu bu, ama bir balonun bu kadar hızlı gitmesi normal mi? Hava pek rüzgarlı değildi, bulutlar da neredeyse hareketsizdi.

Sonra cismin ışığı söndü ve yere doğru iniş yaptı. İtiraf etmeliyim, o şeyin ışığının sönmesi ve inişe geçmesi beni rahatlattı, çünkü çarptığı yere zarar verecek, patlayacak bir nesne olması ihtimali geçiyordu aklımdan.
 
Kısa bir süre sonra, aynı türden ikinci bir cisim göründü. Önceki cisimle aynı rotayı izliyordu. İlk başta o da parlıyordu, aynı yere iniş yaparken ışıkları sönmüştü.

Cisimlerin Bilkent tarafına iniş yaptığını görmüştük. Gökhan Abi'nin arabasıyla cisimlerin iniş yaptığı yerin civarına gitsek de, bu cisimlerin ne olabileceğine dair herhangi bir ipucu bulamadık.

Bu şey ne olabilirdi? Bir balon? Balon için fazla hızlı değil mi? Gösteri yapan bir yamaş paraşütçüsü? Uçak?



Evil reflection 

O pazartesi akşamı evin salonuna kurulup, PS3'te Game of Thrones'un yeni bölümünü izlemiştim. Dizi bitmişti, credits ekranı akarken ben hâlen koltukta oturmaya devam ediyordum.

Credits ekranı da bittikten sonra televizyon, beni ve içinde bulunduğum ortamı (yani evin salonunu) göstermeye başladı. Adeta bir ayna gibiydi; beni koltukta otururken ve önümdeki ekrana bakarken gösteriyordu. PS3'ümde Move cihazı da bulunduğu için televizyonun üzerinde konsola bağlı bir tane kamera var, o an ekrana yansıyanın bu kameradan çekildiğinden emindim. (Sağdaki resimdeki koltukta oturuyor olduğumu hayal edin; o günkü kılık kıyafetim çok dağınık olduğu için sadece olayın arkaplanını gösteren bir frame'i koydum.)

Ben "Kamera niye aktif hale geldi ki?" diye düşünürken, yansımam benden bağımsız olarak ayağa kalkıp odanın etrafında yürümeye başladı, gözleri benim üzerimdeydi. Ne oluyor ya??!?

Ve sonra hatırladım: PS3'ün kamera görüntüleri üzerinde yaptığım bir görüntü işlemi deneyi için deneme videoları çekmiştim. Dizinin video dosyası bittikten sonra da bu benim çektiğim kayıtlar gösterilmeye başlamış. Birkaç milisaniyeliğine de olsa korkutucu bir deneyimdi.

Tuesday, April 3, 2012

2012 başı rastgelelikleri

Son aylarda çektiğim ilginç fotoğraflar...

Uzun bir süredir "rastgelelikler" temalı bir post yayınlamamışım, son üç ayın rastgeleliklerini tek bir postta eriteceğim. Bilmeyenler için; bu blogta benim "rastgelelikler" ile kast ettiğim şey, belirli bir temaya bağlı kalmaksızın paylaştığım, çoğunlukla benim elimden çıkmış olan görseller ve yazılardır. Araya "şu an neler yapıyorum, ne haldeyim?" gibi soruları cevaplayan cümleler de katarak.

 Bu aralar oldukça mutluyum, çünkü kalbimin seçtiği işleri yapıyorum. Crimm's Son da iyi gidiyor, ama şu an size gösterebileceğim bir şey yok. Elimdekiler ya öncekilere çok benziyor (mutlu The Sims 3 evindeki mavi çocuk işte), ya da oyunun hikâyesiyle ilgili ölümcül spoilerlar barındırıyor. Quadratum Mortis de güzel gidiyor.




Fotoğraflara geçmeden önce, hemen sizinle paylaşmak istediğim bir anım var. Ekip arkadaşlarımla gittiğimiz bir akşam yemeğinde konu, bloglardan açılmıştı ve ben de buradan bahsetme fırsatını kaçırmadım. Bloga cep telefonundan girip bakmak istedik, blogun adresini girmek yerine Google'dan "Ahmet Keleş Blog" ifadesini girdik. Çıkan ilk sonuç buydu (tam o sayfa değildi, ama görülen ilk şeylerden birisi bu yazıydı). Daha da komik olan şey, benim Ezgi adında yakın bir arkadaşımın olması, üniversite zamanından.

Öhöm, neyse. Odamdan ve ofisimden (daha doğrusu eski ofisimizden, çünkü yeni binaya taşındık) birkaç kare.





(En alttaki PS3 Move resmi, üsttekinin düzenlenmemiş hali. "Gem", cihazın teknik ismi. Ve evet, bu resim ofiste çekildi.)



 


 ---


Bir de geçenlerde ateşimin yükseldiği bir akşam yazdığım cümleler...

Ve bu sıkıntılı anımda o soyut varlık, bulunduğum ortama geldi, davet edilmeyi beklemeden. Onun ne olduğunu açıkça belirten üç adet harf, alnının üzerinde inci taneleri gibi parlıyordu: "K", "A", "L"!

Sunday, March 18, 2012

Renatus v1.1 çıktı! (Ve post-mortem'i...)

GGJ 2012'de geliştirdiğimiz Renatus isimli shooter oyununun yeni versiyonu artık sizler tarafından oynanmaya hazır! Bu Flash oyununu hemen oynamaya başlamak için sizi şuraya alalım.

Bu yazıda sizlere oyun hakkında bilgi vereceğim; post-mortem (otopsi) olarak tabir edilen yapımcı notlarıyla birlikte (oyunu yaparken nasıl zorluklarla karşılaştığım, nelerin olmasını isterdim, vb.).

Önceki yazımı okuduysanız hatırlayacaksınız; Roselyn, Ragnor ve benden oluşan Yok Sothoth ekibi olarak GGJ'de Renatus'u yapmıştık, ama oyunun teknik bakımdan o kadar çok eksiği vardı ki oyunu burada yayınlamadan önce bu eksiklere bir el atmak istedim. Sonuç olarak; hâlen mükemmelliğe ulaşamamış, ama oynarken epey zevk aldığım ve gururla paylaşabileceğim bir oyun ortaya çıktı, GGJ'den 1,5 ay sonra.


Aslında bu "GGJ'de yaptığımız oyun henüz çok ham bir safhada, çünkü kısıtlı bir vakitte yaptık. Bu oyunu biraz daha geliştirirsek yayınlayabiliriz."düşüncesi oldukça yaygın, katıldığım GGJ'lerde gözlemlediğim kadarıyla.



Oyun hakkında bilgiler:
Flash'la yaptığımız bu oyunu oynamak için swf dosyasını buradan indirebilir (4,93 MB) veya browser'ınız içerisinde bu sayfadan oynayabilirsiniz. Flash Player yüklü herhangi bir bilgisayarda oynanabilir.



Ebediyen lanetli...
Ölmekle lanetli...
Yeniden hayata gelmekle lanetliyim ben.

Geçmişteki korkunç suçlarının cezası olarak cehenneme atılmış, her öldüğünde yeniden dirilmekle lanetlenmiş bir ruhu yönetiyoruz. Amacımız buradan kaçmak, ama öncelikle bizimle birlikte cehenneme atılmış ve aynı laneti taşıyan arkadaşlarımızı kurtarıp yanımıza almak. Düşmanlarımız, bizi orada hapis tutmaya çalışan zebaniler (ben Renatus'taki zebanilere direkt zombi diyorum, çünkü tam zombi gibi davranıyorlar) ve oyunun son bölümünde karşılaşacağımız bir Yılan.

Oynanış oldukça basit: Yön veya WASD tuşlarıyla hareket edip zombilere mouse'la ateş ediyoruz. Her bölümde kurtarılmayı bekleyen 5 adet yeşil ruh var, beşini de kurtardıktan sonra öbür bölüme geçiyoruz. Her bir kurtardığımız ruh, bizi takip edip zombileri öldürmemize yardım ediyor. Eğer bir zombi tarafından yakalanırsak ölüp spawn noktamızda yeniden diriliyoruz. Yakalanan ruhlarsa ölüp yeniden kurtarılmayı bekliyor.

Geçmişteki günahlarım gibi; dehşet verici, korkunç O. Her zaman orada O, daima izliyor. Peşimi bırakmadan işkence ediyor.

Üç bölümün sonunda bizi hapseden Yılan tarafından korunan çıkış kapısına ulaşıyoruz. Amacımız arkadaşlarımızın kapıya ulaşmasını sağlamak.

Yapımcı notları (Post-mortem)

1. GGJ aşaması
Aslında önceki yazımda GGJ 2012 maceramızı anlatmıştım, ama yine de Renatus'un yapım hikâyesini yeniden özetleyeyim.

Yarışma teması olarak bize verilen tek şey Ouroboros'a ait bu sağda gördüğünüz resimdi. Aklımıza birkaç fikir geldi, bunlardan yapılabilirliği ve temayla ilgisi en yüksek olanı bizim Renatus'umuzdu. "Yeniden doğuş", "sürekli tekrarlayan bir döngü" (lanetimiz) ve temayı literal bir şekilde ifade eden Yılan boss'u. "Acaba yılanı öldürmenin yolu ona kendi kuyruğunu yedirmek mi olsun?" diye düşündük, ama yılanın göz göre göre kendi kuyruğunu yiyecek kadar salak olması içimize sinmedi. "Onu öyle bir konuma getirmek zorunda olalım ki kendi kuyruğunu yemekten başka şansı olmasın" mekaniğini geliştirmemiz de kısıtlı bir zaman içinde mümkün olmayabilirdi.

Temanın yanında verilen diversifiers listesinde bizim oyunumuza en uygun ve yapılabilirliği yüksek olanı takipçi NPC'lerin varlığıydı.

Tema açıklandıktan sonra nasıl bir oyun yapacağımıza karar (yani yukarıdaki kararları) vermemiz yaklaşık 8 saat filan sürdü. Oyunu programlamaya C++ ve Allegro kütüphanesiyle başladık. Ama gördük ki bu çok iyi bir karar değildi, çünkü Flash'la 15 dakikada yapılabilecek bir şeyi iki saatte yapıyorduk. 46 saatlik sürecin yarısında (evet, GGJ'de 48 saatimiz değil de 46 saatimiz vardı) Flash'a geçmeye karar verdik, bu kararı geç vermemiz fena bir şekilde zaman kaybetmemize neden oldu.

Flash Develop ve Flashpunk çok güzel bir IDE ve kütüphaneymiş, bu arada. Adobe'un Flash'ına ihtiyaç duymadan Action Script kullanarak basitçe oyun yapabiliyorsunuz. Ve tamamen ücretsiz ikisi de.

46 saatin sonunda sunumu yapılabilecek ve yarışmaya katılabilecek kadar ilerlemiş bir oyun vardı elimizde, ama hâlen önemli teknik eksikle beraber. Son saatte o kadar çok yorulduk ki oyunda level atlamanın olmaması (koddaki denetimin ==  yerine = ile yapılması yüzünden), debug ekranının gözüküyor olması gibi basit hataları fark edemedik/düzeltemedik. Uzun bir süre boyunca uykusuz çalışmak üç kadeh şarapla aynı etkiyi yaratıyor beyninizde; dramatik sonuçlar doğuracak basit hatalar yapma olasılığınız korkunç bir şekilde artıyor.


Oyunla ilgili en çok memnun olduğum öğelerden birisi ışıklandırmaydı (daha doğrusu karartma). Alpha değeri merkeze doğru düşen simsiyah bir maske hazırladık, bu maskenin merkezini oyundaki ışık kaynağının (oyuncunun) üzerine yerleştirmek ambiyansı bir anda değiştirdi.

Soldaki resim, oyunun ışıklandırmasız hali. Eğer dramatik bir etki uyandırmak istiyorsanız, ışıklandırmanın var olması çok önemli.





2. GGJ sonrası
Oyunla ilgili içime sinmeyen çok sayıda öğe vardı. Oyunu oynanamaz hale getiren basit hataları düzeltmenin yanı sıra, oynanışı çok daha zevkli kılmamın mümkün olduğuna inanıyordum. Yapılabilecek en önemli şey, akıllı bir path-finding algoritmasının oyuna entegre edilmesiydi. Zombilerin, ruhların ve Yılan'ın hiçbir engele takılmadan hedeflere ulaşması, kendilerini tehlikeli durumlara sokmaktan sakınması oyunu ne kadar eğlenceli kılardı, değil mi?

İsmini bilmediğim şu pathfinding algoritmasını C++'la yaptığım adventure motorunda başarıyla kullanıyorum. Ama bunu Flash'a entegre etmeyi başaramadım, anlamadığım bir sebepten ötürü algoritma çalışmadı. Uzun bir süre uğraştım, en sonunda yapay zekâyı daha basit tutmaya karar verdim. Çünkü Renatus v1.1 için sonsuz zamanım yok. Oyunu mükemmelleştireceğim diye bokunu çıkarmaya ve diğer projelerimi ihmal etmeme lüzum yok.

Oyunu oynadıysanız ruhların duvardan geçebildiğini fark etmişsinizdir. İlk başta onları duvardan geçemeyecek şekilde kodlamıştım, ama sağlam bir yön bulma algoritmasına sahip olmadıkları için arada duvarlarda takılıyorlardı (Counter-Strike'taki botların ve rehinelerin takılmasını düşünün). Oynanış zevki ile mantık arasında bir seçim yapmam gerekiyordu, burada mantığı feda ettim. Aslında "mantığı feda ettim" sayılmaz, onlar duvardan geçerken yavaşlıyorlar ve alphaları düşüyor, yani onların duvardan geçebilmesini bu şekilde oyun evrenine yedirdim.

Aynı şey Yılan için de geçerli. Kendi içinden geçmesini engellemek daha büyük sorunlara neden oluyordu, bu yüzden onu da kendi içinden geçebilir yaptım. Eğer A* gibi bir algoritmanın yanında kendi içinde bir sarmal oluşturup tıkanmasını engelleyecek bir yapay zeka yaratabilseydim buna gerek kalmayacak ve oyun daha ikna edici bir nitelik kazanacaktı.

Ama yine de yapay zekanın bu halinden memnunum, oyunu yayınlayabilecek kadar. Bize katılan ruhlar, kendilerine yaklaşan zombilerden kaçabiliyor ve sadece görmelerinin mümkün olduğu zombilere ateş ediyor (bir duvarın arkasındaki zombiye ateş etmek yerine).

Oynanışı da iyi bir şekilde dengelediğime inanıyorum. Ne aşırı derecede zor, ne de yavan bir biçimde kolay. Yanınıza katılan ruhları korumak için çaba harcamadığınızda yakalanıyorlar, onları ve kendinizi üstünüze gelen zombi sürülerinden korumak için diken üstündesiniz. Böyle karanlık bir atmosferle kolay bir oyun uyumlu olmazdı.

Umarım bu oyunu oynarken benim keyif aldığım kadar keyif alırsınız ^_^

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ı.