Amiga'da animasyonlu "woosh" ekranını kodlamak
(dansalva.to)Amiga'da animasyonlu "woosh" ekranını kodlamak
- Amiga, 1985'te piyasaya çıktığında grafik ve ses alanında adeta bir mucize sunuyordu.
- Amiga'da renkli görüntüler göstermek kolaydır, ancak oyun motoru bağlamında birçok zorluk vardır.
Zorluk 1: RAM gereksinimleri
- Tipik bir Amiga 500'de 512KB "chip RAM" ve 512KB genişletme RAM'i bulunur.
- Yalnızca chip RAM grafik ve sesi göstermek için kullanılabildiğinden daha değerlidir.
- Tam ekran character graphic (CG), 32 renk kullanan 320x240 bitmap'tir ve sıkıştırılmamış halde 48KB RAM kaplar.
- Varlık sıkıştırmasını desteklemek için ZX0 sıkıştırma formatı eklendi; CG sıkıştırıldığında 8KB'ye düşerek kabul edilebilir hale geldi.
- Seviye varlıkları yüklenirken sıkıştırılmış CG genişletme RAM'ine yüklenir ve gösterilmeden hemen önce chip RAM'e açılır.
- 48KB chip RAM bulmak yerine ekran belleğinin başka bölümleri yeniden kullanılır.
Zorluk 2: "ekran bölünmesi" efekti
- İlk başta ekran geçişi için dikey bir wipe düşünülüyordu.
- Ancak bunun iyi görünmesi için her scanline'da renk paletini ayarlayan bir gradyan wipe gerekiyordu.
- Ekran bölünmesi efekti daha kolay uygulanabilir ve ortalama izleyiciye daha havalı görünür.
- Amiga'nın iki özel özelliği birlikte çalışarak bu efekti mümkün kılar:
- Eş işlemci
copper, CPU ile paralel çalışır ve ekrandaki belirli satırlarda donanım register'larını değiştirmesi için komutlandırılabilir. - Ekran belleği, donanım register'larında screen pointer ayarlanarak chip RAM'in herhangi bir yerine yönlendirilebilir.
- Eş işlemci
Zorluk 3: "hareket çizgileri"
- Animasyon efektini tamamlamak için arka planda "woosh" yapan çizgilere ihtiyaç vardır.
- Çizgileri çizmek için sprite kullanmak iyi bir seçimdir; çünkü screen memory'den bağımsız olarak çizilip hareket ettirilebilirler.
- Amiga sprite'ları oldukça kısıtlı ve karmaşıktır.
Sprite renkleri
- Sprite'lar bitplane'leri ve renk paletini paylaştığından mümkün olduğunca az renk kullanmak istenir.
- Sprite'lar yalnızca 3 renk kullanır; böylece CG için 28 renk ve arka plan için 1 renk kalır.
- Farklı sprite'lar palette farklı renkler kullanır.
Sprite grafiklerini yeniden kullanma
- Sprite grafiğinin ilk 4 baytı, sprite'ın konumunu ve yüksekliğini belirten "kontrol bitleri"dir.
- Aynı grafiği birden fazla konumda çizmek istediğinizde bu bir sorun haline gelir.
- Bunun yerine yalnızca kontrol bitlerini içeren 8 sahte sprite oluşturulup sprite pointer'ları bu sahte sprite'lara ayarlanır.
Bitplane'ler kapalıyken sprite'lar çizilmez
- CG ekranın üst kısmına ulaşmadan önce, ekranın üstü ile CG'nin başladığı yer arasında çok fazla boş alan vardır.
- Bu süre boyunca bitplane'ler etkinse ekrana çöp veri çizilir.
- Bitplane'ler devre dışı bırakılırsa sprite'lar da çizilmez.
- Çözüm, yalnızca 1 bitplane'i etkin bırakıp screen pointer'ı boş veriye ayarlamaktır.
Sonuç
- Başlangıçta RAM gereksinimleri nedeniyle oyuna CG eklenip eklenmeyeceğinden emin değildi.
- Veri sıkıştırmasının uygulanması, ek yükün oldukça makul olduğunu kanıtladı.
- Amiga donanımının benzersiz özelliklerinden yararlanmak özellikle ilgi çekici.
GN⁺ görüşü:
- Bu yazı, Amiga bilgisayarının grafik işleme yeteneğini ve oyun geliştirme sırasında bellek optimizasyon tekniklerini çok iyi gösteriyor.
- Veri sıkıştırması ve donanımın özel özellikleri kullanılarak sınırlı kaynaklar içinde etkileyici efektlerin nasıl üretilebildiğini anlatıyor.
- Amiga gibi klasik bilgisayarların donanımını anlamak ve kullanmak, retro oyun geliştiricileri veya bilgisayar tarihiyle ilgilenenler için oldukça ilgi çekici bir konu.
1 yorum
Hacker News yorumları
"Racing the beam" hakkındaki yorum özeti:
Amiga 500'ün bellek yapılandırması hakkındaki yorum özeti:
Amiga'da Japon tarzı konsol oyunlarının potansiyeli hakkındaki yorum özeti:
Kısıtlar içinde kod yazmanın çekiciliği hakkındaki yorum özeti:
Amiga ile kişisel deneyim ve animasyonların nasıl yapıldığının paylaşılması hakkındaki yorum özeti: