Plazma sayı 4, sayfa 47

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 47

Bölüm 4 Emir 'Skate' Akaydın

Test Platformu dokümanlarında dördüncü ve "son" bölüme geldik. İlk üç sayıda çapraz geliştirmeyle ilgili bilmeniz gereken birçok temel kavramı irdeledik. Bundan sonrası sizin Commodore 64 üzerindeki yeteneklerinizi geliştirmeniz ve yeni efektler kodladıkça PC gibi platformlardan nasıl faydalanabileceğinizi daha iyi öğrenmenizden ibaret. Ama bu işi tamamen size bırakmadan önce son bir örnek göreceğiz. Bu seferki örneğimiz 90'lı yıllarda Commodore 64 demolarında sıkça rastladığımız bir demo efekti olan $d017 sprite stretch efekti. Bir de buna yan border açma, renk geçişi ve sinüs efektleri eklenince ortaya hoş bir örnek çıkıyor.

DİKKAT!!! Aşağıda anlatılan kavramların birçoğu ileri derecede VIC (Commodore 64'ün grafik çipi) bilgisi gerektirmektedir. Eğer bu konularda başlangıç seviyesindeyseniz, belirli bir yerden sonra doküman sizin için gittikçe zevksizleşecektir. Bu durumda test platformu bölüm 1'den 3'e kadar olan kısım size daha çok hitap ediyor demektir. VIC konusunda temel bilgilere sahip olmadan bu dokümanı okumanız olumsuz sonuçlar doğurabilir.

Doğrudan Sonuca Gitmek

Bu son bölümde lafı hiç dolandırmadan yapmak istediğimiz efekti, efekt için çözmemiz gereken problemleri ve bunların PC kullanarak çözeceğimiz kısımlarını inceleyeceğiz. Ancak bu defaki efektimizin özelliği PC'ye ihtiyaç duymaması. PC'yi bu defa bir nevi pseudocode yazma ve bu kodu test etme aracı olarak kullanacağız. Böylece Commodore 64 üzerinde efektimizi kodlamaya başlamadan önce bazı kod parçalarımızın düzgün çalıştığından emin olacağız.

Efektimizde kullanacağımız öğeler:

1. 8 sprite'ı sağ ve sol ekran sınırlarına denk gelecek şekilde basma 2. Yan border açma 3. FLD (Flexible Line Distance) 4. $d017 stretch (Sprite'ları Y ekseninde uzatma) 5. Uzama (stretch) tablosu üretme (Lineer İnterpolasyon) 6. Yumuşak renk değiştirme 7. Yumuşak sinüs hareketleri için bir sinüs tablosu

Bunlar efekti elde etmemiz için yapmamız gerekenler. Peki hangileri bize ne tür problemler çıkarıyor ve nasıl çözüyoruz tek tek inceleyelim.

8 sprite

Aslında bu çok basit bir işmiş gibi görünse de bilinmesi gereken bir püf noktası var.

Şekil 1.

Öncelikle sprite koordinatları ($d000-$d00f) ve X koordinatlarının 9. bitleri ($d010) hakkında bilgi sahibi olmanız gerekiyor. Bu bilgiler programcının el kitabı ya da diğer birçok Commodore 64 dokümanından öğrenilebileceği için bu noktada üzerinde çok fazla durmuyorum. Asıl bilinmesi gereken şey x=0 koordinatına basılan bir Commodore 64 ekranının en solundan (borderlar da dahil olmak üzere) 8 pixel yana denk geldiğidir. Yani borderlar açıkken ekranın en soluna bir sprite basmak istediğinizde x > 0 demek yeterli olmaz. Negatif değerlere gitmemiz lazım. Bunu yapmanın yolu ise $d010 adresindeki 9. bitden geçiyor. Bu biti ilgili sprite için set etmek, yani 1 yapmak lazım. Eğer 0 numaralı sprite'ı kullanırsak 0. bit=1 olduğundan;

lda #$01 sta $d010

dememiz gerekiyor. Ancak işin ilginç tarafı mantıken $d000'ın (0. sprite X koordinatı) $ff değerini aldığında $00'ın bir solundaki pozisyon olması gerekirken $ff değeri verdiğimizde (9. bit'i de set iken) sprite'ın ekrandan kaybolduğunu görürüz. Çünkü 0'ın solu $ff değil $f7'den başlar. Kısacası;

$d010 = $00; $d000 = $00 >> 0. Sprite ekranın en solundan 8 pixel sağda

$d010 = $01; $d000 = $f7 >> 0. Sprite ekranın en solundan 7 pixel sağda

$d010 = $01; $d000 = $f0 >> 0. Sprite ekranın en soluna yapışık

$d010 set iken X ekseninde genişletilmemiş yani normal boyutlardaki bir sprite ($d01d = 0) $f0-$d9 değer aralığında, X yönünde genişletilmiş sprite (0. sprite için $d01d = 1) $f0-$c1 aralığında ekranın solunda görüntülenebilir. Elbette ki $f0 değeri küçüldükçe sprite ekranın solundan dışarı çıkmaya başlayacaktır. Sprite ekranın solundan çıktıktan sonra $78'den büyük değerler için görüntülenemez. Ancak $77 ve daha küçük değerlerde bu defa sprite ekranın sağından içeriye girecektir. Dolayısıyla ekranın sağına yapışık X ekseninde genişletilmemiş sprite'ın X koordinat değeri $60, genişletilmişin ise $48 olmalıdır.

Klavyeyle gezinmek için ← ve → tuşları.