Herşeyin başlangıcı: Manic Miner

Matthew Smith ile klasik platform oyunu Manic Miner üzerine uzun bir sohbet.

Topla ve atla türü platform oyunlarının atası Manic Miner’ın her ekranını tek tek anlattığı RetroGamer makalesini unutmadan okumalı:
http://www.nowgamer.com/features/556/the-making-of-manic-miner

Birde unutmadan, Matt Smith uzun bir süre ortalıktan kaybolmuştu. 2009’a kadar aylak aylak gezmiş ve gözlerden uzakta kalmış (bu bir tercih değil herhalde, onu arayan soran yoktu, parası pulu da yok zaten). Nihayet son zamanlarda Hollanda’dan tekrar Liverpool’a dönmüş. Tahminen 8bit gençliğinin para kazanmaya başlamasıyla, onların köklerine bakma, mümkünse ovum’a geri girme çabaları sayesinde retro computing diye birşey hortlayınca Matt de tekrar göz önüne çıktı. İyi ki de çıkmış, youtube’daki söyleşilerinde bana acaip eğlenceli bir adam gibi geldi…

“Miner 2049er” hakkında konuştuğu kısımda beni çok güldürdüler 😀 3:40 civarı.

Purebasic denemesi, bir küçük intro

Purebasic yıllardır duyduğum ama bir türlü denemeye fırsat bulamadığım bir programlama dili. Öveni çok olurdu, başta “Windows, Linux, MacOS ve Amiga üzerinde derleme yapabiliyorsunuz”, sonra “sade ve basit”, “güzel bir IDE’si var” denirdi.

Son haftalarda public chat kanalımız #retrojen’de yatu nickli arkadaşımızın basic programlama denemeleri yapması bana PureBasic’i tekrar hatırlatmıştı. Bu hafta sonu ise, sohbet ederken 64bit derleyiciler konusunda konuşmaya başladık ve yorganın altından yine purebasic çıktı. Eh madem x64 derleyicisi de var, bir deneyelim bakalım yetti canıma dedim, neymiş bu pb:
Hemen indirdim ve hello world yazmaya koyuldum. Helloworld düşündüğümden de basit çıktığı için **MessageRequester(“Message Box”, “Hello World”)** bir scroller yazmaya başladım. Doğrusu purebasic’in antikalıkları sayesinde yarım saatte bitecek iş 4 saatimi aldı. Öncelikle alpha kanalı olan bir bitmap’i cropladığınızda alpha’sı gidiyor. Bu durumda fontların arka planları siyah bloklara dönüştüğü için keyfim kaçtı. 1-2 saat bunu yapmanın yöntemini aradım internet üzerinde. Malsef bu kadar popüler bir basic varyasyonunun nette neredeyse hiç (google’da çıkmadı valla) örnek kodu bulunmuyor. Kısa, genelde bir paragrafı geçmeyen, çok yüzeysel açıklamalarla yetinmek zorundasınız. Bence purebasic’in en büyük problemi burda. Yıllardır geliştirilen (dikkat: 10 yıl) bir programlama dilinin bu kadar komik dökümantasyona sahip olması üzücü.

Neyse sonuçta problemleri dededen kalma yöntemlerle çözerek yola devam edince, bir Basic türevi olarak gayet hızlı çalıştığını gördüm. Görünüş olarak bayağı ilkel görünüyor, hafif bir 16 bit havası bile var denebilir 😀 Dökümante edilmemiş acaip kısıtlamaları da var. Ama bence yeni başlayanlar için işe yarayabilir. Object Oriented (Obje yönelimli) değil, bayağı oldschool, procedure oriented, çocukluğunda 8bit bilgisayarında basic kullanmış olanlar için aynı tadı 64bitte yaşamalarını sağlıyor.

Belki de en güzel yanı dağıtım şekli, bilmiyorum sizde çalışacak mı ama, build exe komutu verince, her kütüphanesi içinde bir exe yaratıyor, hiçbir dış DLL’e ihtiyaç duymuyorsunuz.

Neyse sonuç olarak, ilk purebasic denemem, modern basic’lere pek benzemiyor, ama sonuç olarak 4 saatte aşağıdakini yapabildim, pure basic’in iyi mi kötü mü olduğu konusundaki takdir sizin:

Purebasic Intro: 750kb
(dikkat müzik araklamadır (andromeda/playboy), diğer herşey, intronun yazımı sırasında kendi pc’imde yaratılmıştır)

ilk purebasic denemesi başlıyor:
[13.02][23:09] ref_ scroller kasayım şimdi
[13.02][23:09] ragnor_ 🙂
[13.02][23:09] ragnor_ aha çıkıyo intro

son rötuşlar, çalma çırpma bir müzik:
[14.02][01:56] ref_ bu xm arşivi nerdeydi yav?
[14.02][02:04] ref_ neyse chiptune’den aldım bitane

Bu bir scene release değildir, denemedir!

Sonuç: Purebasic, aşamadığınız limitasyonları olan bir basic türevi. Ama bu yazdığım kesinlikle hiçbir optimizasyondan geçmemiş, aksine savruk ve mektup yazar gibi baştan sona dümdüz kodladığım intronun çalışma hızı beni etkiledi. Ayrıca debugger’ında profiling gibi çok önemli özellikleri de var. Bilmiyorum kime yarar ama Inline assembler da destekliyor. İleride birkaç küçük program deneyebilirim üzerinde. Eğer faydalı bulursam da register edeceğimden eminim. Demo versionu WinAPI kullanmaya izin vermiyor, ama bu introda benim ihtiyacım olmadı. Büyük olaslılıkla ciddi birşey yapmaya kalkarsak registered version gerekecektir.

Sırada Freebasic ve BlitzMAX var. Seneye artık. Bu yıllık basic hakkımı Sinclair Basic için kullanacağım 😀

Bresenham ve Xiaolin Wu

Kodlamaya meraklı olanlar zaten bilirler, lakin ben sıkça unutuyorum iki nokta arasına doğru bir çizgi çekmenin yöntemini.

Bresenham bu işi en hızlı yapan en eski adam, Xiaolin Wu ise bresenham’ın algoritmasını geliştirip antialias ekleyen adam.

Ben genellikle oyun yazımı sırasında sprite’ın düz bir doğrultuda istediğim noktaya ulaşmasını bresenham’ın yöntemini kullanarak yapardım. Son zamanlarda bezier curve’lar kullanarak işi birazcık daha “tuhaf”hale getirdiğimi söyleyebilirim. Ama mütemadiyen ihtiyaç duyacağım bir kod olduğu için buraya yazayım, ilerde yine unuttuğumda buraya bakarım.

Bresenham’s line algorithm ve Xiaolin_Wu’s line algorithm

Eğer Bresenham’ın algoritmasını Sinclair Basic üzerinde denemek istiyorsanız kodu uyarladım, buyrun okuyun:Bu kod 110 numaralı satırdan başlar ve x0,y0-x1,y1 girdilerini alır, burada 20 numaralı satırda kordinatlar rastgele hazırlanıyor, 250 numaralı satırda da başa dönüyoruz.

20 LET x0=RND*256: LET x1=RND*256: LET y1=RND*170: LET y0=RND*170
110 REM line draw function
120 LET steep=ABS (y1-y0)>ABS (x1-x0)
130 IF steep THEN LET xb=x0: LET x0=y0: LET y0=xb: LET xb=x1: LET x1=y1: LET y1=xb
140 IF x0>x1 THEN LET xb=x0: LET x0=x1: LET x1=xb: LET xb=y1: LET y1=y0: LET y0=xb
150 LET dx=x1-x0
160 LET dy=ABS (y1-y0)
170 LET e=dx/2
180 LET y=y0
185 LET ystep=-1
190 IF y0<y1 THEN LET ystep=1
200 FOR x=x0 TO x1
210 IF steep THEN PLOT y,x: GO TO 220
215 PLOT x,y
220 LET e=e-dy
230 IF e<0 THEN LET y=y+ystep: LET e=e+dx
240 NEXT x
250 GO TO 20

eğer yukarıdaki version çalışmıyorsa, sayfa kaynağını açarak aşağıdan copy etmeyi deneyin:

20 LET x0=RND*256: LET x1=RND*256: LET y1=RND*170: LET y0=RND*170
110 REM line draw function
120 LET steep=ABS (y1-y0)>ABS (x1-x0)
130 IF steep THEN LET xb=x0: LET x0=y0: LET y0=xb: LET xb=x1: LET x1=y1: LET y1=xb
140 IF x0>x1 THEN LET xb=x0: LET x0=x1: LET x1=xb: LET xb=y1: LET y1=y0: LET y0=xb
150 LET dx=x1-x0
160 LET dy=ABS (y1-y0)
170 LET e=dx/2
180 LET y=y0
185 LET ystep=-1
190 IF y0

BREAKPOINT 2010!

Ve zamanın sonu geldi. Breakpoint bitiyor. Bu yıl, bilgisayar meraklılarını tarihlerinde yarattığı en kaliteli sanat ürünü olan “demo”ların yarışacağı dijital sanat festivaline elveda diyoruz. Gittikçe küçüldüğü ve anlamını yitirdiği için, büyük olasılıkla uzun yıllar boyunca (belki bir daha hiç) bu kadar büyüğünü *ve* özgününü yapamayacak olan demoscene, BreakPoint adı altında son kez bir araya geliyor.

Buna da bir çift lafım var (olmasa şaşardım zaten -ed):Scene sıkıntı bir dönem geçiriyor, belki de tarihinin en sıkıntılı dönemlerini geçiriyor. Eminim benimle hemfikir olmayanlar olacaktır ve belki de bazıları gaflet, dalalet ve belki de hıyanet içine düşerek Assembly, Nvision ya da the Gathering gibi alakasız oluşumları işaret edecektir. Sonuç olarak farbrausch’un neden çok uluslu sermayeye benzediğini ve scene’i yok ettiğini göremeyeceklerdir.

Neden breakpoint bu kadar önemli?

Keiser geziye çıkmadan önce, “Bütün kuş beyinli uyruklarını yıkanmış paklanmış olarak” görsün diye habercileri almanyanın dört bir yanına salarmış, fakat keiser’ın buyruklarına göre düzenlenmiş uydurma bir hayatı yaşamaktansa kendi oyunarını sürdürmek isteyen çocuklar direnir, yıkanmak istemezlermiş.

Lakin dangozlarla dolu da olsa Scene, aynı zamanda bilgisayar dünyasının çocuklarından oluşmaktadır. Herşeye karşı durmuş, arada korsanlığa bulaşsa da kendini çok ama çok güzel aklayabilmiştir. Sonuçta scene, başından beri, gençlerin zengin olduğu, çakallıkla milletin hakkını gasp eden birşey olmadığını, tam aksine önlerine konmuş oyuncakla oyalanıp keiser’in sözünü dinlemesi beklenen çocukları kolayca kandıramayacaklarını göstermek için direnenlerden oluşmaktadır. Bugün demoscene, bilgisayarla uyutulmaya çalışan bir neslin zincirlerini kırma çabasıdır. Breakpoint ise diğer karma partilerin haricinde en büyük pirüpak demoscene olayıdır.

Ve bu katıksız demo scene şenliği, bilgisayar dünyasının en eski, en akıllı, en çalışkan ve en manyak bireylerini son kez bir araya getirecek. Gelmeyen varsa el kaldırsın!


Scene hypnotoad gibi, bir yakalanan bir daha çıkamıyor!

Global Game Jam 2010 tamamlandı…

GGJ Türkiye ayağı Odtü Metutech/ATOM işbirliği tamamladı. Odtü Enformatik binasında yapılan organizasyona arkadaşımız Ragnor’da katılımcılardan biriydi.

Dünya çapında, birçok ülkede aynı anda yapılan ve iki gün süren organizasyon sonucunda onlarca hatta yüzlerce oyun yazıldı (çizildi, çalındı). Müzisyenler, grafikerler ve programcıların bir araya geldiği merkezde türk oyun endüstrisinin ilk adımları atılmaya çalışılıyor, bir taraftan eğleniliyor.

GGJ 2010’da Türkiyede yapılan oyunların listesine aşağıdan ulaşaiblirsiniz:

http://www.globalgamejam.org/games?tid[]=486&title=&tid_1=

Wizards & Viruses’i tavsiye ederim!

İstanbulda da yapılsa biz de katılsak…

Dobişko’nun hayaletleri…

Kaç yaşındaydım bilmiyorum, 5, 6 yoksa 7 mi? 80’lerin başıydı orası kesin. “Atari” salonlarında bütün avcunuzu dolduracak kadar kocaman olan jetonları alır, onları makineye atardık. Sonra köşede bir ışık yanar ve süremiz başlardı. O zamanlar bizim oralara “arcade” dediğimiz tek oyun oynatan kabinler yerine, “çakma arcade” diyebileceğimiz, içinde bir televizyon ve hemen altında bir atari2600 olan, joystick’i bir zamanlayıcıya bağlı kabinler olurdu. Zamanlayıcı dolduğunda artık joystick ve düğme çalışmazdı, ama oyun sürerdi.

Benim maceram “dobişko” ile başladı. Jetonumun süresi bittiğinde, altta dizdiğim bir sürü “hak” olmasına karşın hayaletlerin salına salına dobişkoya ulaşarak onu patlatmalarını izlemekten başka birşey kalmazdı. Sırada başka biri varsa beklemek istemediği için “fatih abi”ye bağırır, o da hafifçe arkaya uzanarak reset düğmesine basardı.

Dobişko ile ilgili bu acıklı anılarımın devamında yıllar sonra yaptığım bir pac-man klonu vardır. 80’lerin sonlarına gelmiş ve amigalanmış olsak da ara sıra eski spectrumumu açıp basic ile programlar yapmaya devam ederdim. Bunlardan birinde ilk göz ağrım dobişkoyu yeniden yapmaya kalkmıştım, ve bir şekilde başardığıma inanıyorum. Sonuçta ortada oynanabilir bir pacman kopyası olmuştu. O zaman farkettiğim şey şuydu, eğer tüm hayaletler aynı algoritmayı kullanırsa bir süre sonra kaçınılmaz şekilde üst üste biniyorlardı, mecburen her hayalet için başka bir hesap yaptırmak zorunda kalmıştım. Yıllar sonra pacman’deki hayaletlerin her birinin başka bir kurallar dizini izlediğini okuduğumda kendi adıma çok mutlu olmuştum!

Yıllar yılalr geçtikten sonra, beni spectrumda yeni bir pacman serüvenine başlatacak bir makaleye denk geldim. Nihayet pac-man bütün gizlerini ortaya sermişti, hatta z80 tabanlı kaynak kodu da mevcut. Acaba kaç yılda bu kodu zx spectrum’a uyarlayabilirim? 10? 20? Umarım hem benim hem de speccy’nin kondansatörleri bu süreye dayanırlar.

unutmadan, buyrun makale:
http://www.gamasutra.com/view/feature/3938/the_pacman_dossier.php?page=7

Pac-man’in tam “disassembly”si (kaynak verisinin assembler koduna çevrilmiş hali):
http://cubeman.org/arcade-source/pacman.asm

CSSCGC 2010 başladı!

Comp.sys.sinclair Crap Games Competition 2010, yani berbat oyun yarışması başladı.

http://csscgc2010.zxlife.net/Default.aspx

Her yıl ocak ayında başlayan ve 31.aralık’a kadar devam eden csscgc, bu yıl “bloodbaz” tarafından yapılıyor.

Cgc 1996’dan beri yapılıyor. En hareketli cgc 2008 yılında 125 oyunun katılımıyla gerçekleşmişti. 2009’da ise yine normal trendine dönerek 50 civarı oyun ile tamamlanmıştı. Bu yarışmanın kökeni 1983 yılında birçok platformda çıkan içinde 50 oyun bulunan “Cascade Casette 50” toplama oyun kasedine dayanıyor. Cascade o devirde “Bir kasette 50 fantastik oyun!” sloganıyla satılmış, birçok kişi de almıştı. Ama oyunlar gerçekten fantastikti. Bu oyunların ortak özelliklerinden bazıları şöyle tanımlanabilir:
-Çok uzun, istesenizde geçemeyeceğiniz, hiçbir özelliği de olmayan giriş ekranları (örn. oyunun adı “RACE”, ve Ekranı dolduran bir RACE yazısının yavaş yavaş ve biplemelerle beraber oluşmasını izlemek zorundasınız, bazen bu iş dakikalar sürebilir).
-Acaip renk kullanımı. Sarı üzerine beyaz yazılar, yeşil deniz ve mavi bir ağaç, kırmızı zemin üzerinde görmeni imkansız kılan magenta bir düşman.
-Oyun ya çok zor olmalı ya çok kolay. Orta zorluk diye birşey yoktur.
-Yön tuşları ya da QAOP gibi kabul edilmiş tuşlar yerine WB8R gibi acaip kontrol tuşları
-Sinclair Basic ile yazılmış, herhangi bir optimizasyon yapılmamış
-Engrish diye tabir edilen kötü bir ingilizceye sahip
-Yönergeler gereğinden uzun ve genellikle oyunla alakasızdır, örneğin sayfalar dolusu oyunda bulunmayan özellikler anlatılır, bir karakterin çocukluğunu, büyüyüp kral oluşunu açıklar, ama oyunda bu senaryo ile pek alakası olmayan, kalenin etrafındaki hendekteki timsahlardan kaçan bir balığı yönetirsiniz. Ayrıca bu uzun açıklama içinde oyunun hangi tuşlarla oynanacağı belirtilmez.
-Buna karşın önemli bir nokta var, bu oyunlar birilerini kandırmak amaçlı değil aksine oyun yazarı olmak isteyen çok hevesli -ve hayal gücü yüksek- kişilerin çalışması sonucu ortaya çıkmış olmalarıdır. Oyunun tamamen saçma olması özveri olmadan yapıldığı anlamına gelmiyor.

Son olarak, Zx Spectrum’da çalışmalı.

Bu arada, csscgc2009’da üçüncülüğü kazanmışım (ya da kaybetmişim, cgc’de bu sıralama biraz tuhaf yorumlanıyor, sonuçta en berbat oyunu yapmaya çalışıyoruz), 2008’de de 10’uncu olmuştum.

Zx Spectrum Basic Merger 1.0

2008’de yazdığım *deneysel* bir programı WOS’da konusu açılması üzerine upload etmeye karar verdim.

Program Sinclair Basic Programlarını işleyerek daha az ram kaplar hale getiriyor (yaklaşık %20). Ayrıca bu şekilde programlar çok az da olsa hızlı çalışıyor.

Program ne yapıyor? Farklı satırdaki komutları mümkün olduğunca tek satıra indiriyor.

Örneğin:
10 Print “arda”
20 go to 10

programını:
10 print “arda”: goto 10

haline getiriyor. Bu sırada loopları ve alt rutinleri bozmuyor, program sonunda halen çalışır halde kalıyor.

Programı BASIN ile birlikte kullanmanız önerilir. Kullanım şekli dosya içindeki Readme dosyasında bulunuyor.

Buyrun çekin: BasicMerger_V1.zip 35kb (WinXP/vista/7)

cULA64 V5 is out.

in order to satisfy feature hungry spectrum users, I’ve updated the ConvertUla64 (cULA64) utiliy. This version includes latest patches from scrPlus0.12 and gui based batch conversion mode.


I tried to tidy up the UI, but it still looks ugly.

Warning, I updated sources during lunch break at work, so there may be plenty of bugs. Please feel free to report bugs here.

Download here: CULA64_v5.zip 40kb


Kullanıcılardan gelen istekler doğrultusunda CULA64’ün son sürümüne toplu iş yapabilme seçeneği ekendi. Artık bir klasördeki tüm dosyaları tek seferde dönüştürebileceksiniz. Ayrıca çevirici kodu 0.12’ye yamalandı.

Bu metni yazdığım sırada farkettiğim birşey, kasördeki dosya isimlerini sadece küçük harf olduklarında toplu işe verebiliyorsunuz. Bunu yakında düzeltirim. Programı iş yerinde yemek arasında güncellediğim için pek test etme fırsatım olmadı.

Buyrun çekin: CULA64_v5.zip 40kb

Before I forget: Vintage thoughts